S2-001

作者: ckj123 | 来源:发表于2019-10-21 16:49 被阅读0次

    S2-001

    复现

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

    -w448

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


    -w707
    -w701

    介绍就这么多

    测试一下


    -w361

    submit一下


    -w384
    都变成2了 说明poc成功了

    跟进

    很明显就是 -w425

    这个标签的问题跟进一下

    -w734

    跟进TextFieldTag这个函数

    -w626
    再一级一级往上跟跟到
    DoStartTag函数 -w889

    在这里打个断点

    -w756
    一路跟到这里可以看到root的username和password是%{1+1}
    -w784
    跟到这里的时候发现页面刷新变为2了
    this.mergeTemplate这个函数应该是渲染页面的
    在重新跟一遍在
    this.evaluateParams下个断点
    -w897

    进入这个函数


    -w810

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


    -w757

    进入translateVariables函数

    -w726
    -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 是默认开启的

    相关文章

      网友评论

          本文标题:S2-001

          本文链接:https://www.haomeiwen.com/subject/kjotvctx.html