DVWA-全等级SQL注入(显注)
前言:
首先是DVWA环境的搭建:
1.DVWA。
2.PHPSTUDY/WampServer,这里有一个坑,因为他是一体化的,PHP版本必须在5.4以上,否则显注不能打开。或者自己搭建LAMP环境。
3.抓包软件BURP以及代理的设置。
具体的步骤可参考:https://www.jb51.net/article/160378.htm
本篇主要记录DVWA中SQL注入中的显注部分:
开始之前先了解数字型、字符型和搜索型注入的区别:https://blog.csdn.net/change518/article/details/8116920/或者https://www.cnblogs.com/zztac/p/11355622.html
主要是数字型和字符型的区别:查询语句中我们输入的信息被单引号包含起来导致成为一个整体字符串,所以查询语句会查询一个为“1 and 1=1”和 “1 and 1=2”的id,这个id当然不会存在了就导致出现错误。所以针对字符型注入我们需要对单引号进行匹配,就产生了“' and '1'='1”和“'and '1'='2”这样的闭合字符型注入的判断语句。我们输入这样的判断语句就会发现跟数字型注入一样的返回。
SQL注入常规思路:
1、寻找注入点,可以通过 web 扫描工具实现
2、通过注入点,尝试获得关于连接数据库用户名、数据库名称、连接数据库用户权限、操作系统信息、数据库版本等相关信息。
3、猜解关键数据库表及其重要字段与内容(常见如存放管理员账户的表名、字段名等信息)
4、可以通过获得的用户信息,寻找后台登录。
5、利用后台或了解的进一步信息,上传 webshell 或向数据库写入一句话木马,以进一步提权,直到拿到服务器权限。
手工注入常规思路:
1.判断是否存在注入,注入是字符型还是数字型
2.猜解 SQL 查询语句中的字段数
3.确定显示的字段顺序
4.获取当前数据库
5.获取数据库中的表
6.获取表中的字段名
7.查询到账户的数据
低级:
网页源码:

分析:
由代码可知,通过REQUEST方式接受传递的参数id,再通过sql语句带入查询,并未设置任何过滤,因此可以进行sql注入利用。
常见的测试POC:
几个常用的函数:
user()返回当前数据库连接使用的用户;
database()返回当前数据库连接使用的数据库;
version()返回当前数据库的版本;
1.判断是否存在注入,注入是字符型还是数字型
当输入的参数为字符串时,称为字符型。字符型和数字型最大的一个区别在于,数字型不需要单引号来闭合,而字符串一般需要通过单引号来闭合的。
输入1,查询成功:

输入:1 and 1=1,成功:

输入:1 and 1=2,成功,可以知道并不是数字型的注入:

输入:1' and '1'='1 成功:

输入:1' and '1'='2,失败,没有查出东西,说明是字符型的注入:


2.猜解SQL查询语句中的字段数
输入1′ order by 2 #,查询成功:(注意此处的语句,#是注释后面的单引号,前面的’是闭合SQL的“,一定要记住ORDERBY 后加数字不是字符 )

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


说明执行SQL查询的只有两个字段,就是这里的First name、Surname。
3.确定显示的字段顺序。
输入1′ union select 1,2 #,查询成功: #是注释作用,union是联合查询

说明执行的SQL语句为select First name,Surname from 表 where ID=’id’…
4.获取当前的数据库
数据库是DVWA。
5.获取数据库中的表
输入:1' union select 1,group_concat(table_name) from information_schema.tables where table_schema=database() #,查询成功:

说明数据库中,有两个表:guestbook与users。
users表中一个有8个字段,其中包括,user_id,first_name,password。
7.得到数据
输入:1' union select group_concat(user_id,first_name),group_concat(password) from users #,查询成功:

可以看到查询1的内容是id和用户名,查询2的内容是password,注意,此处是密文,需要MD5转换(百度即可):

这样,我们就拿到了低级手工注入的所有用户名和密码。
中级:
Medium级别的代码利用mysql_real_escape_string函数对特殊符号\x00,\n,\r,,’,”,\x1a进行转义,同时前端页面设置了下拉选择表单,希望以此来控制用户的输入。虽然前端使用了下拉选择菜单,但我们依然可以通过抓包改参数,提交恶意构造的查询参数。所以就用到了抓包软件BURPLOADER以及服务器的代理设置。

1.判断是否存在注入,以及注入的类型。
抓包更改参数为1‘and1=1#报错:


抓包更改参数为1and1=1 查询成功:


所以是数字型注入,由于是数字型注入,服务器端的mysql_real_escape_string函数就形同虚设了,因为数字型注入并不需要借助引号。

抓包修改为id=1 order by 3,查询失败::


说明执行的SQL查询语句中只有两个字段,即这里的First name、Surname。
3.确定显示字段的顺序:
抓包更改参数:1 union select 1,2 查询成功


4.获取当前的数据库名:
抓包修改:id =1 union select 1,database(),查询成功:


数据库名为dvwa
5.获取数据库当中的表:
抓包修改:id=1 union select 1,group_concat(table_name) from information_schema.tables where table_schema=database()


数据库中一共存在两个表,guest和users
6.获取表中的字段名
抓包修改:id=1 union select 1,group_concat(column_name) from information_schema.columns where table_name='users’,查询失败


这是因为‘在这里被转义成了\',我们可以用16进制绕过:


这样就得到了字段名。
7.得到数据
抓包修改数据:


同样,也得到了用户名和密码。
高级:
查看源码

