文章总结: 本文是2026数字中国创新大赛数字安全赛道Web题目一的解题报告,作者通过分析Flask框架会话cookie发现验证码答案存储在cookie中,利用BurpSuite抓包后编写Python脚本解密cookie获取captchaa和captchab值,实现绕过验证码批量抓取数据。文档提供了完整的cookie解密代码和解题思路,属于CTF竞赛中Web安全类题目的典型解法。 综合评分: 72 文章分类: CTF,WEB安全,漏洞分析,实战经验
2026数字中国创新大赛数字安全赛道writeup之web题目一
原创
一只岸上的鱼 一只岸上的鱼
一只岸上的鱼
2026年4月14日 08:38 江苏
在小说阅读器读本章
去阅读
2026数字中国创新大赛数字安全赛道writeup之web题目一
缘起
人菜,但是爱学习!怎么着?
所以我又报名了这个比赛,能进决赛更好,进不了也无所谓,反正我又菜又爱学习,我就是菜鸟一枚。
总结还是很重要的,会的要熟练以节省时间,不会的要积累经验!作为一个程序员,web题目还是有优势的,所以我打算先从web题目开始。
题目
看题目:
题目看起来很简单,常规三思路:
- sql注入,直捣黄龙
- 文件上传,上传webshell
- 跳过绕过验证码,批量抓取所有数据抓出来
1试过不行,2没入口,所以只能考虑抓取数据
解题
web题目解题思路是很清晰的,就是上burpsuite,先抓包,获取信息:
1、先看是什么服务器
2、看验证码成功的请求
3、看验证码失败的请求
分析:
当验证码答案不对的时候,返回结果除了更新验证码图片外,还更改了cookie,python ,flask框架(werkzeug),想不到cookie解密都难!
先把这个cookie输出来看看吧:
import jsonimport zlib import base64
session_cookie = ".eJyrVkpOLChJzkiMT1SyMtKB85KUrAwNENy8_LzkVCUrpdSkFLNkY0tzS-NUY2Nj0zSTVCOjVLNEYyWE0gKgzloAyhIbJw.adsbfw.VCC8tRXlj6fJt-Y8nOKWfaqZEu8"
session_cookie = session_cookie[1:] # 1parts = session_cookie.split('.')data_part, timestamp_part, signature_part = parts # 2
padding = '=' * (-len(data_part) % 4)data_bytes = base64.urlsafe_b64decode(data_part + padding) # 3data_bytes = zlib.decompress(data_bytes) # 4jsonstring =json.loads(data_bytes.decode('utf-8'))print(jsonstring)
跑一下看看结果:
很明显了!验证码答案就藏在了cookie里面,验证码的答案就是captcha_a+captcha_b,而captcha_p是page number
剩下就简单了,循环抓取数据就可以了。简单说明一下这个解密代码吧,按照代码备注的序号:
- 去掉cookie前面的. 这个点是有含义的,表示数据载体是压缩的
- 把cookie分成3部分,data_part、timestamp_part、signature_part
- 补全base64的padding,不要问怎么知道的,因为看到了这个:
- 把json字符串解压缩,解压缩后是json字符串
web题目,比赛结束就关了,无法演示抓包了!
小结
其实初赛成绩不理想,当ctf强行分开了数安和网安,web题目在数安里面占比少了,作为一个应用程序员来说,优势少了。逆向和pwn题目多了,不过这对底层程序员,系统程序员有优势,哎,毕竟也是c/c++走过来的,谁怕谁啊,大不了再捡起来!
免责声明:
本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。
任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。
本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我。
本文转载自:一只岸上的鱼 一只岸上的鱼 一只岸上的鱼《2026数字中国创新大赛数字安全赛道writeup之web题目一》
版权声明
本站仅做备份收录,仅供研究与教学参考之用。
读者将信息用于其他用途的,全部法律及连带责任由读者自行承担,本站不承担任何责任。











评论