首页
社区
课程
招聘
[原创]KCTF2020第一题 至暗时刻 writeup
发表于: 2020-11-20 11:56 14003

[原创]KCTF2020第一题 至暗时刻 writeup

2020-11-20 11:56
14003

题目描述:

一道Web题,访问链接:

502K9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8U0p5J5x3g2)9J5k6e0x3$3i4K6u0W2x3e0b7#2i4K6u0W2x3e0f1%4i4K6y4m8z5o6l9^5z5q4)9J5c8R3`.`.

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

访问页面,是一张图片,查看页面源代码:

发现一个被注释掉的url:

看样子貌似可以访问指定的url
但访问页面返回not allow ip,IP不被允许:

尝试 X-Forwarded-For 伪造客户端IP
抓包到burp中,爆破了一些内网ip都显示not allow ip:

仅192.168端就有60000多个ip,显然也不会是爆破去做-_-|

回顾前面的网页源码发现另一个用来加载图片的链接:

是访问指定的url获取资源的,尝试修改url参数,返回如下的正则表达式:

应该是要想办法绕过这个正则,访问指定的url
这个正则要求url是如下格式:

{1}处不允许出现'?','#','/'字符
{2}处可以是任意内容

直接用'#'无法通过正则:

尝试进行URL编码,还是不能通过正则:

换其它符号试试,发现在做正则检查前会进行一次URL解码:

尝试进行两次URL编码绕过:

绕过成功,已经尝试去访问 8b8K9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1j5I4x3U0N6Q4x3X3f1H3i4K6u0W2x3q4)9J5k6e0p5`.

在自己的vps起了web服务,用这个ssrf去访问,企图获得真实IP,然后用这个IP去利用第一个接口:

这里注意到,我的web是起在5000端口的,但直接输 http://ip:port 的形式会报错 invalid port number

所以':'也要两次URL编码,访问成功,但是在我的vps获得的IP是 121.36.145.157 :

这不就是题目地这么,拿去 /loadConfig?url=x.xml 那里尝试,依然是 not allow ip ,行不通

又尝试ssrf 086K9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8U0p5J5y4#2)9J5k6e0m8Q4x3X3f1H3i4K6u0W2x3g2)9K6b7e0R3H3z5o6S2Q4x3V1k6D9L8$3q4V1b7$3!0F1k6X3W2Y4i4K6y4r3N6i4u0D9i4K6y4p5P5q4)9J5k6i4S2E0L8l9`.`. 这个url,构造请求:

返回结果,访问成功:

发到burp中继续尝试:

发现会从 /loadConfig?url=x.xml 指定的位置读取文件并当作XML来解析,猜测XXE漏洞

在自己的vps上放了以下payload:

构造请求:

没有正常回显内容,尝试用FTP协议把内容发送出来,payload:

并在vps的30000端口上起了ftp服务,脚本:c51K9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6Y4K9i4c8Z5N6h3u0Q4x3X3g2U0L8$3#2Q4x3V1k6a6e0Y4y4W2j5#2)9J5k6p5I4S2j5W2)9J5c8Y4y4U0M7X3W2H3N6s2y4Q4x3V1k6T1L8r3!0T1i4K6u0r3L8h3q4K6N6r3g2J5i4K6u0r3P5s2S2W2i4K6u0V1k6Y4c8H3i4K6u0V1M7$3g2J5N6X3g2J5i4K6u0W2M7X3t1`.

构造请求:

在vps上接收到内容 /etc/issue 文件的内容:

但是尝试读含有特殊字符的文件时,就无法正常发送数据到vps:

而且没法查看目录,没办法找flag
之后又用netdoc协议试试,可以列目录,使用以下payload:

构造请求:

在burp中可以回显,已经可以列目录,读文件了:


之后就是列目录,看文件。。。

在/home下有一些jar包:

用jar:file:读jar包,尝试了spring jar包常见的路径

最后找到flag.txt的路径是 vip-demo-0.0.1-SNAPSHOT.jar包下的 /BOOT-INF/classes/flag.txt,payload:

获得flag截图:

获得的flag是 flag{congratulations-Path-the-spring-boot}

 
 
 
 
 
<html>
<head>
<meta charset="UTF-8">
<title>test</title>
</head>
<body>
<img src="/getimage?url=https://bbs.pediy.com/upload/attach/202009/236762_Y76C73KQC7MG83G.jpg">
<!--测试加载配置文件 /loadConfig?url=x.xml-->
</body>
</html>
<html>
<head>
<meta charset="UTF-8">
<title>test</title>
</head>
<body>
<img src="/getimage?url=https://bbs.pediy.com/upload/attach/202009/236762_Y76C73KQC7MG83G.jpg">
<!--测试加载配置文件 /loadConfig?url=x.xml-->
</body>
</html>
http://121.36.145.157:8088/loadConfig?url=x.xml 
http://121.36.145.157:8088/loadConfig?url=x.xml 
 
 
 
 
 
