DVWA平台漏洞测试与源码分析(一)SQL注入

2023-10-30

DVWA平台是初学网络安全者了解十大漏洞的有效途径,此平台收集了当前威胁网络安全的最常见的十大漏洞,并且为各位初学者提供了靶场实验环境,我们可以利用此平台进行各种攻击实验,从而丰富自己对于Web安全的认识。

这篇文章主要介绍了DVWA平台中的高危漏洞之一:SQL注入漏洞的测试以及DVWA平台关于SQL注入的PHP源码分析。

在进行攻击之前,首先要了解SQL注入攻击的原理,在Web程序运行过程中,数据库是不可缺少的一部分,当我们使用Web程序时,程序会根据我们的操作对数据库中的数据进行查询,而SQL注入漏洞就存在于这个查询过程中。攻击者利用一些恶意的脚本语句,将这些恶意语句嵌入到数据库查询语句中,从而破坏查询语句原有的功能,实现攻击者非法获取信息的目的。

在DVWA平台中,对每个漏洞都进行了四个等级的划分,分别是low、medium、high、impossible,接下来我会从low开始,逐步对SQL注入漏洞的PHP源码进行分析,并且进行相关的测试。

(1)low等级

从左下角的security level 可以看到是low等级。然后开始分析low等级代码:


<?php

if( isset( $_REQUEST[ 'Submit' ] ) ) {
    // Get input
    $id = $_REQUEST[ 'id' ];

    // Check database
    $query  = "SELECT first_name, last_name FROM users WHERE user_id = '$id';";
    $result = mysql_query( $query ) or die( '<pre>' . mysql_error() . '</pre>' );

    // Get results
    $num = mysql_numrows( $result );
    $i   = 0;
    while( $i < $num ) {
        // Get values
        $first = mysql_result( $result, $i, "first_name" );
        $last  = mysql_result( $result, $i, "last_name" );

        // Feedback for end user
        echo "<pre>ID: {$id}<br />First name: {$first}<br />Surname: {$last}</pre>";

        // Increase loop count
        $i++;
    }

    mysql_close();
}

?>

从PHP代码我们可以首先判断出,这个页面采用的是$_REQUEST变量,当我们点击Submit按钮时,程序就会将我们输入的字符插入到查询语句中,进行数据库查询,在low等级中,因为采用的是$_REQUEST变量,导致我们可以在文本框中随意输入,并且代码中也没有任何防御手段,所以这个Web程序存在字符型注入,接下来是测试过程:

当我输入id=1时,程序会查询数据库中的id为1的用户信息,并且回显出来。

这时,我在文本框中输入1' or 1=1#,回显结果是这样的,我们分析代码可以看出在数据库查询语句中,他是判断我们输入的id与user_id是否相同,如果一致就将查询结果赋给$result变量,然后通过mysql_num_rows()mysql_num_rows()方法作用是返回结果集中行的数目)方法把结果集的行数赋给$num,将结果通过循环输出。我们输入的1' or 1=1 #这句脚本会导致查询语句在比对id与user_id是否一致时一直保持真的状态,所以将数据库中的所有用户信息全部输出。

 (2)medium等级

<?php

if( isset( $_POST[ 'Submit' ] ) ) {
    // Get input
    $id = $_POST[ 'id' ];
    $id = mysql_real_escape_string( $id );

    // Check database
    $query  = "SELECT first_name, last_name FROM users WHERE user_id = $id;";
    $result = mysql_query( $query ) or die( '<pre>' . mysql_error() . '</pre>' );

    // Get results
    $num = mysql_numrows( $result );
    $i   = 0;
    while( $i < $num ) {
        // Display values
        $first = mysql_result( $result, $i, "first_name" );
        $last  = mysql_result( $result, $i, "last_name" );

        // Feedback for end user
        echo "<pre>ID: {$id}<br />First name: {$first}<br />Surname: {$last}</pre>";

        // Increase loop count
        $i++;
    }

    //mysql_close();
}

?> 

从页面左下角看到已经调整到了medium等级,这时页面也出现了一些变化,原本的文本框被替换成了下拉框,这是因为PHP代码中从原本的$RESQUEST变量改为了$POST变量,因为文本框的消失,导致我们无法直接进行字符型的注入,并且在代码中,还对我们输入的id值进行了转义处理,所以这时需要利用burp suite工具,在这一步骤时我遇到了一个问题,我启动burpsuite并且成功设置代理之后却怎么也无法抓取dvwa的流量包,但是其他网页还是可以抓取,这就很奇怪了

