Hello 大家好,我又来写Web题目的WriteUp了,抱着春季赛web题目=打卡题的心态我就来了,谁曾想到秋季赛的题目如此变态。从中午12点到晚上七点半就起来上过一次厕所,再没离开过电脑。要不是xtgo五虎将全军出击,不然这道题我就只能继续奋发图强(shan ku pao lu)了-.-
OK言归正传开始解题:
一道Web题,访问链接:
6daK9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8U0p5J5x3g2)9J5k6e0x3$3i4K6u0W2x3e0b7#2i4K6u0W2x3e0f1%4i4K6y4m8z5o6l9^5z5q4)9J5c8R3`.`.
利用技术绕过限制,获得flag.txt文件中的值。
首先访问域名发现,谁给kctf首页的图偷来了。。。

打开抓包工具看看刚好发现有个备注彩蛋

访问彩蛋 558K9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8U0p5J5x3g2)9J5k6e0x3$3i4K6u0W2x3e0b7#2i4K6u0W2x3e0f1%4i4K6y4m8z5o6l9^5z5q4)9J5c8X3I4G2j5h3c8o6L8$3&6X3K9h3N6Q4x3@1k6#2M7X3I4Q4x3@1c8^5i4K6u0W2P5r3#2D9 ,可以看到接口有IP限制,目测接口的功能可能是加载服务器上的某些配置文件

遇到了IP限制当然要试一试XFF

结果就是这道题的考点不是XFF,header全加上也没用,还是提示" not allow ip"。
接着看下刚才访问首页下载图片的第二个接口
ee3K9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8U0p5J5x3g2)9J5k6e0x3$3i4K6u0W2x3e0b7#2i4K6u0W2x3e0f1%4i4K6y4m8z5o6l9^5z5q4)9J5c8X3N6W2N6r3W2E0j5h3N6W2i4K6y4r3N6i4u0D9i4K6y4p5K9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6T1j5Y4y4Q4x3X3g2H3k6h3c8A6P5g2)9J5k6h3y4G2L8g2)9J5c8Y4g2H3L8r3!0S2k6q4)9J5c8X3q4@1N6r3q4U0K9q4)9J5c8U0t1H3x3U0l9H3z5g2)9J5c8U0t1K6y4U0M7$3x3W2)9#2k6W2V1%4y4V1x3%4x3@1E0c8b7K6N6y4c8K6R3K6c8#2)9J5k6h3A6H3k6H3`.`.

看到url中的 ?url=http://xxx 一下就来了精神,配合刚才限制IP的接口,肯定是SSRF了,改一下跳转的url地址到某度,发现跳转地址有正则表达式限制,刚好也返回了过滤规则

分析下正则核心的三个条件
1、一级域名必须为看雪域名 pediy.com
2、二级域名可以填写除?$/三个符号的任意内容
3、path不做任何限制
通过前一步的信息收集和题目理解,大致的攻击思路为
1、绕过getimage接口的过滤规则
2、绕过后通过SSRF访问loadConfig接口
3、通过loadConfig尝试访问服务器上flag.txt文件
首先将getimage接口中跳转URL的二级域名和path替换

发现提示无效的端口号,并没有提示正则错误,那就对整个域名进行两次转义替换(浏览器和服务器接到参数后都会默认进行一次decode,所以需要进行两次encode)
成功绕过正则限制,出现异常回显

本以为今天的活动到此结束,谁知道这只是开始。。。
访问/flag.txt发现没有找到此文件,然后尝试读取/etc/passwd发现这个java接口只能接收xml document

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

注入接口
731K9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8U0p5J5x3g2)9J5k6e0x3$3i4K6u0W2x3e0b7#2i4K6u0W2x3e0f1%4i4K6y4m8z5o6l9^5z5q4)9J5c8X3N6W2N6r3W2E0j5h3N6W2i4K6y4r3N6i4u0D9i4K6y4p5K9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8X3I4G2j5$3q4D9K9r3!0K6N6q4)9J5y4e0t1#2x3$3p5^5x3o6R3^5i4K6t1#2x3U0f1J5k6X3I4G2j5h3c8o6L8$3&6X3K9h3N6Q4x3U0f1J5y4e0y4X3N6i4u0D9i4K6t1#2x3U0f1K6k6s2S2Q4x3X3g2^5L8h3I4Q4x3X3g2H3k6h3c8A6P5g2)9J5k6h3y4G2L8g2)9J5c8X3I4G2j5h3c8o6L8$3&6X3K9h3N6Q4x3@1k6#2M7X3I4Q4x3@1c8Z5N6s2c8H3i4K6y4m8i4K6u0r3i4K6u0r3K9i4m8Q4x3@1q4H3L8%4u0@1i4K6u0r3N6r3g2K6N6q4)9J5k6i4S2E0L8l9`.`.

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

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

最后一步通过jar:和file:协议访问jar包中的flag.txt
参考XXE注入
xxe.dtd
成功在异常中获取flag!congratulations!

http:
/
/
121.36
.
145.157
:
8088
/
getimage?url
=
http:
/
/
localhost
%
253a8088
%
252floadConfig
%
253furl
%
253dx
.xml.pediy.com
/
loadConfig?url
=
x.xml
http:
/
/
121.36
.
145.157
:
8088
/
getimage?url
=
http:
/
/
localhost
%
253a8088
%
252floadConfig
%
253furl
%
253dx
.xml.pediy.com
/
loadConfig?url
=
x.xml
<!DOCTYPE foo
[<!ELEMENT foo
ANY
>
<!ENTITY xxe
"Thinking"
>]>
<foo>&xxe;<
/
foo>
<!DOCTYPE foo
[<!ELEMENT foo
ANY
>
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课
最后于 2020-11-23 11:06
被xjklewh编辑
,原因: update