web安全实战:题目来源:首页 - Bugku CTF
题目一:秋名山车神
打开题目,如下所示,两秒内计算出结果,而且页面还在刷新,明显不可能。先看看源码把,源码啥也没有
刷新的时候弹出如下,可见应当是post传送个value进去,就可,难点在题目答案是多少
如何快速计算出结果并传递进去呢?只能用代码了,写代码!这里选择做python脚本,python的强大不用多说。
及如下代码,供读者参考。
import requests
import re
s = requests.Session()
r = s.get("http://114.67.175.224:11896/")
searchObj = re.search(r'(\d+[+\-*])+(\d+)', r.text)
d = {
"value": eval(searchObj.group(0))
}
r = s.post("http://114.67.175.224:11896/", data=d)
print(r.text)
print("脚本已完成")
执行过后,只要在2s内完成,我们便可以获得flag
题目二:速度要快
打开题目,如下图所示,没什么信息,ctrl+u看源码,发现一段英文
OK ,now you have to post the margin what you find
你需要传递一个margin参数,什么参数呢?看看数据包把(使用burpsuit)。
打开burpsuit和burpsuit绑定的浏览器,输入url,点击bp中的intercept is off进行抓包
把数据包发送到repeater模块,我们肯定要的是浏览器给我们的包,下面这个包是bp截取的我们的请求包。
把这个数据包点击send发送出去,发现响应包竟然有flag,接下来对这个编码进行操作!
等号结尾的一般是base64编码
继续解码
使用post方式传递进去发现啥也没有,只是提示让我们更快,试了几次发现,根本快不过他。
靠看了下其他大佬的,才发现又要写代码了,因为这里的编码竟然一直在变化,如下所示。
考虑用代码进行处理,这里依然选择python,如下图
代码如下,并附注释
import requests # 导入requests库,用于发起网络请求
import base64 # 导入base64库,用于解码base64编码的数据
url = "http://114.67.175.224:18925/" # 定义服务器的URL地址
s = requests.Session() # 创建一个requests的会话对象,可以保持某些参数在多次请求间保持一致
head = s.get(url).headers # 使用会话对象发起GET请求到指定URL,并获取响应的头部信息
flag = base64.b64decode(head["flag"]) # 从响应头部信息中获取"flag"字段,并对其base64解码
flag = flag.decode() # 将解码后的字节串转换为字符串
key = base64.b64decode(flag.split(":")[1]) # 拆分字符串以":"为界,取分割后的第二部分,再次进行base64解码
payload = {"margin": key} # 创建一个字典作为有效载荷,键为"margin",值为之前解码得到的key
print(s.post(url, data=payload).text) # 使用会话对象发起POST请求到指定URL,附带有效载荷,并打印响应的文本内容
得到flag: