最近必火出了一个反序列化的视频,出来我就买了,很快啊,马上来篇总结
漏洞环境均为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。所以实际上这是一个多次解析,也就是%