SQL注入是一种安全漏洞,它允许攻击者通过影响Web应用程序的后端数据库。攻击者可以通过在输入字段中插入恶意SQL代码来执行非授权查询,从而获取或修改数据。
在开始启动SQL注入之前我们先将DVWA的安全等级调整到Low
1、我们在SQL Injection中输入 1' and 1=1# 和 1' and 1=2#。这里第一个有返回记录,说明SQL注入已经成功了。
2、当我们输入 1' union select user(),database() #的时候可以获取到DB用户和DB名字
user() 返回的当前数据库连接用户
database() 返回当前连接的数据库
3、当我们输入 1' union select user,password from users# 的时候可以获取到DB用户和用户对应的md5密码
4、代码解读
Low级别:代码没有做什么判断和控制,用户传入什么就执行什么
Medium级别:就是多了mysqli_real_escape_string 这个函数,这个函数转义字符串中的特殊字符。如果将特殊字符用16进制来表示,这时候也转义不了
High级别:防御中缺少传入数据的过滤,无法防御注入漏洞
Impossible级别:主要做了4个事情
1、is_numeric判断用户输入的是不是数字
2、intval获取用户输入内容的数字,再次确认
3、prepare 进行SQL的预处理
4、bindParam绑定输入参数,并再次指定为整型