S2-001

S2-001

复现

用了p牛的环境
https://github.com/vulhub/vulhub/blob/master/struts2/s2-001/S2-001.war

S2-001_第1张图片
-w448

是一个很正常的表单
打开link学习一下


S2-001_第2张图片
-w707

S2-001_第3张图片
-w701

介绍就这么多

测试一下


S2-001_第4张图片
-w361

submit一下


S2-001_第5张图片
-w384

都变成2了 说明poc成功了

跟进

很明显就是
-w425

这个标签的问题跟进一下

S2-001_第6张图片
-w734

跟进TextFieldTag这个函数

S2-001_第7张图片
-w626

再一级一级往上跟跟到
DoStartTag函数

S2-001_第8张图片
-w889

在这里打个断点

S2-001_第9张图片
-w756

一路跟到这里可以看到root的username和password是%{1+1}
S2-001_第10张图片
-w784

跟到这里的时候发现页面刷新变为2了
this.mergeTemplate这个函数应该是渲染页面的
在重新跟一遍在
this.evaluateParams下个断点
S2-001_第11张图片
-w897

进入这个函数


S2-001_第12张图片
-w810

先将username组装成
%{username}
在findvalue里面查找一下


-w757

进入translateVariables函数

S2-001_第13张图片
-w726

S2-001_第14张图片
-w736

在上面来获得里面值在通过findvalue找一下值
S2-001_第15张图片
-w792

进入getvalue

S2-001_第16张图片
-w836

S2-001_第17张图片
-w805

S2-001_第18张图片
-w795

在这个函数进行赋值


S2-001_第19张图片
-w862

这里已经赋值完成
S2-001_第20张图片
-w857

回到循环的地方继续往下走
可以看到o的值已经是%{1+1}了


S2-001_第21张图片
-w710

这里因为while(true)
循环又来了一遍导致值解析了


S2-001_第22张图片
-w765

修复方法

修复方法把while(true)去掉???

S2-001_第23张图片
-w1119

多了一个loopcount的检测
减少递归

番外

altSyntax 经常可以在代码中看到判断了是否是这个altSyntax || context.containsKey("useAltSyntax") && context.get("useAltSyntax") != null && "true".equals(context.get("useAltSyntax").toString())
Syntax 功能是 Struts 2 框架用于处理标签内容的一种新语法(不同于普通的 HTML ),该功能主要作用在于支持对标签中的 OGNL 表达式进行解析并执行
不过struts2 001 是默认开启的

你可能感兴趣的:(S2-001)