http://121.36.145.157:8088/getimage?url=https://bbs.pediy.com/upload/attach/202009/236762_Y76C73KQC7MG83G.jpg
http://121.36.145.157:8088/getimage?url=https://bbs.pediy.com/upload/attach/202009/236762_Y76C73KQC7MG83G.jpg
 
illegal url! ^(http|https):\\/\\/[^?#\\/]*\\.pediy\\.com\\/.*
illegal url! ^(http|https):\\/\\/[^?#\\/]*\\.pediy\\.com\\/.*
http://{1}.pediy.com/{2}
https://{1}.pediy.com/{2}
http://{1}.pediy.com/{2}
https://{1}.pediy.com/{2}
 
 
 
 
 
 
 
 
 
 

[培训]科锐逆向工程师培训第53期2025年7月8日开班!

收藏
免费 5
支持
分享
最新回复 (4)
雪    币: 155
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
2
学习了,尤其是netdoc:///和jar:file:///的用法,太强了
2020-12-8 09:44
0
雪    币: 20
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
3

为何netdoc协议可以?

最后于 2021-7-11 11:29 被babaa编辑 ,原因:
2021-7-3 15:44
0
雪    币: 257
活跃值: (277)
能力值: ( LV2,RANK:15 )
在线值:
发帖
回帖
粉丝
4
babaa 为何netdoc协议可以?
我这里做的时候本来是打算把file协议读取的内容构造链接通过ftp协议发送到我自己的vps上,但是后来尝试发现,ftp协议外带数据存在一些限制,在这道题里就是构造链接中存在\n之类的特殊字符会报出异常,但并没有像下面netloc协议那样把构造的链接爆出来,具体可参考这篇文章:
064K9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6C8P5h3I4A6L8X3N6A6N6q4)9J5k6h3y4G2L8g2)9J5c8X3u0D9L8$3N6Q4x3V1k6B7j5i4k6S2i4K6u0V1P5s2S2W2i4K6t1#2c8e0c8Q4x3U0g2n7z5q4)9J5y4f1q4p5i4K6t1#2c8e0c8Q4x3U0g2n7z5q4)9J5y4f1p5@1i4K6t1#2c8e0N6Q4x3U0g2m8y4#2)9J5y4e0S2p5i4K6t1#2c8e0k6Q4x3U0f1&6y4g2)9J5y4f1t1H3i4K6t1#2c8e0k6Q4x3U0f1^5c8q4)9J5y4f1q4q4i4K6t1#2c8e0c8Q4x3U0g2n7b7#2)9J5y4f1p5H3i4K6t1#2c8e0S2Q4x3U0g2n7c8g2)9J5y4e0V1K6i4K6t1#2c8e0g2Q4x3U0g2n7c8q4)9J5y4f1p5J5i4K6t1#2c8e0g2Q4x3U0g2n7b7#2)9J5y4e0S2r3i4K6t1#2c8e0g2Q4x3U0f1^5c8W2)9J5y4e0S2m8i4K6t1#2c8e0N6Q4x3U0f1&6b7W2)9J5y4f1t1^5i4K6t1#2c8e0g2Q4x3U0f1^5y4g2)9J5y4f1t1K6i4K6t1#2c8e0W2Q4x3U0f1&6z5g2)9J5y4e0V1H3i4K6t1#2c8e0g2Q4x3U0f1^5z5q4)9J5y4f1t1$3i4K6u0r3
后来看了些其他的利用文章,发现了netloc协议可以替代file协议用来读文件也可以用来列目录,netloc协议可以参考这里,:
b78K9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6B7L8r3E0D9i4K6u0W2k6$3W2@1K9s2g2T1i4K6u0W2K9h3!0Q4x3V1j5J5x3o6t1H3i4K6u0r3x3o6S2Q4x3V1j5J5y4q4)9J5c8V1A6S2N6X3q4Q4y4h3j5H3x3#2)9J5c8R3`.`.
我这里在g.dtd中使用netloc协议是用来读取文件和列目录的,在d.dtd中使用netloc协议尝试使用构造的链接访问文件,然后由于压根没这个链接所指向的资源报出了Can't find file for URL...的错误,甚至把构造的链接也显示出来了,然后我就用这个报错回显来配合netloc本地读文件列目录继续做题了。
后面也看了师傅们的解法,我这里只是自己的尝试,谢谢提出问题
2021-7-7 15:38
0
雪    币:
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
5
学习到了
2022-4-21 17:21
0
游客
登录 | 注册 方可回帖
返回