与Medium级别的代码相比,High级别的只是在SQL查询语句中添加了LIMIT 1,希望以此控制只输出一个结果。
虽然添加了LIMIT 1,但是我们可以通过#将其注释掉。且因为是字符型注入,手工注入的过程与Low级别基本一样,直接最后一步演示得到数据。

DVWA-全等级SQL注入(显注)的更多相关文章
- (十二)DVWA全等级SQL Injection(Blind)盲注--SQLMap测试过程解析
一.测试前分析 前文<DVWA全等级SQL Injection(Blind)盲注-手工测试过程解析> 通过手工测试的方式详细分析了SQL Injection(Blind)盲注漏洞的利用过程 ...
- (十一)DVWA全等级SQL Injection(Blind)盲注--手工测试过程解析
一.DVWA-SQL Injection(Blind)测试分析 SQL盲注 VS 普通SQL注入: 普通SQL注入 SQL盲注 1.执行SQL注入攻击时,服务器会响应来自数据库服务器的错误信息,信息提 ...
- DVWA(三):SQL injection 全等级SQL注入
(本文不定期更新) 一.所需环境: 1.DVWA 2.web环境 phpstudy/wamp 3.burp suite 二.SQL注入产生的原因: 程序员在编写代码的时候,没有对用户输入数据的合法性进 ...
- DVWA各等级sql注入
sql全等级注入 level:low <?php if( isset( $_REQUEST[ 'Submit' ] ) ) { //判断submit是否存在 // Get input $id = ...
- SQL注入--显注和盲注中过滤逗号绕过
SQL注入逗号绕过 1.联合查询显注绕过逗号 在联合查询时使用 UNION SELECT 1,2,3,4,5,6,7..n 这样的格式爆显示位,语句中包含了多个逗号,如果有WAF拦截了逗号时,我们的联 ...
- DVWA学习之SQL注入
DVWA学习之SQL注入 环境工具 dvwa 1.9 phpstudy firefox burpsuite 实验步骤 一.设置安全级别为LOW 1. 登录DVWA,并将安全级别设置为LOW 2. 进入 ...
- 1.3 DVWA亲测sql注入漏洞
LOW等级 我们先输入1 我们加上一个单引号,页面报错 我们看一下源代码: <?php if( isset( $_REQUEST[ 'Submit' ] ) ) { // Get input ...
- [靶场实战]:SQL注入-显错注入
SQL注入的本质:就是将用户输入的数据当作代码带入执行. 注入条件: 1.用户能控制输入 2.能够将程序原本执行的代码,拼接上用户输入的数据进行执行 首先检查是否存在注入点 Rank1: 构造语句 ? ...
- sql注入 --显错注入
前提知识 数据库:就是将大量数据把保存起来,通过计算机加工而成的可以高效访问数据库的数据集合数据库结构:库:就是一堆表组成的数据集合表:类似 Excel,由行和列组成的二维表字段:表中的列称为字段记录 ...
随机推荐
- 大数据-Hadoop虚拟机的准备以及配置(三台机子)
虚拟机的准备 修改静态IP(克隆的虚拟机) vim /etc/udev/rules.d/70-persistent-net.rules 配置网络: Vim /etc/sysconfig/network ...
- MySQL 中的转义字符`
` 是 MySQL 的转义符,用来避免列名或者表名和 mysql 本身的关键字冲突. 所有的数据库都有类似的设置,不过mysql用的是`而已.通常用来说明其中的内容是数据库名.表名.字段名,不是关键字 ...
- SpringBoot默认首页跳转设置
大家在使用SpringBoot时候会遇到将系统接口入门设置为"/",那么这个就是我们常见的默认首页跳转的设置.解决的方式有两种 第一种方式:controller里添加一个" ...
- 在 .NET 中创建对象的几种方式的对比
在 .net 中,创建一个对象最简单的方法是直接使用 new (), 在实际的项目中,我们可能还会用到反射的方法来创建对象,如果你看过 Microsoft.Extensions.DependencyI ...
- Scala学习——简介
一.Scala简介 Scala 是 Scalable Language 的简写,是一门多范式的编程语言,设计初衷是实现可伸缩的语言并集成面向对象编程和函数式编程的各种特性. 二.Scala 环境搭建 ...
- 数据结构与算法-排序(二)选择排序(Selection Sort)
摘要 选择排序的逻辑是先遍历比较出序列中最大的,然后把最大的放在最后位置. 遵循这个逻辑,用代码实现时,做到1.减少比较次数之外,这里引入一个新的指标 - 稳定性,2.保证排序过程中的稳定性也是一个优 ...
- 第一篇 -- Sprint Tool Suite配置和Hello World编写
首先需要安装 1. Sprint Tool Suite(本次所用版本:spring-tool-suite-3.8.3.RELEASE-e4.6.2-win32-x86_64) 2. Tomcat(本次 ...
- 第一篇 -- Go环境的搭建以及Hello World程序编写
VS Code的下载和安装 1. 下载链接(本人下载版本VSCodeUserSetup-x64-1.57.0.exe) https://code.visualstudio.com/download 友 ...
- mapGetters 的作用__为什么mapGetter前面有...(三个点是去掉{}的作用)
参考:vuex 中关于 mapGetters 的作用 mapGetters 工具函数会将 store 中的 getter 映射到局部计算属性中.它的功能和 mapState 非常类似,我们来直接看它的 ...
- Verilog function的使用
function的用法 function的标准写法如下: function <返回值的类型或是范围> (函数名): <端口说明语句> //input xxx <变量类 ...