python requests 另类post数据

本文探讨了如何使用Python脚本处理抓包数据,实现对burpsuite捕获的大规模数据包的重放攻击。文章提供了两种转换burpsuite数据格式至requests模块所需的格式的方法,同时解决了数据被二次urlencode的问题,确保了服务端正确解析。

0x00 问题1

在实际应用中,常常需要编写py脚本,对抓包所得到的数据包进行一些针对性(或者说要求的重放效果对于burpsuite不太方便直接实现)的重放攻击,我们知道在requests模块中,post数据的格式是dict,而burpsuite抓包得到的显然是正常格式的post数据。
所以问题来了怎么转换呢?特别是数据量大的时候?

0x01 问题1解决方案

第一种解决方案

很直观,写个函数做正则替换就好了,正则水平低下,请轻喷

def post_data_deal(data):
	pattern = re.compile('[a-zA-Z0-9]*[=][%a-zA-Z0-9]*')
	tmp = pattern.findall(data)
	tmp1 = []
	for x in tmp:
		suffix = re.compile('[^=]+$')
		suf = suffix.findall(x)
		if suf[0].isdigit():
			x = re.sub('[=]','\': ',x)
			x = '\'' + x
		else:
			x = re.sub('[=]','\': \'',x)
			x = '\'' + x + '\''
		tmp1.append(x)
	return '{' + ', '.join(tmp1) + '}'

第二种解决方案

# 直接将post的数据做utf-8编码,然后就可以以"xxx=xxx"的格式post数据了
postdata = postdata.encode("utf-8")

0x02 问题2

很多时候,我们传输的数据会被urlencode之后再发送至相应服务器进行处理。当我们使用requests模块的时候,该模块会对数据自行进行一次urlencode,那么对于我们这种需求场景:抓包得到的post数据包进行重放的话,那么requests将会对已经编码过一次的数据进行第二次编码,造成服务端不解析的问题,例如:

data=%23  =>  data=%2523

0x03 问题2解决方案

加上headers即可啦

headers = {'Content-Type':'application/x-www-form-urlencoded'}

0x04 顺便一提

有时候搞不清楚发送的数据包是怎么样的,还可以使用proxies参数发送到burpsuite进行分析哦

proxies = {"http":"http://127.0.0.1:1080","https":"http://127.0.0.1:1080"}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值