在火狐的代理设置里也没有在不使用代理里添加127.0.0.1,经过我百度发现一种方法是直接使用本机ip登录dvwa而不使用php专用的127.0.0.1,于是我去看了一下自己的ip,win+r输入cmd,然后在命令行输入ipconfig,然后用自己的IP地址登录dvwa就可以拦截成功了,虽然我不知道是什么原因,但是希望和我有一样问题的小伙伴可以少走一点弯路。

回归正题,接下来使用burpsuite进行SQL注入攻击:

 首先点击左上角代理,我这是打了汉化包,原版的话应该是proxy,在setting里添加8080端口和local host,然后点击截断,原版是intercept,查看拦截的html请求。

 拦截到的流量包的最后一行就是我们当时选择输入的指令此时,修改id后的数据,改成我们上面用过的1'or1=1,成功注入。从php源码我们可以看出代码对字符进行了转义,但是数字却没有转义,所以依旧存在数字型注入,于是便注入成功啦。

 (3)high等级

<?php

if( isset( $_SESSION [ 'id' ] ) ) {
    // Get input
    $id = $_SESSION[ 'id' ];

    // Check database
    $query  = "SELECT first_name, last_name FROM users WHERE user_id = '$id' LIMIT 1;";
    $result = mysql_query( $query ) or die( '<pre>Something went wrong.</pre>' );

    // Get results
    $num = mysql_numrows( $result );
    $i   = 0;
    while( $i < $num ) {
        // Get values
        $first = mysql_result( $result, $i, "first_name" );
        $last  = mysql_result( $result, $i, "last_name" );

        // Feedback for end user
        echo "<pre>ID: {$id}<br />First name: {$first}<br />Surname: {$last}</pre>";

        // Increase loop count
        $i++;
    }

    mysql_close();
}

?> 

此时安全等级改为high等级,发现这次连下拉框都没了,直接变成了一个弹窗指令。。。查看代码,发现是因为这次代码改成了$_session变量,但是代码中反而没有对字符进行转义,那我们尝试一下直接点击之后注入,输入1' or 1=1#会有什么效果呢,

没想到阿,这直接注入成功了,这个high等级给我的感觉还不如medium,但是这个代码有个坑,那就是他后面是有一个limit 1的,这个字句的作用是只能返回一行数据,返回的数据量大于一行或者你输入的语句他判断是假的话就会报错,然后你就进不去SQL注入的high等级了,重启之后才能重新进去,所以在输入payload时要注意书写规范,记得加空格,不然都是泪。。。

这就是关于DVWA的SQL注入部分的个人理解,欢迎交流。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

