无过滤
把用户可控的一些变量带入到了数据库的各种操作当中,并且没有做好过滤
- 注册用户的使用检测用户名是否存在的时候
- 在写SQL语句的时候,是拼接sql
Select注入
一般使用union select
Update注入
- update set的位置:看这个表的那个column会被展示出来,就把查询出来的内容显示到这里
- where之后: 盲注
Insert注入
把要出的数据插入到这column里面去
Delete注入
盲注
数字型注入
- 变量并没有用单引号引住,不需要用单引号区分数据与sql命令,这样就会让一般的gpc等机制无用,因为不含特殊字符
- 强制类型转换intval
字符型、搜索型
全局变量没有做addslashes——在查询的时候再对一些用户可控的变量进行addslashes,遗漏了addslashes
全局做addslashes——在全局文件中对GET\POST\COOKIE做addslashes:
- 首先get magic quotes gpc判断gpc是否开启
- 如果没有开启,再调用addslashes来转义
- 如果开启,就不用来addslashes,没开启就addslashes
Magic_quotes_gpc在稍微高点的版本默认都是on,5.4已经删除了——' " \ NULL会在前面加上一个转义字符
宽字节注入
数据库字符集GBK的宽字节注入:
- 数据库的链接方式不同<数据库与PHP编码不一致,转换过程中可能存在
- 错误方法:set names gbk
转换字符集造成的宽字节注入:
- 从GBK到utf-8
- 从utf-8到GBK
解码导致
- 先提交encode的,那么就不被转义,decode后,再带入查询,造成了注入,无视gpc
- urldecode
- base64_decode
- XML
变量覆盖
变量覆盖有extract、parse_str、$$
在之前的变量覆盖中有详细的介绍
防御
- 开启gpc
- mysql_real_escape_string
- addslashes
- 关键字过滤

1629

被折叠的 条评论
为什么被折叠?



