返回博客列表

SQL注入

2018年7月15日
2 min read
网络安全数据库

注入测试

  1. 数字型:
  2. 字符型:
  3. 搜索型:
http://www.sql.com/xxx.php?id=1              假设ID为存在注入的参数
http://www.sql.com/xxx.php?id=1‘             语句报错
http://www.sql.com/xxx.php?id=1 and 1=1      页面正常返回结果
http://www.sql.com/xxx.php?id=1 and 1=2      页面返回错误

实例:

low级别的代码:

<?php 

if( isset( $_REQUEST[ 'Submit' ] ) ) { 
    // Get input 
    $id = $_REQUEST[ 'id' ]; 

    // Check database 
    $query  = "SELECT first_name, last_name FROM users WHERE user_id = '$id';"; 
    $result = mysqli_query($GLOBALS["___mysqli_ston"],  $query ) or die( '<pre>' . ((is_object($GLOBALS["___mysqli_ston"])) ? mysqli_error($GLOBALS["___mysqli_ston"]) : (($___mysqli_res = mysqli_connect_error()) ? $___mysqli_res : false)) . '</pre>' );

    // Get results 
    while( $row = mysqli_fetch_assoc( $result ) ) { 
        // Get values 
        $first = $row["first_name"]; 
        $last  = $row["last_name"]; 

        // Feedback for end user 
        echo "<pre>ID: {$id}<br />First name: {$first}<br />Surname: {$last}</pre>"; 
    } 

    mysqli_close($GLOBALS["___mysqli_ston"]); 
} 

?> 

可以看出,id为存在sql注入的参数。 不过现实中是看不到后台代码的,要通过测试来判断注入类型。

测试过程:

  1. 判断注入是字符型还是数字型

输入1,正常返回查询结果 返回结果 使用数字型语句测试 1 or 1=1;#

  1. 查询列数
  2. 判断字段显示顺序
  3. 查询当前用户与数据库名
  4. 查询数据库中的表
  5. 查询users表中的字段名
  6. 爆破数据

评论讨论

使用 GitHub 账号登录参与讨论

加载评论中...