实战|记某CMS三进三出Getshell记录

  • A+
所属分类:安全文章

0x01 任意密码重置+文件上传


目标是一套教育的小众收费cms系统,经过挖掘发现存在任意密码重置:

所以直接来到找回密码处,重置admin的密码

实战|记某CMS三进三出Getshell记录

系统采用的验证方式是发送邮箱的验证码,验证码会直接放在响应包中:

实战|记某CMS三进三出Getshell记录

输入验证码,重置成功:

实战|记某CMS三进三出Getshell记录

实战|记某CMS三进三出Getshell记录

重置admin账号密码后成功登录系统,上传文件位置没有做限制,任意文件上传一把梭。

实战|记某CMS三进三出Getshell记录

shell到手。

实战|记某CMS三进三出Getshell记录


0x02重置普通用户+另一处文件上传


隔一段时间去看,上一次在我热心的报送后,加了点限制。

实战|记某CMS三进三出Getshell记录

虽然加了限制不能重置管理员admin的密码,但本身漏洞还在,仍然可以重置其他用户密码,说干就干,爆破账号,获得账号1000001

实战|记某CMS三进三出Getshell记录

继续下去,通过返回包获得验证码,然后重置密码:

实战|记某CMS三进三出Getshell记录

重置密码成功,赶紧去看我的文件上传还能不能上传,发现不能上传了。

实战|记某CMS三进三出Getshell记录

试了一会,不能绕过,转测其他功能点:

实战|记某CMS三进三出Getshell记录

附件上传成功,管理员只对之前的一处文件上传做了限制,并没有对其他上传点做限制。成功getshell

实战|记某CMS三进三出Getshell记录


0x03绕过限制重置管理员密码+文件上传


过了几天挖不到洞了回来看看,发现之前的账号规则都修改了,账号不是数字,也无法重置管理员admin的密码,猜测既然不是工号,那么无非有两种可能,字母+字数或者是姓名。说干就干,直接爆破。

字母+数字爆破比较麻烦,范围也大,由于用户过多,可能性也小,果断选择中文姓名爆破:

爆破中文账户需要先将中文姓名通过url编码写进字典里面。

成功获得账户名:

实战|记某CMS三进三出Getshell记录


再次去重置密码==》成功登录==》找文件上传。

但是发现对所有文件上传位置都做了限制,绕不开,想其他办法。

实战|记某CMS三进三出Getshell记录

普通用户无法上传文件:“暂不支持该文件类型,如有需要,请联系管理员”

所以想办法看看能不能再次重置管理员密码,尝试管理员文件上传,在重置密码的第二步,传参是用户名和密码,并没有对验证码进行效验(当然,验证码我们也知道,但问题是第一步的管理员账户无法重置,所以这里算是绕过了不能重置管理员密码的限制)

实战|记某CMS三进三出Getshell记录

成功重置管理员admin密码,以管理员登录,上传文件果然无限制,成功getshell,至此已经三次getshell了。

实战|记某CMS三进三出Getshell记录


0x04后台任意文件下载获取数据库权限


过了几天再去看看。管理员密码被修改了,而且忘记密码功能已经被删除了(想必管理员也是累了)。使用我们之前重置密码的普通用户上去测试一番。果然,上传点啥的,都做了限制。上传没问题了,但是下载有问题,个人网盘里面存在任意文件下载。

实战|记某CMS三进三出Getshell记录

使用目录穿越可下载其他目录文件,尝试下载apache-tomcat根目录的notice文件

实战|记某CMS三进三出Getshell记录

扫了一下端口,发现开了mysql外链:

实战|记某CMS三进三出Getshell记录

尝试读取META-INF/context.xml文件,获取jdbc数据库连接密码文件。

成功获取到密码:root  xxxxxxxxx

实战|记某CMS三进三出Getshell记录

连接数据库成功:

实战|记某CMS三进三出Getshell记录

测试数据库查询获取数据。提交!

实战|记某CMS三进三出Getshell记录


0x05 SQL注入获取全校数据库信息


过了几天实在挖不到洞了再回来看看。由于忘记密码功能已经没了,我手里一个用户都没有,但可能是觉得没了重置密码功能不舒服,管理员增加了一个手机验证码登录功能,改成了直接用短信登录:

实战|记某CMS三进三出Getshell记录


尝试短信轰炸,发送回显成功,但是实际上没发过来,简单绕一下,没绕过:

实战|记某CMS三进三出Getshell记录

发现短信验证码为4位数,尝试准备爆破。

实战|记某CMS三进三出Getshell记录

爆破之前随手测了一手注入,成功发现报错注入一枚,前台后台找遍了都没找到sql注入,结果新加了一个功能随手就出了一个注入,大喜过望。实战|记某CMS三进三出Getshell记录


Sqlmap一把梭,有堆叠注入,但写不进去shell,这就很头疼。

实战|记某CMS三进三出Getshell记录

实战|记某CMS三进三出Getshell记录

没法写shell,使用超级sql注入工具,把管理员密码读出来,但无法解密。

实战|记某CMS三进三出Getshell记录

实战|记某CMS三进三出Getshell记录

通过sqlmap读密码未果。

实战|记某CMS三进三出Getshell记录

但还是可以通过sqlmap跑出所有全校师生所有数据。提交!

实战|记某CMS三进三出Getshell记录


验证码爆破功能由于不知道管理员手机号,暂时没法利用。到时候社工一波,又能getshell了。



总结:

1、任意密码重置管理员密码文件上传getshell

2、普通用户后台文件上传getshell

3、越权重置管理员密码文件上传getshell

4、任意文件读取获取数据库权限

5、sql注入获取数据库权限。


实战|记某CMS三进三出Getshell记录


点赞    在看    转发


原创投稿作者:csz

实战|记某CMS三进三出Getshell记录

本文始发于微信公众号(HACK学习君):实战|记某CMS三进三出Getshell记录

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: