前言:

首先是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.获取当前的数据库

输入1' union select 1,database() #,#注释作用,database函数获取当前连接的数据库,查询成功:

数据库是DVWA。

5.获取数据库中的表

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

说明数据库中,有两个表: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,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函数就形同虚设了,因为数字型注入并不需要借助引号。

2.猜解SQL查询语句中的字段数
抓包修改为id=1 order by 2,查询成功:
 

抓包修改为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级别基本一样,直接最后一步演示得到数据。

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

DVWA-全等级SQL注入(显注)的更多相关文章

  1. (十二)DVWA全等级SQL Injection(Blind)盲注--SQLMap测试过程解析

    一.测试前分析 前文<DVWA全等级SQL Injection(Blind)盲注-手工测试过程解析> 通过手工测试的方式详细分析了SQL Injection(Blind)盲注漏洞的利用过程 ...

  2. (十一)DVWA全等级SQL Injection(Blind)盲注--手工测试过程解析

    一.DVWA-SQL Injection(Blind)测试分析 SQL盲注 VS 普通SQL注入: 普通SQL注入 SQL盲注 1.执行SQL注入攻击时,服务器会响应来自数据库服务器的错误信息,信息提 ...

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

    (本文不定期更新) 一.所需环境: 1.DVWA 2.web环境 phpstudy/wamp 3.burp suite 二.SQL注入产生的原因: 程序员在编写代码的时候,没有对用户输入数据的合法性进 ...

  4. DVWA各等级sql注入

    sql全等级注入 level:low <?php if( isset( $_REQUEST[ 'Submit' ] ) ) { //判断submit是否存在 // Get input $id = ...

  5. SQL注入--显注和盲注中过滤逗号绕过

    SQL注入逗号绕过 1.联合查询显注绕过逗号 在联合查询时使用 UNION SELECT 1,2,3,4,5,6,7..n 这样的格式爆显示位,语句中包含了多个逗号,如果有WAF拦截了逗号时,我们的联 ...

  6. DVWA学习之SQL注入

    DVWA学习之SQL注入 环境工具 dvwa 1.9 phpstudy firefox burpsuite 实验步骤 一.设置安全级别为LOW 1. 登录DVWA,并将安全级别设置为LOW 2. 进入 ...

  7. 1.3 DVWA亲测sql注入漏洞

    LOW等级   我们先输入1 我们加上一个单引号,页面报错 我们看一下源代码: <?php if( isset( $_REQUEST[ 'Submit' ] ) ) { // Get input ...

  8. [靶场实战]:SQL注入-显错注入

    SQL注入的本质:就是将用户输入的数据当作代码带入执行. 注入条件: 1.用户能控制输入 2.能够将程序原本执行的代码,拼接上用户输入的数据进行执行 首先检查是否存在注入点 Rank1: 构造语句 ? ...

  9. sql注入 --显错注入

    前提知识 数据库:就是将大量数据把保存起来,通过计算机加工而成的可以高效访问数据库的数据集合数据库结构:库:就是一堆表组成的数据集合表:类似 Excel,由行和列组成的二维表字段:表中的列称为字段记录 ...

随机推荐

  1. docker进入容器所在虚拟机的指令

    sudo docker inspect -f {{.State.Pid}} 44fc0f0582d9 在拿到该进程PID之后我们就可以使用nsenter命令访问该容器了. $ sudo nsenter ...

  2. STM32学习进程

    新建一个自己的工程模板,以我所用的MDK4为例 MDK4软件图标 (1)新建一个自己储存数据的文件夹.以我自己为例(文件夹名字任取自己记住熟悉就行,以下将以我的文件夹文件进行操作讲解) 新建的总体文件 ...

  3. 题解 guP2421 【[NOI2002]荒岛野人】

    本题珂以转换成一个式子 即求Ci + Pi × x ≡ Cj + Pj × x (mod M) 的最小答案是否大于寿命最小值 以人数为最小值开始枚举山洞数,用扩展欧几里得计算最优答案是否大于寿命 若不 ...

  4. Luogu P4313 文理分科

    link 最小割 双倍经验 这道题运用了最小割最常用的一种用法:集合划分. 因为源汇最小割即就是将源汇划分到不同的集合,那么最简单的应用就是最小代价划分集合了. 本题中,题意是将 \(n\cdot m ...

  5. 锐捷路由器 RSR20-X-28

    学习帮助视频 Ruijie#show run | in natip nat outsideip nat insideip nat pool NAT_POOL prefix-length 24ip na ...

  6. C语言:2.2

    #include <stdio.h> int main() { unsigned short bla=32768; short blb=32768; printf("%d %d\ ...

  7. es-head部署

    #一.更新centos7的库sudo yum update -y二.安装一系列文件(已安装可以不安装)sudo rpm -ivh http://dl.fedoraproject.org/pub/epe ...

  8. 将已经基本完成的项目推送到gitee上管理

    1,首先在gitee上创建仓库,保留一个.gitigonore就行,这样就得到一个远程仓库地址 2,仓库有文件,那么就需要先将这个文件pull下来: 在本地的项目目录中执行:git init git ...

  9. 怀疑前端组件把我的excel文件搞坏了,怎么证明

    背景 我在做个需求,用户通过excel上传文件,文件中,每一行就是一条数据,后台批量处理:但是呢,用户填的数据可能有问题,所以我后台想先做个检查,然后在每一行中加一列,来指出这一行存在的问题. 我本来 ...

  10. 搭建NFS服务

    说明:这里是Linux服务综合搭建文章的一部分,本文可以作为单独搭建yum仓库的参考. 注意:这里所有的标题都是根据主要的文章(Linux基础服务搭建综合)的顺序来做的. 如果需要查看相关软件版本和主 ...