概述
LOW等级
1、首先尝试正常操作,输入1
可是这里web应用通过查询数据库,获取了id为1的用户的信息,猜测SQL语句为:
2、接下来检测是否存在SQL注入漏洞,输入1’
报错,则说明单引号注入到SQL语句中报错,存在SQL注入漏洞
尝试数字型,查询结果与id=1时的结果一样
尝试第二种情况,成功执行
尝试双引号,也没有成功
所以可知这里的变量是用单引号来进行闭合的
3、接下来使用order by 确定查询的字段数
通过尝试可得出字段数是2
4、用union select确定回显点
5、尝试利用回显点来查询数据库的版本和数据库的目录
同样可以查询数据库的用户名和名称
查询表名
查询列名
查询用户名密码(密码可通过md5解密):
同时也可以读取文件(这里用MySQL的load_file函数)
6、写入webshell
PHP一句话木马,执行cmd参数的值
我们要将该webshell写入物理路径,这里通过引发异常爆出web目录
利用select...into outfile...写入,
尝试访问,写入成功
尝试执行代码system(dir) , system(dir)在PHP中代表用系统命令去执行dir
7、利用sqlmap
当前用户和数据库名
执行结果
查表名:
查字段名:
用户名和密码
获取webshell
输入物理路径:
执行dir
Medium等级
1、在medium等级中,id号不用我们输入,而是选择,是post请求
Tamper date改包
发现失效了,我们输入的1'被转义了
尝试输入1"和1'发现都被转义了,尝试没有引号,发现可以成功执行
2、手工利用方法:获取用户名密码
3、medium等级注入技巧
在查询表名时,DVWA的单引号会被转义,可通过HEX编码绕过
4、sqlmap检测
利用
High等级
1、尝试单引号,成功执行,和low等级相同是字符型注入
2、手工利用方法,猜用户名密码
成功读取
3、sqlmap利用
这一等级,注入的点和返回的点不在同一个页面,要用--second -order这个参数来指定返回的页面
sql注入预防
Impossible等级检测了id数据类型,使用预编译绑定id变量,有效防止SQL注入
参数化SQL语句
也可使用存储过程和白名单。