S2-029
前言
S2-029漏洞是由于Struts2的i18n、text标签中的name属性的值会经过两次Ognl表达式解析。
正文
假设有如下缺陷代码:

jsp文件中使用Struts2的i18n标签获取请求中的参数“jinqi”,放入了attribute中。struts2的i18n标签中的name属性通过%{}的形式读取该参数值后将该值当作ognl表达式处理(这是第一次ognl表达式处理,这是因为struts2的标签中本来就是通过OgnlValueStack值栈来取值的)。
访问http://localhost:8088/struts2-showcase-2.1.6/S2-029.jsp?jinqi=aaaa,在I18n.class的start方法中打断点停下来看看:

跟进findString方法中:


TextParseUtil.translateVariables这个方法我们之前分析过,就是将expr中%{}里面的字符串当作ongl表达式解析,此时%{}里面包含的字符串是#request.jinqi,也就是说读取request对象中的jinqi属性,而jinqi属性的值在上面是我们可控的,此时是aaaa,回到I18n.class的start方法中:

可以看到,此时获取的name就是aaaa,然后用作字符串拼凑后,放入了findValue方法中,跟进该方法:

很明显,调用了OgnlValueStack.findValue(),我们知道这个方法里面也是将输入的参数当作了Ognl表达式执行,此时的参数expr是getTexts('aaaa'),由于aaaa是受我们控制的,且该参数值是直接通过字符串拼凑的,我们只需要将字符串前半部分
getTexts(' 和后半部分 ') 闭合掉就好了,中间接我们的poc就好了。
本地windows测试用的弹计数器的poc(get请求,所以用的url编码):%27)%2c%23cmd%3d%27calc%27%2c%23cmds%3d%7b%27cmd.exe%27%2c%27%2fc%27%2c%23cmd%7d%2c%23p%3dnew+java.lang.ProcessBuilder(%23cmds)%2c%23process%3d%23p.start()%2cnew+java.lang.String(%27

总结
本来还想整个有回显的poc出来的,但是一直没成功,后来想想这个漏洞利用起来较为麻烦,难以批量,于是就放弃了,这个漏洞就当了解算了。
S2-029的更多相关文章
- s2 devMode cmdshell
s2 devMode cmdshell 仅支持批量验证,命令执行 链接:http://pan.baidu.com/s/1sl7tgRV 密码:wud8 也可以通过outscan一键获取,之后导入t ...
- 电源相关知识—S0、S1(POS)、S2、S3(STR)、 S4、S5、睡眠、休眠、待机
转 http://blog.sina.com.cn/s/blog_52f28dde0100l3ci.html APM https://en.wikipedia.org/wiki/Advanced_Po ...
- 判断s2是否能够被通过s1做循环移位(rotate)得到的字符串是否包含
问题:给定两个字符串s1和s2,要求判断s2是否能够被通过s1做循环移位(rotate)得到的字符串包含.例如,S1=AABCD和s2=CDAA,返回true:给定s1=ABCD和s2=ACBD,返回 ...
- S2 易买网总结
易买网项目总结 --指导老师:原玉明 不知不觉,又到了S2结业的时间了,S1的项目KTV项目还历历在目.一路走来,感觉时间过的好快,我们离就业也越来越近... 展示: 1.主页面(首页) 01.商品分 ...
- 445. Add Two Numbers II ——while s1 or s2 or carry 题目再简单也要些测试用例
You are given two linked lists representing two non-negative numbers. The most significant digit com ...
- php大力力 [029节] 做PHP项目如何下载js文件:使用腾讯浏览器把网上案例页面存储到本地
php大力力 [029节] 做PHP项目如何下载js文件:使用腾讯浏览器把网上案例页面存储到本地 yeah,搞定啦 php大力力 [029节] 做PHP项目如何下载js文件:使用腾讯浏览器把网上案例页 ...
- 写一个函数,实现两个字符串的比较。即实现strcmp函数,s1=s2时返回0,s1!=s2时返回二者第一个不同字符的ASCII值。
#include<stdio.h> #include<stdlib.h> int main(){ setvbuf(stdout,NULL,_IONBF,); ],s2[]; i ...
- ACPI电源管理中的S0 S1 S2 S3 S4 S5
电源选项中S0,S1,S2,S3,S4,S5的含义以 ACPI 的规格来说吧!ACPI(Advanced Configuration and Power Interface),即高级配置与电源接口.这 ...
- S2第一本书内测
<深入.NET平台和C#编程>内部测试题-笔试试卷 一 选择题 1) 以下关于序列化和反序列化的描述错误的是( C). a) 序列化是将对象的状态存储到特定存储介质中的过程 b) 二进制格 ...
- 动态规划:给出两个字符串s1和s2,返回其中最大的公共子串
求公共子字符串问题(连续的) 这个题目是当时远景能源公司现场笔试的一道题目,当时根本就不知道动态规划是什么鬼,直接上来就暴力求解,面试官很谄媚的问我,你这能求出来吗?当时很年轻的说,能啊!现在想,当时 ...
随机推荐
- 迷你版AOP框架
http://www.cnblogs.com/artech/archive/2008/11/27/1342309.html
- web自动化01-自动化解决的问题-环境搭建-元素定位
自动化测试 概念:由程序代码代替人工完成验证系统功能的过程 解决的问题: 回归测试 压力测试 兼容性测试 提高测试效率,提升产品质量 自动化测试分类 web自动化测试 移动自动化测试 接口自动化测试 ...
- jmeter 随机取一个值的方法
1.添加用户自定义变量 在要用到随机值的地方写入 ${__RandomFromMultipleVars(1|2|0)} 例子: 效果:
- (十)Centos之文件搜索命令find
1.1 find [搜索范围] [搜索条件](搜索文件) find是在系统当中搜索符合条件的文件名. 如果需要匹配,使用通配符匹配,通配符是完全匹配. * 匹配任意内容 ?匹配任意一个字符 []匹配任 ...
- PostgreSQL学习笔记——摘要
因为PostgreSQL和MySQL.DB2等数据库均遵循SQL语法,所以这篇随笔仅记录一些PostgreSQL中和别的数据库有差别或之前学习中遗漏的地方,以及一些我觉得比较重点的地方. 通过psql ...
- Java读取Excel文件(包括xls和xlsx)的样例程序
样例程序如下所示,其中: parseXls()函数依赖于jxl,只能读取xls格式文件: parseExcel()函数依赖于apache poi,能够读取xls和xlsx两种格式的文件. jxl的依赖 ...
- Ubuntu下配置LVS【h】
以后服务器只用CentOS和Ubuntu.下午用redhat装个lvs装了一下午都没搞好,TNND的.果断用Ubuntu,不到两个小时就搞定了. 原文参见: http://kamengwang.blo ...
- python介绍,计算机组成。内存分布,进制,操作系统介绍
学习小方法 三个W一个Hwwwh:what(是什么) why(为什么) where(怎么用) how(如何用) 来思考知识点多练,多写,多敲代码增加熟练度与代码量 Python 是一门面向后台的编 ...
- GNU makefile 学习 - ongoing
资料: <跟我一起写makefile>---中文,baiduNetdisk http://www.gnu.org/software/make/manual/make.html
- win10安装docker运行环境
转自:https://www.cnblogs.com/stulzq/p/7743667.html Docker for Windows是Docker社区版(CE)应用程序. Docker for Wi ...