一、宽字节注入
1、宽字节:字符大小为两个及以上的字节,如GBK,GB2312编码
2、数据库使用GBK编码时,会将两个字符合并为一个汉字(宽字节)。特殊值字符如单引号都会被转义【'--->\'】,如sqli-lads第32关,输入单引号会被转义为\'
3、URL编码
(1)URL字符转义:百分号(%)+字符的十六进制
(2)常见的URL编码
- 空格 ---》%20
- 井号 ---》%23
- 单引号 ---》%27
- 反斜杠 ---》%5C
4、宽字节解法(以32关为例):想办法将单引号单独出来。将反斜杠和一个字符形成一个汉字。
5、利用%df(使用其他字符也可以,前128的特殊字符不行)把转义吃掉,后面就可以使用sql语句注入
二、堆叠注入
1、堆叠注入:一堆sql语句一起执行
2、原理:结束一个sql语句后继续构造下一条sql语句。
3、测试:1';select database()--+
三、二次注入
1、在第一次插入数据的时候,数据中带有单引号,直接插入到了数据库,然后在下一次使用中,在拼凑过程中,形成了二次注入。
2、例子(修改admin的密码)
(1)管理员账户为admin,密码为admin。
(2)新创一个用户为admin'#,密码为123。
(3)找到修改密码的地方修改。admin'#的密码为123456。
(4)返回登录界面,尝试。