看标题,提示是一个XML利用类型的题目。
打开网站,发现只有一个登录框
经过扫描等一些测试无果后,我们再回到标题提到的XML上。通过抓包我们可以发现一些东西
回显为:
- 这里表单提交的数据类型为XML,因此我们可以尝试XXE攻击。详细的讲解可以参考这篇文章。https://www.freebuf.com/vuls/175451.html
- 该请求会返回用户名
注:XXE(XML外部实体)攻击,攻击者可以恶意构造一点XML表单来达到攻击的目的。
XML可以通过一些外部实体来执行一些命令。常见的有下面这些。
这里我们可以利用文件读取来获取flag,构造如下payload即可读取/flag的内容
<?xml version="1.0" encoding="utf-8"?><!--此行可以省去-->
<!DOCTYPE note [ <!--定义此文档是 note 类型的文档-->
<!ENTITY admin SYSTEM "file:///flag">
]>
<user><username>&admin;</username><password>123456</password></user>
注:
- 文档类型定义(DTD)可定义合法的XML文档构建模块。它使用一系列合法的元素来定义文档的结构。DTD可被成行地声明于XML文档中,也可作为一个外部引用。形如
- <!ENTITY admin SYSTEM "file:///flag"> 的功能是声明一个外部实体
- 其结构依次是<!ENTITY 变量名 变量类型 默认值>
- SYSTEM标识符意味着该实体将从外部来源获取内容,可以使用上图中列举出的一些协议。
- &变量; 表示对变量的引用,这里表示引用了admin这个变量
- file:// 读取指定位置的文件
- 根据之前的回显,我们可以判断返回的数据中包含username这一项,所以我们将变量设置在username这个位置才能拿到flag
至此成功获得flag