S2-001
2019-10-21 本文已影响0人
ckj123
S2-001
复现
用了p牛的环境
https://github.com/vulhub/vulhub/blob/master/struts2/s2-001/S2-001.war
是一个很正常的表单
打开link学习一下
-w707
-w701
介绍就这么多
测试一下
-w361
submit一下
-w384
都变成2了 说明poc成功了
跟进
很明显就是 -w425这个标签的问题跟进一下
-w734跟进TextFieldTag
这个函数
再一级一级往上跟跟到
DoStartTag函数 -w889
在这里打个断点
-w756一路跟到这里可以看到root的username和password是%{1+1}
-w784
跟到这里的时候发现页面刷新变为2了
this.mergeTemplate
这个函数应该是渲染页面的在重新跟一遍在
this.evaluateParams
下个断点-w897
进入这个函数
-w810
先将username组装成
%{username}
在findvalue里面查找一下
-w757
进入translateVariables
函数
-w736
在上面来获得里面值在通过findvalue找一下值
-w792
进入getvalue
-w836-w805
-w795
在这个函数进行赋值
-w862
这里已经赋值完成 -w857
回到循环的地方继续往下走
可以看到o的值已经是%{1+1}了
-w710
这里因为while(true)
循环又来了一遍导致值解析了
-w765
修复方法
修复方法把while(true)去掉???
-w1119多了一个loopcount的检测
减少递归
番外
altSyntax
经常可以在代码中看到判断了是否是这个altSyntax || context.containsKey("useAltSyntax") && context.get("useAltSyntax") != null && "true".equals(context.get("useAltSyntax").toString())
Syntax 功能是 Struts 2 框架用于处理标签内容的一种新语法(不同于普通的 HTML ),该功能主要作用在于支持对标签中的 OGNL 表达式进行解析并执行
不过struts2 001 是默认开启的