极客大挑战 RCE ME
三叶草招新赛里面一个比较难的题,无字母数字命令执行+bypass disable_function
当时做的时候不会手搓上传就弃了,今天在buu上复现重做了一遍
无字母数字命令执行
<?php
error_reporting(0);
if(isset($_GET['code'];)){
$code=$_GET['code'];;
if(strlen($code)>40){
die("This is too Long.");
}
if(preg_match("/[A-Za-z0-9];+/",$code)){
die("NO.");
}
@eval($code);
}
else{
highlight_file(__FILE__);
}
// ?>
相比于SUCTF的命令执行简单了很多,直接使用取反~就能节约很多字符,也没有对使用字符种类的限制,可以直接构造简单的执行语句
var_dump(scandir(‘/‘));扫描目录发现根目录下有flag文件和readflag,直接读读不出来没权限,那么就是需要执行readflag了,但是从phpinfo里面可以看到禁止了能用的所有执行命令行的函数,但是有一个assert可以用,就构造一个assert($_GET[_];)进行命令执行,跳出长度限制,任意执行命令