通用型漏洞学习笔记
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

勾选rememberMe


工具利用

3.Apache ssl远程命令执行漏洞
4.tomcat cve-2017-12615