Pingpingping 解题思路
题目
源代码
<?php
highlight_file(__FILE__);
error_reporting(0);
$_ping = $_GET['Ping_ip.exe'];
if(isset($_ping)){
system("ping -c 3 ".$_ping);
}else{
$data = base64_encode(file_get_contents("error.png"));
echo "<img src='data:image/png;base64,$data'/>";
}
直接给出了我们的源代码,我来简单的进行一些代码解说。
这代码非常简单,先是需要我们以get的方式提交参数Ping_ip.exe。然后我们提交的参数会在system()函数中与ping命令连接在一起进行执行。
那么很明了的思路就是使用我们的cat命令抓取我们的flag。
system("ping -c 3 ".$_ping);
可以看到我们这里面的ping命令形式是不完整的,所以我们必须要先补全我们的ping命令再进行cat命令抓取。
那么第一个陷阱点出现了,我们必须提交的参数是Ping_ip.exe但是:
PHP中我们变量名只有数字字母下划线,被get或者post传入的变量名,如果含有空格、+、[则会被转化为_,如果传入[,它被转化为_之后,后面的字符就会被保留下来不会被替换。
可以看到如果直接提交则会发生错误。
所以我们必须先转义前面的字符,以防止后面的点被转义。
为了使其转义为下划线所以我们选择使用[来替换。
payload
/?Ping[ip.exe=127.0.0.1;cat /flag
原文地址:https://blog.csdn.net/2301_77012231/article/details/144740846
免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!