SQL注入由简入深
1、什么是sql注入?
2、什么是注入点?
注入点就是可以实行注入的地方,通常是一个访问数据库的连接点
如sqllab第一关的注入点就是id
3、如何判断是字符型注入还是数字型注入?
数字型注入的参数为数字,但参数为数字的不一定是数字型注入
使用and 1=1和and 1=2来判断
比如Less-1 ?id=1 and 1=1,这条语句需要满足and前后两个条件,1=1可以满足,所有正常回显,但是and 1=2则无法正常显示。这关能识别这条语句,说明是数字型的注入。如果是字符型,那这条语句会被当做字符串,所有不管是1=1还是1=2,结果都一样
4、如何判断闭合方式?
需要多积累经验
闭合符中间是完整的语句,然后用注释符将后面多余的语句注释掉
5、联合查询注入
?id=1 union select database() --+
union函数将前后两条语句输出在同一行,但前后语句的输出的列数必须相同
可以使用order by 或group by 判断列数
group_concat()函数作用
6、报错注入
当输入正确数据时返回的都是相同的信息,当输入错误信息时,返回报错提示,根据这个特点,构造paylaod使我们需要获取的数据显示在报错回显中
concat()函数作用是拼接:比如concat(1,2)的结果就是12
报错注入主要函数extractvalue()、updatexml()、floor()
extractvalue(1,2)函数的报错注入(只能回显32个字符)
0x7e是符号~,这个符号会产生报错回显
因为extractvalue函数只能回显32个字符,需要用到substring函数控制输出,例如substring(123456,1,3)就表示从第一个开始,选取3个也就是123
updataxml(1,2,3)函数的报错注入(也是回显32位)
floor函数的报错注入
rand()函数和floor()函数作用
concat_ws()函数作用
as和group by
报错原因,想一直报错可以填入零rand(0),如果填入1,rand(1)则不报错
最终语句
7、布尔盲注
当页面无回显也无报错的时候,但能通过页面不同的反映,判断出true或false的状态时
关键函数
ascii():可以把字母转换为对应对应ascii值
实现
8、时间盲注
只有一种页面,但能通过页面响应时间判断是true还是false
关键函数
闭合判断
哪一条能成功sleep2秒,说明哪个是闭合符
实现
9、sql注入文件上传
主要看secure_file_priv的值,没填说明有读写的权利,有路径说明在该路径有读写的权利,值为null说明没有写的权利
知道mysql在任意文件夹都有读写的权利,就可以写入一句话木马
利用outfile
10、DNSlog注入(属于盲注,但效率更高)
手动实现
自动实现
使用http://ceye.io
搭配下列工具使用
使用前需要对工具进行配置
在工具里配置http://ceye.io网站的这两个信息(网站需要登录)
然后按照上面方法进行注入
11、post注入
union注入
报错注入
和get方式的语句一样,只是提交地方不一样
12、http中
user-agent注入
refer注入
cookie注入(临时身份证)
13、过滤注释符绕过
14、过滤and和or绕过
15、空格过滤绕过
或者不用空格
16、逗号过滤
17、宽字节注入绕过
addslashes()函数作用
绕过前提
绕过原理
18、防火墙绕过手法
注意:本文通过b站视频学习整理所得,视频作者为橙子科技工作室