DVWA平台漏洞测试与源码分析(一)SQL注入 的相关文章

  • PHPUnit 测试套件包含路径

    使用 phpunit 时 我在包含路径方面遇到了一些麻烦 不是针对 phpunit 本身 而是针对我的代码和测试目录 我有以下代码结构 Application StringCalculator php tests StringCalcula
  • MySQL - 如何按相关性排序? INNODB表

    我在一个名为 cards 的 INNODB 表中有大约 20 000 行 所以 FULLTEXT 不是一个选项 请考虑这张表 id name description 1 John Smith Just some dude 2 Ted Joh
  • 安装 mysql2 时出错:无法构建 gem 本机扩展

    我在尝试安装时遇到一些问题mysql2Rails 的宝石 当我尝试通过运行安装它时bundle install or gem install mysql2它给了我以下错误 安装 mysql2 时出错 错误 无法构建 gem 本机扩展 我该如
  • PHP 中的 MD5 替代方案? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 为什么我的 PHP 字符串比较失败?

    我有以下代码片段 if summary CFD funding Interest Paid summary Commissions summary Closing trades print summary date reference de
  • 是否可以动态添加代码/扩展类?

    我想为我的代码编写一种 插件 模块 系统 如果我可以在定义类后将内容 添加 到类中 那么事情会变得更加容易 例如 这样的事情 class foo public function a return b 上课了 现在我想在定义后向其中添加另一个
  • >> 在 PHP 中是什么意思?

    考虑 echo 50 gt gt 4 Output 3 为什么输出3呢 50 的二进制是11 0010 右移 4 次11等于 3 See PHP 文档 http php net manual en language operators bi
  • 在 Laravel 5 中合并 'with' 和 'whereHas'

    我在 Laravel 5 中使用 Eloquent 编写了这段代码 它工作得很好 filterTask function query use id query gt where taskid id User whereHas submiss
  • 原则 2 使用 QueryBuilder 进行条件多行更新

    这个问题有一些答案 但实际上 它们似乎都无法帮助完成一项简单的任务 我需要使用 Doctrine2 QueryBuilder 根据一个查询中的条件更新多行 最明显的方法应该是错误的 userAgeList user name a gt 30
  • 错误:使用本地文件时,summernote 不是一个函数

    我遇到了一个非常奇怪的问题 当我使用本地的 Summernote 文件加载文本编辑器时 发生了 summernote 不是函数 的情况 但是 如果我使用 cdn 文件加载编辑器 一切都会顺利 这是我的 HTML 标头代码
  • htaccess 文件中的动态重写

    我正在我的 htaccess 文件中进行一些重写和重定向 我这样做的原因是因为我正在为现有网站开发新的设计和布局 因此我需要重定向以保持谷歌排名等 所以旧的 现有的 URL 看起来像这样 news internet shopper numb
  • 访问位于服务器根目录之前/之外的文件?

    我正在为一家售后客服企业做一个内网 员工需要能够将 img 文件上传到互联网服务器 我需要将它们存储在 is BEFORE 的目录中www 网站的根目录 使用 php 执行此操作非常简单 但如何在上传这些图像后将它们包含在网站上 我试过这段
  • 我不小心锁定了 MySQL 的 root

    我在 OS X 上使用 MySQL 并使用删除了所有 root 用户DROP USER 然后我又添加了其中一些并做了GRANT ALL on to root localhost 然后在验证确实是的之后注销 我可以登录并执行一些特权操作 不幸
  • CodeIgniter form_validation->run() 总是返回 false?

    我是新来的CodeIgniter我一直在尝试实现表单提交功能 但是每当我按 提交 时 表单页面只会刷新并且数据库不会更新 看来 this gt form validation gt run 总是返回 false 但我不知道为什么 The 控
  • PHP正则表达式在wordpress短代码标签之间替换

    我有一个短代码 我希望能够根据帖子的上下文将其删除 例如 tooltip slug test Test Text tooltip 我希望输出是 span class dummy Test Text span 我已经用 preg replac
  • MySql 完全联接(联合)和多个日期列的排序

    一个相当复杂的 sql 查询 我可能使它变得更加困难 我有两张桌子 消息 newsid 日期时间 新闻文本 图片 图片ID 日期时间 imgPath 两者没有关系 我只是在新闻 图片创建的日期之前加入 到目前为止的 SQL SELECT F
  • 重定向后丢失会话变量

    用户填写用户名和密码 如果正确 页面会加载一些信息 例如user id到会话变量 该脚本制作了一个header Location 重定向 不知何故 下一页无法识别会话 怎么会 重定向到同一个域 并且所有页面都有session start 我
  • 为什么这个 MySQL 更新不起作用?

    有一张桌子叫meterreadings 我需要复制属性meterreading从一排到另一排 这是数据示例 id meterreadingdate meterreading meterreadingtype id created 1 201
  • SQL Server到Mysql迁移(使用Mysql Workbench)数据传输错误

    我正在使用 Mysql Work bench 6 3 将数据库从 MS Sql server 2008 迁移到 Mysql 在 批量数据传输 期间出错并出现以下警告 这种情况仅发生在像 varchar char 这样的列类型上 当我尝试使用
  • 将表与同一个表的前一条记录连接起来

    我有一个包含历史记录的表 由主表中的多个触发器发布到那里 我想在历史表上创建一个 select 语句 其中每个记录都由其先前的记录 由相同的 LineID 和最高的 ActionDate 标识 连接 这样我就可以提取这两者之间的差异 我尝试

