Skip to content

Lab0 Web Challenge1实战记录

约 744 个字 预计阅读时间 2 分钟

查看原题目,点此跳转

开始

临时起意翻看lab0的时候,忽然发现了一道很有意思的题目,题目作者的小幽默撞到我笑点上了,所以决定做一做这道题目。

解题思路

观察页面

初入页面,就有一个可以交互的按钮,鼠标移上去这个按钮就会消失,真的很好玩哈哈哈!

正如题目所说,本题的关键是使用浏览器的开发者工具(DevTool),但是题目页面禁用了F12和右键,一开始卡了一下,后来才意识到可以用快捷键Ctrl+Shift+I打开……

源代码选项卡下检查页面源码,发现页面内提供的了一个getflag()的函数,在控制台内调用这个函数,发现会弹出提示框显示One more time! 1/1377

再调用一次,则显示wrong token

这时我才注意到,每一次F5刷新页面后,getflag()函数中fetch()部分的token都会变化,而每次调用getflag()必然是查询这个query,如果与后端服务器所持有的token符合,则会记入次数。

转换思路

老实用F5一步步getflag()显然是一种很傻的方法,结合我自身已经掌握的技能,我决定写一个爬虫来完成这道题目。

首先我验证了一下究竟是什么让服务器记住了我已经正确请求getflag()的次数,首先写一个能完成简易请求的爬虫,并且手动填入token并获得返回,我将Request Header中cookie稍加改动,发现次数立马重置了,证明只需要维持相同的会话,传入相同的cookie,就可以保证服务器认到我的爬虫。

于是我将爬虫分为了三个部分,一个是全局变量准备,包括了请求头,正则pattern与URL,一个是爬取并解析出网页内token,最后一个是使用token进行模拟getflag()请求。

做这部分的时候报错了好多次,主要都是在正则库上……说实话这么简单的页面内容都不值得用XPath或者CSS选择器之类的解析库来做,用正则则真的很容看花眼。

最后用高铁上糟糕的网络情况硬着头皮循环了1377次,最后会直接返回flag

代码改进

代码本身写的很粗糙,只是实现了基本逻辑,后来我又加入了当前次数与目标次数的检测,自定义cookie等功能,并且请deepseek完善了业务逻辑,增加了异常处理,对函数进行了封装。

理论上这道题不必用到爬虫的技术,但是爬虫的思维确实可取,只不过我实在想不到别的更好的方法了,爬虫确实是一个很好用的工具啊!