通用型漏洞学习笔记
Published in:2022-04-28 |

通用型漏洞学习笔记

1.常见的web中间件

1
iis,shiro,tomcat,apache,strust2,weblogic,jboss

2.shiro漏洞

调试环境搭建

1
2
3
shiro-core

shiro-spring-boot-starter

插件

1
2
https://github.com/pmiaowu/BurpShiroPassiveScan
https://github.com/j1anFen/shiro_attack

RCE流程

1
2
3
4
1.fetch rememberMe cookie
2.base64-decode
3.AES解密(硬编码)
4.反序列化
1
2
3
4
5
6
7
8
9
10
11
cve-2016-4437 # shrio rememberMe反序列化漏洞
cve-2016-4437 # shiro Padding oracle attack
cve-2016-6802
cve-2020-1957
cve-2020-11989 # apache shrio 身份验证绕过漏洞
cve-2020-13933

cve-2020-17523

CVE-2019-12422 Shiro <=1.4.2 Padding Oracle Attack RCE (Shiro-721)
https://github.com/feihong-cs/ShiroExploit-Deprecated

apache shiro 反序列化漏洞分为两种:shiro-550、shiro-721

1
2
3
4
5
6
shiro-550 框架提供了记住密码的功能,用户登录成功后会生成经过加密并编码的cookie

shiro-721,由于apache shrio cookie中通过aes-128-cbc模式加密的rememberme字段存在问题
影响Apache Shiro 1.2.5, 1.2.6, 1.3.0, 1.3.1, 1.3.2, 1.4.0-RC2, 1.4.0, 1.4.1版本。
 该漏洞需要登录后获取到合法的Cookie:rememberMe=XXX后才可以进行利用,不需要知道服务端密钥

shrio721 rce

1
2
3
4
5
6
• 输入正确的用户名和密码登录网站(勾选Remember),并从cookie中获
取RememberMe值。
• 使用RememberMe cookie作为Padding Oracle Attack的前缀。
• 加密ysoserial的序列化有效负载,以通过Padding Oracle Attack制作精心制作的RememberMe。
• 请求带有新的RememberMe cookie的网站,以执行反序列化攻击。
• 攻击者无需知道RememberMe加密的密码密钥。

cve-2016-4437(cve-550)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
版本影响:
(Shiro<1.4.2 or Shiro>1.4.2)
Apache Shiro框架提供RememberMe,用户登陆成功后会生成经过加密并编码的cookie。cookie的key为RememberMe,cookie的值是经过对相关信息进行序列化,然后使用aes加密,最后在使用base64编码处理形成的。

因为在反序列化时,不会对其进行过滤,所以如果传入恶意代码将会造成安全问题。

在 1.2.4 版本前,shiro中使用默认ASE秘钥(CBC模式),Key: kPH+bIxk5D2deZiIxcaaaA==,可以直接反序列化执行恶意代码。

在1.2.4之后,修复为自定义ASE秘钥(CBC模式),需要获取到Key才可以进行渗透,通过采集获取常用的github中常用的key值。

在1.4.2之后,使用了新的GCM模式进行AES加密,需要使用新的加密算法,并获取到Key才可以进行渗透。

漏洞利用需要可用的AES密钥。

cve-2020-1957

1
2
Shiro 身份验证绕过
原理:利用shiro解析uri和spring解析uri之间存在差异来绕过身份验证

漏洞利用

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
1、Shiro<1.5.2 权限绕过
POC【URL中加/..;/】
目标访问地址【/xxx/hello/aaaa】
最终发起请求【/xxx/..;/hello/aaaa】
2、CVE-2020-11989 Shiro<1.5.3 权限绕过
POC1【URL中加/;/】
目标访问地址【/xxx/hello/aaaa】
最终发起请求【/;/xxx/hello/aaaa】

POC2【将URL中的/二次编码为%25%32%66】
目标访问地址【/xxx/hello/aaaa】
最终发起请求【/xxx/hello%25%32%66aaaa】

漏洞原理:
• 当将Apache Shiro与Spring动态控制器一起使用时,访问
/;/shiro/admin/page , 就能直接绕过Shiro权限验证
影响版本:
• Shiro < 1.5.3
• 应用不能部署根目录root目录下
• Spring控制器中没有另外的权限校验代码

3、CVE-2020-13933 Shiro<1.6.0 权限绕过
POC【URL加编码后的;】
目标访问地址【/xxx/hello/aaaa】
最终发起请求【/xxx/hello/%3baaaa】


4、CVE-2020-17523 Shiro<1.7.1 权限绕过
POC 【URL中加空字符,如%20】
目标访问地址【/xxx/hello/aaaa】
最终发起请求【/xxx/hello/%20aaaa】

cve-2016-6802

1
2
3
4
5
6
7
8
 漏洞原理:
• shiro在路径控制的时候。未能对传入的url编码进行decode解码,
导致攻击者可以绕过过滤器,访问被过滤的路径。
 影响版本:
• shiro < 1.3.2

 测试方案:
curl --path-as-is -v "192.168.18.155:8080/x/../samples-web1.2.4/account/index.jsp"

修复

1
2
3
添加一个一个InvalidRequestFilter类,该类从全局上对分号,反斜杠和非ASCII字符进行了过滤


1
2
3
4
5
6
7
8
9
10
11
12
publie class InvaliaRequestFilter extends AccessCentroLFilter {
private static final List<string> SENICOLON = Collection , unmodlfiblelist(Arrays.astList(“;“, “%3b”, “%38”));
private static final List<string> BACKSLASH = Colletiens. unnodlfoblulst(Arrays.asList(“\\”,”%5c", “%5C”));
private boolean blockSemicolon . true;
private beolean blockBackslash . true;
private boolean blocklonAscll . true ;
@Override
pretected boolean isAccesAlLowed(ServletReqvest request, ServletResponse response, object appedvatue) throus
Exce string uri . nebutila. terttp(request).getRequestUR();
return ! containsSeniceLen(ur1)
&& ! containsBocksLash(uri)
&& ! containshanAseilcharacter (uri);

shrio复现

登录,不勾选rememberme

image-20220428161402284

勾选rememberMe

image-20220428161555067

image-20220428164657079

工具利用

image-20220428161844802

3.Apache ssl远程命令执行漏洞

4.tomcat cve-2017-12615

Prev:
完美解决centos8 appstream问题
Next:
windows下go get失败问题解决