[GoogleCTF2019 Quals]Bnv
我们打开页面,没发现有啥信息,我们进行抓包
我们看到json格式的,将json改为xml格式,尝试xxe注入
1 | Content-type: application/json |
首先构造DTD,声明实体b和元素message
其实之前做得题目都是不用申明元素的,这里如果不申明会报
1 | No declaration for element message, line 5, column 23 |
1 | <?xml version="1.0" encoding="utf-8"?> |
成功执行
再尝试加上name实体来加载内部文件
1 | <?xml version="1.0" encoding="utf-8"?> |
发生报错: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代码。
首先读/flag,第二次把/flag的里的值做实体来读取,因为/flag的里的值这个实体不存在,就会报错返回,得到flag。
像那篇文章里面写得
payload:
1 | <?xml version="1.0"?> |
得到flag