跳转至

爬虫管理器

题目源码在 https://git.hit.edu.cn/lilac-2021-tryout/web-problems/-/tree/master/web-spider/src/app

扫描

做 web 题应该先扫描,这是常识。哪怕主办方说不准扫描,你也要扫描。

扫出 robots.txt,发现 Disallow: /secret_flag_here.php。于是 flag 在 /secret_flag_here.php 里面。

如果您没有扫描,也可以通过页面中的提示「我们的爬虫十分恶俗,从不遵循 robots 协议」看出 robots.txt 里面有东西。

SSRF

直接访问 /secret_flag_here.php,发现啥也没有。推测只允许本机访问。

事实上这个推测是对的,因为题目源码:

<?php

if($_SERVER['REMOTE_ADDR'] != '127.0.0.1') {
    die('只有我自己能看到 flag');
}

echo "flag{...}";

接下来就是尝试进行 SSRF。首先,直接提交 http://127.0.0.1/secret_flag_here.php,被拒绝。

绕过方式有很多种,以下均可以:

  • http://127.2.3.4/secret_flag_here.php
  • http://loCAlhOSt/secret_flag_here.php
  • http://my.domain.net/secret_flag_here.php 并向 my.domain.net 的 DNS 添加 A 记录指向 127.0.0.1

需要注意的是,有些 CTF 竞赛中靶场无法访问外网。此时第三种 payload 失效。

题目源码如下:

<?php 

if(!preg_match("/^http/i", $url)) {
    die("只允许 http/https 协议,请停止恁的攻击行为并向就近的公安机关自首");
}
if(strpos($url, "localhost") !== false || strpos($url, "127.0") !== false) {
    die("我 spider 就是饿死,死外面,也不会爬取自己!");
}

CTF 中遇到其他 SSRF 题目,如果没有限定 http/https 协议,您可以尝试 file:// 协议、PHP 伪协议、gopher 协议。