bugku-web-速度要快
查看源代码,发现需要post穿参,参数margin:
使用BP抓包或者F12查看网络状态,响应头返回一个flag字样的base64加密的值:
flag:
6LeR55qE6L+Y5LiN6ZSZ77yM57uZ5L2gZmxhZ+WQpzogT0RnMk9UWXg=
base64解密:
跑的还不错,给你flag吧: ODg2OTYx
再次base64解密:
使用post,margin=886961,穿参发现不对:
所以需要重新想思路,再重新发包发现flag会变,因此我们使用脚本来请求flag的值:
思路是这样的,使用session控制回话,之后获取响应头flag值之后进行base64解码,得到后面的base64再次进行解码,之后将该值穿参给margin看反应结果:
使用python2实现,通过Session对象,您可以在请求中保留某些参数。它还会在所有从Session实例发出的请求中保留cookie。
首先说一下,为什么要进行会话保持的操作?url_session = requests.Session()
requests库的session会话对象可以跨请求保持某些参数,说白了,就是比如你使用session成功的登录了某个网站,则在再次使用该session对象求求该网站的其他网页都会默认使用该session之前使用的cookie等参数
尤其是在保持登陆状态时运用的最多,在某些网站抓取,或者app抓取时,有的时强制登陆,有的是不登陆返回的数据就是假的或者说是不完整的数据,那我们不可能去做到每一次请求都要去登陆一下怎么办,就需要用到保持会话的功能了,我们可以只登陆一次,然后保持这种状态去做其他的或者更多的请求。
# -*- coding: UTF-8 -*-
import requests
import base64
url = 'http://123.206.87.240:8002/web6/'
url_session = requests.Session()
url_req = url_session.get(url)
#获取响应头
flag_header = url_req.headers['flag']
print flag_header
#进行base64解密
enba_flag_header = base64.decodestring(flag_header)
print enba_flag_header
#获取:后面的字符串再次进行base64解密
print base64.decodestring(enba_flag_header.split(': ')[1])
#进行post穿参,打印之后内容
post = url_session.post(url,{'margin':base64.decodestring(enba_flag_header.split(': ')[1])})
print post.text
脚本运行后得到flag,KEY{111dd62fcd377076be18a}