BugkuCTF-web-速度要快 writeup


脚本能力+0.001
POST快速反弹
另:bugku 秋名山车神


题目描述

题目
在这里插入图片描述


看看源码,让我们POST一个参数:margin
在这里插入图片描述
提交啥内容呢?看看响应头
在这里插入图片描述
flag是个base64,解码,发现还是一个base64,自己做题时多试几遍才会知道
在这里插入图片描述
再次解码,hackbar提交试试
在这里插入图片描述
那就上脚本呗,不过在试flag时发现每次刷新都会产生新的flag,所以要用==session==对象会话保持同一个flag

import requests	//引入requests库
import base64	//引入base64库

url = '''http://123.206.87.240:8002/web6/'''
s = requests.session()	//保持会话
hader = s.get(url).headers	//提取响应头的flag参数
key = base64.b64decode(base64.b64decode(hader['flag']).decode().split(':')[1])	//两次base64解码,split以冒号分隔并提取第二个字符串
post = {'margin':key}
print(s.post(url, post).text)
  • 为什么第七行还要用一次decode()?
  • 因为b64encode和b64decode接收参数为bytes或ascii码字符串,返回值为bytes。不用一次decode会导致输出时为b'xxx'
    字符串和bytes互相转换有encode和decode方法,默认编码为utf-8。
    提交得到flag
    在这里插入图片描述

骚思路

既然每次返回头的flag都不一样,那么它cookie也不一样喽,看看haders吧

import requests
import base64

url = '''http://123.206.87.240:8002/web6/'''
get_response = requests.get(url)
print("GET request headers:\n", get_response.request.headers)
print("GET response headers:\n", get_response.headers)

key = base64.b64decode(base64.b64decode(get_response.headers['flag']).decode().split(':')[1])
post = {'margin':key}
post_response = requests.post(url, data = post)
print("POST request headers:\n", post_response.request.headers)
print("POST response headers:\n", post_response.headers)

在这里插入图片描述
可以看到cookies并不一样,所以我们在提交post的时候再加上一个cookie的值就好啦,但事实真的是这样吗?我们看看加了session会话后的headers是什么样的

import requests
import base64

url = '''http://123.206.87.240:8002/web6/'''
s = requests.session()
get_response = s.get(url)
print("GET request headers:\n", get_response.request.headers)
print("GET response headers:\n", get_response.headers)

key = base64.b64decode(base64.b64decode(get_response.headers['flag']).decode().split(':')[1])
post = {'margin':key}
post_response = s.post(url, data = post)
print("POST request headers:\n", post_response.request.headers)
print("POST response headers:\n", post_response.headers)

在这里插入图片描述
确实,加了session的会话后在post的请求头上确实加上了同一个cookie
那么上最终脚本

import requests
import base64

url = '''http://123.206.87.240:8002/web6/'''
header = requests.get(url).headers

key = base64.b64decode(base64.b64decode(header['flag']).decode().split(':')[1])
phpsessid = header['Set-Cookie'].split(';')[0].split('=')[1]
post = {'margin':key}
cookie = {'PHPSESSID':phpsessid}
print(requests.post(url, data = post, cookies = cookie).text)

在这里插入图片描述


参考博客


文章作者: yq1ng
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 yq1ng !
评论
  目录