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