这次比赛打的挺开心的,新生赛比较简单,所以能体会到做题的快乐
不像之前线上赛还有线下科来杯那么难顶
继续努力呜呜
Hitchhiking_in_the_Galaxy
bp拦截一下重定向,再发包
405表示请求方法不对,换成post方法
改User-agent
其实就是两个链接
把referer改成cardinal那个网址
增加X-Forwarded-For: 127.0.0.1 得到flag
智商检测鸡
写脚本
应该是通过session来记录进度和题,先获取题目,用正则提取参数来计算,json形式传参,然后verify的响应里会有新的session,需要换成新的session,按照这个逻辑循环,直接提交第100个题目的答案和session就行。
import requests,sys
import re
import json
if __name__=='__main__':
Cookiee='session=eyJzb2x2aW5nIjoyfQ.YBuVFw.mZTcLVTzNl6fCOLl6b37roY3_gA'
answer=1
target1='http://r4u.top:5000/api/getQuestion'
target2='http://r4u.top:5000/api/verify'
target3='http://r4u.top:5000/api/getStatus'
for x in range(0,99):
headers={
'Content-Type': 'application/json;charset=utf-8',
'Cookie': Cookiee,
}
print(Cookiee)
req1=requests.get(url=target1,headers=headers)
tx1=req1.text
symbol=re.search(r'[-,+]',tx1).group()
nums=re.findall(r'<mn>[0-9]*</mn>',tx1)
for y in range(0,4):
nums[y]=float(re.sub(r'<mn>|</mn>','',nums[y]))
answer=float(nums[2])/2*nums[1]**2+nums[3]*nums[1]-float(nums[2])/2*(-nums[0])**2-nums[3]*(-nums[0])
print(float(nums[2])/2*nums[1]**2+nums[3]*nums[1]-float(nums[2])/2*(-nums[0])**2-nums[3]*(-nums[0]))
data={
"answer":answer
}
req2=requests.post(url=target2,headers=headers,data=json.dumps(data))
req3=requests.get(url=target3,headers=headers)
tx2=req2.headers
se=re.findall(r'(session=[-a-zA-Z0-9._]+;)',str(tx2))
Cookiee=se[0]
print(req3.text)
最后用做了100道题的session来提交答案就行了
watermelon
开局一波合成大西瓜
玩的很开心谢谢
设置断点,控制台改分
后来发现其实可以直接搜1999,有个判定输出,把内容base64解码一下就行了
我一开始搜的2000没搜到,人家判定的条件是>1999就很艹
宝藏走私者
考点:http请求走私
当ATS服务器接收到的请求中存在请求字段与:之间存在空格的字段时,并不会对其进行修改,也不会按照RFC标准所描述的那样返回400错误,而是直接将其转发给后端服务器。
而当后端服务器也没有对该标准进行严格的实现时,就有可能导致HTTP走私攻击。比如Nginx服务器,在收到请求头字段与冒号之间存在空格的请求时,会忽略该请求头,而不是返回400错误。
这道题应该是好几种解法都可以,用Transfer-Encoding: chunked那个解法好像也可
- List item
走私者的愤怒
这道题是宝藏走私者的升级版,多了一层比赛的时候没想出来,后来看了下师傅的wp
关键就是它在转发给最后的服务器的时候加了Client-IP,后面加的会覆盖我们之前加的,所以要想办法把后面的给覆盖掉(变成消息体)