前言

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的更多相关文章

  1. s2 devMode cmdshell

    s2 devMode cmdshell   仅支持批量验证,命令执行 链接:http://pan.baidu.com/s/1sl7tgRV 密码:wud8 也可以通过outscan一键获取,之后导入t ...

  2. 电源相关知识—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 ...

  3. 判断s2是否能够被通过s1做循环移位(rotate)得到的字符串是否包含

    问题:给定两个字符串s1和s2,要求判断s2是否能够被通过s1做循环移位(rotate)得到的字符串包含.例如,S1=AABCD和s2=CDAA,返回true:给定s1=ABCD和s2=ACBD,返回 ...

  4. S2 易买网总结

    易买网项目总结 --指导老师:原玉明 不知不觉,又到了S2结业的时间了,S1的项目KTV项目还历历在目.一路走来,感觉时间过的好快,我们离就业也越来越近... 展示: 1.主页面(首页) 01.商品分 ...

  5. 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 ...

  6. php大力力 [029节] 做PHP项目如何下载js文件:使用腾讯浏览器把网上案例页面存储到本地

    php大力力 [029节] 做PHP项目如何下载js文件:使用腾讯浏览器把网上案例页面存储到本地 yeah,搞定啦 php大力力 [029节] 做PHP项目如何下载js文件:使用腾讯浏览器把网上案例页 ...

  7. 写一个函数,实现两个字符串的比较。即实现strcmp函数,s1=s2时返回0,s1!=s2时返回二者第一个不同字符的ASCII值。

    #include<stdio.h> #include<stdlib.h> int main(){ setvbuf(stdout,NULL,_IONBF,); ],s2[]; i ...

  8. ACPI电源管理中的S0 S1 S2 S3 S4 S5

    电源选项中S0,S1,S2,S3,S4,S5的含义以 ACPI 的规格来说吧!ACPI(Advanced Configuration and Power Interface),即高级配置与电源接口.这 ...

  9. S2第一本书内测

    <深入.NET平台和C#编程>内部测试题-笔试试卷 一 选择题 1) 以下关于序列化和反序列化的描述错误的是( C). a) 序列化是将对象的状态存储到特定存储介质中的过程 b) 二进制格 ...

  10. 动态规划:给出两个字符串s1和s2,返回其中最大的公共子串

    求公共子字符串问题(连续的) 这个题目是当时远景能源公司现场笔试的一道题目,当时根本就不知道动态规划是什么鬼,直接上来就暴力求解,面试官很谄媚的问我,你这能求出来吗?当时很年轻的说,能啊!现在想,当时 ...

随机推荐

  1. osgViewer:: Viewer::advance() osg多线程与智能指针

    void ViewerBase::frame(double simulationTime) { if (_done) return; // OSG_NOTICE<<std::endl< ...

  2. Java Web接入支付宝扫码付款API(使用SDK证书配置properties )

    一.支付宝当面付功能Demo 官方文档https://docs.open.alipay.com/194/106078/ ps:因为沙箱环境一经配置了证书公钥则无法重置 第一步下载项目SKD&D ...

  3. 123457123457#0#-----com.twoapp.FromPuzzle02--前拼后广--儿童农场拼图游戏jiemei

    com.twoapp.FromPuzzle02--前拼后广--儿童农场拼图游戏jiemei

  4. div和span显示在同一行

    div和span标签的区别 div  是块级元素标签,独占一行,后面跟的内容换行显示 span  是内联元素标签,后面可以跟其他显示内容,不独占一行 display属性可以改变内联元素和块级元素的状态 ...

  5. ubuntu18.04 install rar

    sudo apt-get update #如果好久没有更新资源建议update一次 sudo apt-get install rar #安装rar sudo apt-get install unrar ...

  6. gunicorn的log如何传递给django,由django管理

    gunicorn配置文件为gunicorn_config.py里面有日志的配置 # errorlog = '/home/admin/output/erebus/logs/gunicorn_error. ...

  7. dos下通过命令访问url网址

    psexec.exe工具: https://blog.csdn.net/feier7501/article/details/8841756 https://www.cnblogs.com/boltki ...

  8. Laravel增加CORS中间件完成跨域请求

    原文地址: 跨域的请求 出于安全性的原因,浏览器会限制 Script 中的跨域请求.由于 XMLHttpRequest 遵循同源策略,所有使用 XMLHttpRequest 构造 HTTP 请求的应用 ...

  9. Kali之Metasploit生成apk后门控制安卓

    扫盲教程,大佬勿喷. 实验中请更改为你环境的IP. 生成apk后门 Kali Linux(Hack):192.168.169.76 Android(靶机):192.168.169.137 启动kali ...

  10. F2812 DSP程序运行在片内RAM和FLASH的区别

    F2812 DSP程序运行在片内RAM和片内FLASH的区别 声明:引用请注明出处http://blog.csdn.net/lg1259156776/ 说明:F2812是带有内部Flash的DSP,与 ...