struct2利用

最近必火出了一个反序列化的视频,出来我就买了,很快啊,马上来篇总结

漏洞环境均为docker compose起的vulhub,然后环境拉出来,IDEA配个远程调试

struts2

s2-005

如何快速判断目标主机是否使用了struct2:路径中会存在xxx.action

依次为执行到下一行,步入和强制步入

如果调试中没有步入,应该是没有导入依赖包。在lib库右键添加库,选择默认(Project library的进行添加

payload:

用第一个payload做下调试

%{"tomcatBinDir{"+@java.lang.System@getProperty("user.dir")+"}"},原理就是通过OGNL多次解析%{},从而调用了java.lang.Sytem的getProperty(“user.dir”)来获取路径

循环解析ognl

strut2 001就是利用了在解析表单时利用了OGNL(%{})来进行解析,入口点在TextParseUtil:

1
Object result = expression;

直接打上断点,记得要右上角下载源码

最开始的expression是index.jsp,

一直跳过直到expression为%{username}

开始步过,start来到0

在这里while条件都为真,进入循环,循环就是取%{}中间的值

强制跳到end = x - 1

在这里步入可以看到跳到了OgnlValueStack

下面的调试就不详细讲了,一样的思路,算了还是记录一下

一直步过到执行OgnlUtil.getValue()获取表达式的值,步入

调用了Ognl对象的方法,继续步入

运行到这一步时,reult就是输入的username的值

返回到OgnlValueStack,把取出来的username的值赋给了value

上述的步骤就是通过findValue找到username里的值,相当于php里的value = $_POST['username'];

因为处于while循环,且每次循环后面都把获取到的值再次赋给了expression。所以实际上这是一个多次解析,也就是%

上一篇:
java书城全开发流程
下一篇:
Spring Cloud GateWay CVE-2022-22947构造哥斯拉马