A simple cms writeup
做此题之前刚好做了一道原题,比赛的时候是做到最后一步的,但是出了差错没有出flag,很气。
- 首先,打开连接,发现是onethink1.0框架。搜索该框架的漏洞,果然发现了getshell利用过程,原理如下: > 该框架是对thinkphp框架的二次开发,会将注册后的用户名内容存入临时php文件中。
我们使用一句话来作为用户名注册账户,在登录后就将其存入缓存文件,最后访问缓存文件即可完成getshell。
原理比较简单,但是具体利用过程有几个关键点: 1. 注册用户名由于特殊字符不能直接输入进输入框。 2. 存放一句话的临时文件名并不知道。
* 对于问题1,可以通过burp修改包完成。 问题二则需要一定技巧。
- 首先,使用工具扫描网站路径,发现www.zip文件可以直接下载,解压后发现是onethink打包。此时考虑本地复现,从而解决问题2。
- 解压至xampp文件夹后,访问本地网页发现并不能成功访问,出现数据库错误字样,这是因为本地数据库没有配置的缘故。此处只能重装onethink来解决。
- 搜索onethink重装方法,按教程搜索并删除子文件夹中的.lock文件,打开install.php文件,完成安装。
- 进入注册界面,填入信息后,使用burp拦截并更改,将用户名改为
%0a$x=$_GET[a];//
(说明:%0a为换行符十六进制,为了在文件中换行,//是注释,将一句话后的无关代码注释掉以正常运行) - 用同样的方法注册
%0apassthru($x);//
用户。 - 进入登录界面,按顺序依次登入以上两个用户(使用burp改用户名)此时,一句话已写入临时文件中。
- 使用notepad++文件搜索功能搜索payload,查找到一句话文件所在位置(\Runtime\Temponethink_6d11f0be3af9c28d4120c8fd5fe65a40.php和\Runtime\Temp\onethink_d403acece4ebce56a3a4237340fbbe70.php文件都可以)
- 之后访问一句话,可以执行shell命令,搜索目录后得到flag。