记录一道利用 create_function() 函数漏洞getshell的题。
关于create_function()函数漏洞利用可以参考下面的文章
https://www.cnblogs.com/zzjdbk/p/12980483.html
老样子看源码
<?php
highlight_file(__FILE__);
//flag:/flag
if(isset($_POST['shaw'])){
$shaw = $_POST['shaw'];
$root = $_GET['root'];
if(preg_match('/^[a-z_]*$/isD',$shaw)){ //以小写字母以及_ 开头和结尾
if(!preg_match('/rm|ch|nc|net|ex|\-|de|cat|tac|strings|h|wget|\?|cp|mv|\||so|\$/i',$root)){
$shaw('',$root);
}else{
echo "Almost there^^";
}
}
}
?>
题目的意思很明显了,就是让我们利用 create_function这个函数getshell,我们让 $shaw=create_function,$root=;}任意代码;// 其中}是为了闭合函数,//是为了注释后面的代码从而让我们执行我们想要执行的代码
看看效果
可以看到成功RCE,这里phpinfo()是无法执行的,因为过滤了h,题目提示或者 ls / 可以知道flag在根目录
常规读取文件的命令cat,tac,head,sort等被过滤,我们可以直接使用反斜杠 \ 绕过,当然也可以使用less,tail命令来绕过
成功得到flag。