一次笨办法TP测试

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

前言


遇到一个TP5的站,过程十分曲折有趣,引发了我这个小菜鸡的一些思考,通过文章分享一下思路,欢迎各位大佬斧正。

正文


测试受阻
前戏就不多说了,PAYLOAD打出PHPINFO。简单介绍一下这个站,nginx+TP5.0.13,开启了DEBUG,PHP_Version7.1.32
查看PHPINFO,该禁用的函数都禁用了

一次笨办法TP测试

这时候常规的思路就是利用THINK_PHP写session GETSHELL,或者利用文件包含日志GETSHELL

首先尝试session GETSHELL,我用EXP打但是失败了,蚁剑连接成功,但是却没有数据返回(可能是我EXP的问题)
尝试利用日志包含getshell
包含日志有两种思路,一种是去包含nginx的access.log或者error.log日志;另一种是去包含Thinkphp本身的日志,通常thinkphp的日志存储为 runtime/log/202012/xx.log

DEBUG查看LOG_PATH

一次笨办法TP测试

先随意请求一个PHPINFO,再用PAYLOAD包含查看是否包含成功

一次笨办法TP测试

++++++++++++++++++++++++++++++++++++++++++

一次笨办法TP测试

但是无任何回显,包含/etc/passwd可以正常显示

一次笨办法TP测试

查看一下nginx配置文件

一次笨办法TP测试

包含access.log还是失败,很可能开发者修改了默认日志路径(后来发现access.log 0B)

一次笨办法TP测试

说明payload没有问题,这时候有三种可能性
1、修改了thinkinclude模块,禁用了此功能或者修改了包含的条件
2、修改了log默认名称
3、修改了log路径,不采用thinkphp的log默认路径或者直接禁用了日志,重新开发代码将日志写到另一个文件中(实在太麻烦)

验证1,使用另一内置函数模块thinkLang::load去包含,依然失败
验证2,3此时我还没有想到

尝试新方法
这时候想到前段时间GET到的一篇好文章,介绍了一些TP5+PHP7下,诸多条件限制下,新的方法来getshell
贴出好文链接
https://mp.weixin.qq.com/s/u_zhosHaBq2gXZsZZxfPjA
简单介绍一下文章思路:思路是利用THINK框架下的内置方法thinkBuild::module来创建一个新的模块,thinkphp会在此模块的控制器中自动创建index.php,并在index.php中use think模块名controller。
PAYLOAD:_method=__construct&method=GET&server[]=1&filter[]=thinkBuild::module&get[]=xxx

例如,我用此payload创建一个名为111的模块

一次笨办法TP测试

问题在于模块名是可控的,那么我们用注入的思路传入payload会怎么样呢。

例如,本地测试传入test;phpinfo();\

一次笨办法TP测试

一次笨办法TP测试

可以看到可以成功注入payload,利用文件包含可以成功phpinfo

一次笨办法TP测试

上面的文章说的很不错,我就不一一赘述了。
我在本地复现成功,但是我在这个目标尝试依然失败,包括安恒大佬们说的application目录不可写的问题,最后发现自己连public目录都没有权限写入。。。
再次受阻

最后的笨办法

大佬们的payload没有尝试成功,只能用最后的笨办法了,既然管理员修改了日志路径或者修改了日志的命名方式,或者干脆重写了日志功能,那么我可以直接读取他的文件,来审计他到底把日志放在了什么地方。
读取文件可以用show_source()函数,readfile实在感官不太好...
查了一下开发手册,Thinkphp的日志命名方式存放在thinkphp/think/log/driver/File.php
读取一下

一次笨办法TP测试

并没有发生什么改变,那么只有可能是修改了日志路径了
期间踩了一次坑,读取common.php发现他写了一个record_log功能,让我一度以为日志在/data/app/lottery/public/log/gui.202012xx.log

一次笨办法TP测试

经过一番艰辛的查找,眼睛都看花了,最终找到了日志存放路径

一次笨办法TP测试

可以看到,他在默认的LOG_PATH后,加了BIND_MODULE修改了日志的存放路径。
那么日志路径应该是LOG_PATH/BIND_MODULE/202012/25.log

一次笨办法TP测试

找到BIND_MODULE值,包含日志

一次笨办法TP测试

成功拿下

过程总结
常规思路默认日志包含不成功,通过文章尝试新的方法未成,读取文件获取日志存放路径,通过文件包含日志GETSHLL

作者:一只发黑的苹果 原文链接:https://xz.aliyun.com/t/8920

一次笨办法TP测试

本文始发于微信公众号(Ots安全):一次笨办法TP测试

发表评论

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