zoukankan      html  css  js  c++  java
  • SQL注入攻击技术(四)--注入攻击类型与方式

    注入攻击类型与方式

    1、union注入

    ①:查询

    union操作符一般与order by语句配合使用

     注意:union前面不能有order by,如果后面也有order by,前面的也是白写了,

    所以要想使用order by+union就得把有order by的语句封装成一个对象,再用select * from(......)as a union......。

    只在有union的语句的最后写个order by是ok的,就是两个查询结果放一起之后再排序的意思

    union 和union all的区别,前者去重且排序、后者不去重不排序

    mysql> select id,email from member where username='kevin' union select username,pw from member where id=1;

    ②:注入

    v' union select username,pw from member where id=1#%

     上图没有出现错误,但不代表类似的都不会出现错误,如果出错,他的原因可能是

    因为查询的字段不能超过主查询的字段,这个时候可以在SQL语句后面加order by进行排序,通过这个办法可以判断主查询的字段

    通过以下方法猜它有几个字段

     

     当查出有两个字段以后,再进行联合查询

    a' union select 1,2#%(如果有10个字段,就从1写到10)

    这里1,2这些说的是这个字段是可写可带入(带入数据库函数)的字段

     

     a' union select database(),user()#%,(再将这个带进去查询,结果如下图所示)

    2、information_schema注入

    ①:获取pikachu数据库的表名u' union select table_schema ,table_name,3 from information_schema.tables where table_schema='pikachu'#

     如上图所示:获取到这个数据库中的表名,可以看出user表对我们最有用,那么接下来就要获取表中的字段

    k' union select table_name,column_name ,2 from information_schema.columns where table_name='users'#%

     

    ③:获取字段值(如果经验丰富的话就不需要前面的步骤,直接进行爆破)

    3、基于函数报错注入

    ①:技巧思路:
      在MYSQL中使用一些指定的函数来制造报错,从而从报错信息中获取设定的信息,常见的select/insert/update/delete注入都可以使用报错方式来获取信息.

    ②:背景条件:

    后台没有屏蔽数据库报错信息,在语法发生错误时会输出在前端.

     

    4、insert注入

    insert注入,就是前端注册的信息最终会被后台通过insert这个操作插入数据库,后台在接受前端的注册数据时没有做防SQL注入的处理,导致前端的输入可以直接拼接SQL到后端的insert相关内容中,导致了insert注入。

    注册账号,账号新增到数据库中

     

    5、update注入

    与insert注入的方法大体相同,区别在于update用于用户登陆端,insert用于用于用户注册端。

    一般登录网站前台或后台更新用户信息的地方,填写用户需要修改相关信息,通过Burp抓包在用户名输入相关payload,格式如下:

    update注入

     ' or updatexml(0,concat(0x7e,(database())),0) or'

    6、delete注入

    一般应用于前后端发贴、留言、用户等相关删除操作,点击删除按钮时可通过Brup Suite抓包,对数据包相关delete参数进行注入,注入方法如下:

    delete from message where id=56 or updatexml(2,concat(0x7e,(database())),0)

    7、Http Header注入

    原理:user-agent头带入到了数据库中,与数据库产生交互

    把Http Header直接带入数据库,程序员在写程序的时候,头里面的数据和数据库有交互,没有交互则没有注入点

    登录的时候没有注入,放包到get请求这里的时候,可以看见注入点

     

    8、Cookie注入

    cookie是网站用来识别用户身份进行跟踪会话的,虽然Cookie是由后端生成的,但每次页面跳转,后端都会对前端的Cookie的信息进行验证,但如果后端获取Cookie后放在数据库中进行拼接,那么这也将是一个SQL注入点,

     

     

    9、Boolian(布尔型)盲注

           盲注,即在SQL注入过程中,SQL语句执行选择后,选择的数据不能回显到前端,我们需要使用一些特殊的方法进行判断或尝试,这个过程称为盲注。

    问:盲注有几类,分别是怎么测的??????

    SQL盲注分类:
    1、基于布尔型SQL盲注

    2、基于时间型SQL盲注

    3、基于报错型SQL盲注

    怎么测

    遇到布尔型SQL盲注,可以通过ascii值,

    通过对比ascii码的长度,判断出数据库表名的第一个字符。

    注:用到substr()函数

    用法:substr(string,start,length)

    string(必需)规定要返回其中一部分的字符串。start(必需)规定在字符串的何处开始。length(可选)规定被返回字符串的长度。

    判断库名的第一个字符

    判断长度

     

     

    10、base on time(时间型)盲注

    基于时间的延迟,构造一个拼接语句: vince' and if(substr(database(),1,1)='X' (猜测点)',sleep(10),null#,输入后,如果猜测准确,那么就会响应10秒,如果错误会立刻返回错误。输入:vince' and if(substr(database(),1,1)='p',sleep(10),null)#,再web控制台下,判断出database的表名的一个字符为p。通过这个办法我们就能逐步向下获取数据。

     报错型盲注用updatexml再结合if来判断就ok

    11、宽字节注入

    前提条件:magic_quotes_gqc参数设为ON时

     

    注意:宽字节空格、#如果被URL编码了,可能造成不能成功。并且只有编码为GBK的时候才可以,GBK可以绕过被转义的反斜杠

     

  • 相关阅读:
    [ Python入门教程 ] Python文件基本操作
    [转载] 完整诠释软件质量模型
    [ Python入门教程 ] Python 数据结构基本操作
    [ Python入门教程 ] Python字符串数据类型及基本操作
    Notepad++好用的功能和插件
    Python在cmd上打印彩色文字
    你若读书,风雅自来
    [ 转载 ] ssh连接远程主机执行脚本的环境变量问题
    Python基本模块介绍:sys、platform
    深入解析跨站请求伪造漏洞:原理剖析
  • 原文地址:https://www.cnblogs.com/1996-11-01-614lb/p/14194858.html
Copyright © 2011-2022 走看看