随机推荐

  • idea windows找不到文件chrome

    一 原因分析 浏览器安装的地址有变动 二 解决 1 打开IDEA的设置页面 2 选中setting 找到tools目录下的Web Browsers 3 在电脑桌面上找到谷歌的图标 显示位置不一样 所以根据自身电脑找到谷歌图标 右键单击 gt
  • Generative Modeling by Estimating Gradients of the Data Distribution阅读笔记

    目录 概述 传统score based generative modeling介绍 score matching Langevin dynamics 传统score based generative modeling存在的问题 流形假设上的
  • Python的re.rearch()和group()详解, 及它们的综合使用

    re search 字符串1 字符串2 flags 0 以列表形式 返回在字符串2中所有匹配到的第一个字符串1 如果无 则返回空列表 其中flag参数一般很少使用 补充 re seaech re findall re match 等方法都有
  • 发送arp数据包

    代码来自busybox 函数询问TEST IP的mac地址 read interface函数通过ioctl来获取接口interface相关信息 arpping用于发送arp数据包 也可以使用s socket PF PACKET SOCK R
  • Java中\t的作用

    t是补全当前字符串长度到8的整数倍 最少1个最多8个空格 补多少要看你 t前字符串长度 比如当前字符串长度10 那么 t后长度是16 也就是补6个空格 如果当前字符串长度12 此时 t后长度是16 补4个空格
  • 19 个 K8S 日常故障处理集锦

    问题1 K8S集群服务访问失败 原因分析 证书不能被识别 其原因为 自定义证书 过期等 解决方法 更新证书即可 问题2 K8S集群服务访问失败 curl 7 Failed connect to 10 103 22 158 3000 Conn
  • 【Metashape精品教程15】点云分类 分类地面点 创建DEM

    Metashape精品教程15 点云分类 分类地面点 创建DEM 文章目录 Metashape精品教程15 点云分类 分类地面点 创建DEM 前言 一 点云分类 Classify Points 二 分类地面点 三 手动分类 四 创建DEM
  • 2023网络安全面试题汇总(附答题解析+配套资料)

    随着国家政策的扶持 网络安全行业也越来越为大众所熟知 相应的想要进入到网络安全行业的人也越来越多 为了更好地进行工作 除了学好网络安全知识外 还要应对企业的面试 所以在这里我归总了一些网络安全方面的常见面试题 希望对大家有所帮助 内容来自于
  • 标定协议之CCP协议基础知识介绍

    上一篇 标定协议基础知识介绍 中对标定协议进行了初步的介绍 从这一篇文章开始对CCP标定协议进行相关介绍 本篇将对CCP标定协议相关指令进行介绍 CCP通讯报文定义 CCP标定协议标准中定义了两条CAN通讯报文 CRO Command Re
  • Python 更新pip报错

    解决办法 更新指令中加上 user python m pip install user upgrade pip
  • Tomcat线程模型及调优

    一 Tomcat线程模型 1 BIO 同步阻塞式I O操作 表示Tomcat使用的是传统Java I O操作 即Java io包及其子包 Tomcat7以下版本默认情况下是以bio模式运行的 由于每个请求都要创建一个线程来处理 线程开销较大
  • case when where 显示没有该列 mysql,mysql - MySQL CASE WHEN麻木IS NULL忽略记录WHERE麻木IS NOT NULL - SO中文参考 - www.s...

    计算numb m value NULL 1 7 64 NULL 1 7 65 8070 2 7 935 8070 2 7 941 NULL 3 7 62 8070 4 7 92 8070 4 7 935的每个值的最小值和最大值 取决于COA
  • spring赌上未来的一击:WebFlux性能实测

    最近花了一点时间系统的测试验证了在SpringBoot框架下使用SpringMVC和Spring WebFlux两种框架开发接口 对比了响应时间以及压测吞吐量的区别 WebFlux SpringMVC 如果对WebFlux还不了解的同学 那
  • tesseract64位编译

    经过两天吐血的编译 tesseract终于可以在win64下用了 我这将每一步更加细化 我编译的是tesseract ocr3 02 leptonica1 68 1 要想编译自己的tesseract的lib和dll必须先编译leptonic
  • Linux中通过命令行监控股票报价

    如果你是那些股票投资者或者交易者中的一员 那么监控证券市场将是你的日常工作之一 最有可能的是你会使用一个在线交易平台 这个平台有着一些漂亮的实时图表和全部种类的高级股票分析和交易工具 虽然这种复杂的市场研究工具是任何严肃的证券投资者了解市场
  • 【Vue2.0源码学习】生命周期篇-初始化阶段(initEvents)

    文章目录 1 前言 2 解析事件 3 initEvents函数分析 4 总结 1 前言 本篇文章介绍生命周期初始化阶段所调用的第二个初始化函数 initEvents 从函数名字上来看 这个初始化函数是初始化实例的事件系统 我们知道 在Vue
  • 关于setConnectTimeout和setReadTimeout的问题

    1 问题描述 这几天测试重构后的下载框架 发现在下载过程中如果网络中断或网络较差 个别应用的下载就会阻塞卡住 一直卡在 正在下载 xx 2 问题排查和定位 思考 网络差不应该报网络异常的错误或者直接抛timeout异常吗 所以马上去检查Ht
  • 我所不知道的TCP Socket编程(一)-简介+创建套接字

    Socket编程 套接字 Socket 连接起了数字世界 定义 源IP地址和目的IP地址以及源端口号和目的端口号的组合称为套接字 其用于标识客户端请求的服务器和服务 它是网络通信过程中端点的抽象表示 包含进行网络通信必需的五种信息 连接使用
  • MMU地址映射过程详细

    ARMv6 MMU简述 1 MMU由协处理器CP15控制 2 MMU功能 地址映射 VA gt PA 内存访问权限控制 3 虚拟地址到物理地址的转换过程 Micro TLB gt Main TLB gt Page Table Walk 址映
  • DVWA平台漏洞测试与源码分析(一)SQL注入

    DVWA平台是初学网络安全者了解十大漏洞的有效途径 此平台收集了当前威胁网络安全的最常见的十大漏洞 并且为各位初学者提供了靶场实验环境 我们可以利用此平台进行各种攻击实验 从而丰富自己对于Web安全的认识 这篇文章主要介绍了DVWA平台中的