array(5) { ["chapterid"]=> string(8) "49409216" ["articleid"]=> string(7) "7300050" ["chaptername"]=> string(8) "第23章" ["content"]=> string(3339) "她用Wireshark打开抓包文件,没急着分析,先从头到尾扫了一遍整体流量。先看全局,再找细节——这是她的习惯。

周可然在A3位置打开了Crypto方向。第一道题是RSA共模攻击——RSA是那种用一把锁两把钥匙的加密法:公钥锁、私钥开。但这里有人用同一把锁配了两把不同的公钥,把同一条消息加密了两次。数学上,只要拿到两组密文和两个公钥,就能反推出原始消息。基础题。她从帆布包里掏出B5笔记本,翻到空白页,先用自个儿的话把数学原理推导了一遍,然后才动代码。

陈逸飞坐在最右边的A10位置。他打开OSINT方向的第一道题——信息收集,要求找到一个虚构目标人物的邮箱。他没有像其他人一样直接开始解题,而是先打开终端,SSH连到了一个外部服务器上,敲了几条命令,然后才开始看题。

林墨注意到了那个SSH连接。陈逸飞连的是哪台服务器?做什么用的?他暂时没问——第一天,不适合。回到自己位置,打开Web方向第一道题。

他选了一道四星的SSRF。SSRF——服务器端请求伪造。简单说就是骗服务器替你跑腿。靶场模拟了一个云存储服务,用户可以输入一个图片网址当头像,服务器会去那个网址把图片下载回来。正常用途是换个头像。但如果你在输入框里填的不是图片网址,而是一个内网地址呢?服务器就会替你去访问它本不该让你碰的内部系统。

这就是SSRF的核心:利用服务器的权限,替你访问你本来碰不到的东西。

但题目加了三道防线。第一道,只允许http和https开头的网址——堵死了用其他协议偷渡的路。第二道,服务器解析完域名后会检查IP——如果指向内网,直接拒绝。第三道,内网IP黑名单,常见的内网地址段全封了。

三道防线叠在一起,常规手段全废。林墨需要找到至少一道防线的漏洞。

他先读了源码。训练模式给源码——实战比赛不会给,但训练时给你看就是让你理解漏洞怎么运作。后端用Python的Flask框架写的,处理请求用的库叫requests,版本2.25.1。

林墨盯着这个版本号看了几秒。

2.25.1。这个版本有个已知行为:网址里如果有@符号,它会把@前面的部分当成用户名忽略掉,实际访问的是@后面的地址。比如`http://假地址@真目标/`,它访问的是"真目标"。但白名单检查的就是@后面的地址——所以这条歪路被堵了。

他转去看第二道防线。服务器先解析域名拿到IP,检查不在内网黑名单里,然后才发起请求。但这里有个时间差——检查IP和发请求之间隔了几毫秒。这几毫秒里,如果DNS记录被偷偷换掉,第二次解析就会返回一个内网IP。

这就是DNS重绑定。像保安先看了你的证件放你进门,但你进门之后换了一套内网工装——保安不会再查第二遍。

林墨花了二十分钟在一个在线工具上配好了域名:第一次解析返回合法的外网IP通过检查,第二次解析返回内网IP。提交URL。服务器先解析——外网IP,通过。发起请求——再次解析——内网IP。请求发向了内网。" ["create_time"]=> string(10) "1785963702" }