[GoogleCTF2019 Quals]Bnv-解题步骤详解

admin 2022年4月23日03:28:55CTF专场评论8 views2471字阅读8分14秒阅读模式

[GoogleCTF2019 Quals]Bnv-解题步骤详解

[GoogleCTF2019 Quals]Bnv-解题步骤详解


在网页里随便点点看看,在city的下拉框里选择一个城市,点击submit会有不同的回显,没发现什么有用的地方,放dirsearch扫也没有什么隐藏目录

[GoogleCTF2019 Quals]Bnv-解题步骤详解


这里看到它会给api/search发送post请求,发送的数据是json数据,这串数据的具体含义后来了解到是我们在盲文点上所选择的城市的代表,具体的可以去下面这个网址查看:

https://www.pharmabraille.com/pharmaceutical-braille/the-braille-alphabet/

然,这些数据的含义了解与否与这道题没有太大的关系,大佬说过有json数据的地方可能存在xxe,这是一道XXE的题目,之前正好不是很了解XXE,可以借此机会学习一下。

因为这次要不断修改发送包的内容,所以选择了使用POSTMAN这个工具。

先把默认发送的数据放进去看看是否正常回显

[GoogleCTF2019 Quals]Bnv-解题步骤详解


在此基础上我们修改Content-Type为application/xml

[GoogleCTF2019 Quals]Bnv-解题步骤详解


可以看到我们得到了一个错误,意思应该是start标签没有找到第一行第一列,这意味着它需要某种XML数据,所以在做任何事情之前,让我们继续尝试看看,是否有任何实体扩展

我们将JSON数据修改为一个有效的XML字符串,<?xml version="1.0" encoding="UTF-8"?>//这一行是 XML 文档定义,然后将整个数值包装在成为根节点的消息标记中

[GoogleCTF2019 Quals]Bnv-解题步骤详解

我们得到了一个错误,它说没有找到DTD文件,让我们在DTD中添加一个简单的实体。

[GoogleCTF2019 Quals]Bnv-解题步骤详解


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

这里得说一下DTD

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

[GoogleCTF2019 Quals]Bnv-解题步骤详解


可以看到成功回显,证明起作用了

现在我们看看我们是否可以从内部向外部世界提出请求或者只是向我们选择的网站提出请求

为了测试这一点,我将使用Beeceptor,https://beeceptor.com/这是一个简单的服务,它为你提供一个子域,并快速而简单的保存向该网站发出的所有请求的日志。

[GoogleCTF2019 Quals]Bnv-解题步骤详解


添加一个外部实体来发出出口请求。

[GoogleCTF2019 Quals]Bnv-解题步骤详解


但它似乎未能加载外部实体。似乎我们不允许加载。任何外部DTDS。

[GoogleCTF2019 Quals]Bnv-解题步骤详解


那我们尝试加载一个文件

[GoogleCTF2019 Quals]Bnv-解题步骤详解

[GoogleCTF2019 Quals]Bnv-解题步骤详解

我们得到一个标记错误。这意味着文件已经正确加载了,但由于它不是个格式良好的xml文件 所以它中断了。现在我们有了一种枚举文件名的方法,让我们看看是否可以找到/flag文件。

[GoogleCTF2019 Quals]Bnv-解题步骤详解

我们得到了同样的输出。这意味着标志就存在路由中,然后被标记为一个文件。我们所要做的就是以某种方式来读取它。但是怎么读取呢?

由于我们不被允许加载外部的DTDS,我们怎么加载内部的DTDS呢?有内部的DTDS吗?如果有的话我想我们可以加载它们。因为我们可以加载HC密码。并破解它。但是这是另外一个原因,所以我们现在需要找到一个内部文件。它是一个可以包含有效XML文件,并且以某种方式获取flag。

https://mohemiv.com/tags/xxe/

上面这篇博客有一篇,关于利用本地DTD文件和XXE的经常博客文章本质上我们可以使用本地DTD文件的实体,但是我们需要在完全加载它之前对它进行定义。因为xml选择器将选择我们定义它的快速处理器。如果你想了解更多这个如何工作的信息。可以阅读这篇文章。

[GoogleCTF2019 Quals]Bnv-解题步骤详解

[GoogleCTF2019 Quals]Bnv-解题步骤详解

在block-post中也提到,Linux设备可能在/usr/share/xml/scrollkeeper/dtds/scrollkeeper-omf.dtd中有一个DTD文件。并且这个文件又一个名为ISOamsa的实体,所以我们可以使用它来写DTD代码。现在我们来制作DTD代码。

因为我们知道我们为这个例子,发送的输入是一个错误的文件名。

[GoogleCTF2019 Quals]Bnv-解题步骤详解


我们在响应中得到的文件名也与错误的文件名相同,这是可以被滥用的。

首先我们读取了所需文件的内容,它可以是一个/flag,它也可以使/etc/password,然后我们可以尝试读取另一份文件,但是我们要确保第二个是个假文件名是我们刚刚读取第一份文件的内容,显然这会给我们一个错误,因为没有文件名作为第一个文件的内容,在错误中我们得到了文件的名称,我们尝试阅读那些意味着,我们也会取回第一个文件的内容,因此使用本地DTD,通过XXE读取任意文件,让我们尝试这个阶段

[GoogleCTF2019 Quals]Bnv-解题步骤详解


最后的数据:

<?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;]>

成功拿到flag

原文来自CSDN博主「lmonstergg」|侵删



[GoogleCTF2019 Quals]Bnv-解题步骤详解

[GoogleCTF2019 Quals]Bnv-解题步骤详解


中电运行是专业专注培养能源企业IT工匠和提供IT整体解决方案的服务商,也是能源互联网安全专家。

为方便大家沟通,中电运行开通“中电运行交流群”,诚挚欢迎能源企业和相关人士,以及对网络安全感兴趣的群体加入本群,真诚交流,互相学习[GoogleCTF2019 Quals]Bnv-解题步骤详解[GoogleCTF2019 Quals]Bnv-解题步骤详解。想加入我们就给我们留言吧[GoogleCTF2019 Quals]Bnv-解题步骤详解

[GoogleCTF2019 Quals]Bnv-解题步骤详解

[GoogleCTF2019 Quals]Bnv-解题步骤详解

小白必读!寰宇卫士手把手教你栈溢出(上)

手把手教你栈溢出(中)

手把手教你栈溢出(下)

《信息安全知识》之法律关键常识汇总

CTF经验分享|带你入门带你飞!

[GoogleCTF2019 Quals]Bnv-解题步骤详解


原文始发于微信公众号(寰宇卫士):[GoogleCTF2019 Quals]Bnv-解题步骤详解

特别标注: 本站(CN-SEC.COM)所有文章仅供技术研究,若将其信息做其他用途,由用户承担全部法律及连带责任,本站不承担任何法律及连带责任,请遵守中华人民共和国安全法.
  • 我的微信
  • 微信扫一扫
  • weinxin
  • 我的微信公众号
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2022年4月23日03:28:55
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                  [GoogleCTF2019 Quals]Bnv-解题步骤详解 http://cn-sec.com/archives/914214.html

发表评论

匿名网友 填写信息

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: