Lab0 Web Challenge1实战记录
查看原题目,点此跳转
开始
临时起意翻看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完善了业务逻辑,增加了异常处理,对函数进行了封装。
理论上这道题不必用到爬虫的技术,但是爬虫的思维确实可取,只不过我实在想不到别的更好的方法了,爬虫确实是一个很好用的工具啊!