目录

XX型注入

insert/update注入

delete注入

"http header"注入

基于boolian的盲注

基于时间的盲注

宽字节注入(wide byte注入)


pikachu靶场的字符型注入中xx' or 1=1#可以得到所有用户的信息。

XX型注入

首先输入1'探测一下。

然后返回这样一条报错信息,注意near ''1'')' ,红色部分是表示内容为字符串的一对单引号,实际报错内容应该是'1''),然后这个橙色部分单引号应该是我们输入的导致报错的单引号,事实上还缺一个括号闭合,报错信息省略了,所以数据格式大概是('你的输入')。

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''1'')' at line 1

输入1') order by 3#报错,经过尝试有两列内容。

输入1' union slect database(),2#爆库,接下来一一操作便是。

insert/update注入

首先注册一个用户。

随后点击修改信息,并且在性别后面加一个单引号。

提交后成功报错。

接下来想查看有几列,发现一直失败,这个时候转向报错注入。

输入1' and extractvalue(1,concat(0x7e,(select database()),0x7e))#,成功拿到数据库名,接下来慢慢测吧哈哈,除了这个函数还可以用updatexml,它具有三个参数。

回到注册页面,注册一般使用insert语句,可能存在insert注入,insert格式如下:

用户输入1' or updatexml(1,concat(0x7e,(select database()),0x7e),0) or '

原来的

('百度','https://www.baidu.com')变成

('1' or updatexml(1,concat(0x7e,(select database()),0x7e),0) or '','https://www.baidu.com')

其中红色单引号是原本'百度'的一对单引号。

delete注入

首先上传一份javascript恶意脚本,然后成功上传。

这个时候尝试上传1',发现也没有报错。

接下来删除js脚本,页面没有变化。

但是当我们删除1'时候,提示我们删除失败,数据库挂了好好好,大概就是删除带有插入恶意符号的语句可能会触发sql注入。

我们重新上传1' order by 3#,随后删除看看,但是发现无论列数设置多少页面都没变化,但是就是在删除的时候存在sql注入,怎会回事呢?我们删除的时候抓包看一看。

这里猜测大概在id这里存在sql注入

将id设置为id=75',发现出现了报错。

接下来输入id=75 and 1=1

接下来,发现遇到了这个。

那么大概一些东西被过滤了,猜测是空格,将空格替换成/**/,随后删除成功。

随后输入id=77/**/and/**/1=2,发现不行,哎这个是数字型注入啊。

随后输入id=78/**/order/**/by/**/2,竟然不存在,然后尝试1也不行,那么转成报错注入方向。

输入id=79/**/and/**/updatexml(1,concat(0x7e,(select/**/database()),0x7e),0)

发现爆出了数据库名,除了这个paylaod还可以,在这里无论最终真值与否,右边的语句都会报错都会返回信息,所以关系不大。

id=79/**/or/**/updatexml(1,concat(0x7e,(select/**/database()),0x7e),0)

id=79/**/&&/**/updatexml(1,concat(0x7e,(select/**/database()),0x7e),0)

id=79/**/||/**/updatexml(1,concat(0x7e,(select/**/database()),0x7e),0)

"http header"注入

在这里我们登录了一个账号,发现返回了我的ip,user agent,http accept,端口号,由于我的信息都写入了数据库,所以这几个跟数据库相关的部分都可能存在sql注入。 

刷新页面抓包,首先在ip位置测试sql注入,然后返回了错误,但是并不是sql语句的报错,这里不存在。

接着在user agent后面加入一个单引号,发现sql语句报错,那么这里存在sql注入。

随后再次尝试,在accept后面追加单引号来测试,然后sql语句报错,那么这里也存在sql注入。

随后在cookie测试,发现cookie这三个参数都存在sql注入。

在cookie处利用报错注入输入' and updatexml(1,concat(0x7e,(select database()),0x7e),0)#

基于boolian的盲注

kobe' and '1'='1

kobe' and '1'='2

可以通过这个查看页面变化,但是这个页面只有这两种情况,怎么输入最后都没有出现sql语句报错,这里可以尝试布尔盲注入。

输入kobe' and length(database())>10#

但是输入kobe' and length(database())=7#,可以看出回显,那么可以通过这种办法猜测出数据库名字的长度。

输入kobe' and ascii(substr(database(),1,1))>100#,说明数据库名字的第一个字符的ASCII值大于100。

最终输入kobe' and ascii(substr(database(),1,1))=112#,说明数据库名字第一个字符的ASCII值为112,也就是p

接下来测表名,首先应该同刚刚一样测试表名的长度,随后根据表名每位字符的ascii码确定具体的表名。

基于时间的盲注

这道题我们发现无论怎么输入,最终都只会生成一个内容,所以我们仅仅可以使用页面的休息作为参考,那就是基于时间的盲注。

输入1' and sleep(5)#,页面停止5秒。

输入1' and if(length(database())>5,sleep(5),1)#

        页面停止5秒

输入1' and if(length(database())=7,sleep(5),1)#

        页面停止5秒,说明数据库名的长度是7。

输入1' and if(ascii(substr(database(),1,1))=112,sleep(5),1)#

        页面停止5秒,说明数据库名的第一个字符的ascii码为112,为p

随后慢慢测试出数据库名,测试表的方法一样,首先测试表的长度,随后测试表的内容。

宽字节注入(wide byte注入)

以下是宽字节注入简单学习。

攻击背景:

  1. 为了防止SQL注入,老式的PHP程序会开启 magic_quotes_gpc 选项,或者程序员手动使用 addslashes()mysql_real_escape_string() 等函数。

  2. 这些功能会在特殊字符(如单引号 ')前加上一个反斜杠(\) 进行转义。

    • 例如,用户输入 ABC',经过转义后会变成 ABC\'

    • 这样,当输入被拼接到SQL语句中时,\' 会被数据库认为是一个普通的单引号字符,而不是字符串的结束符,从而无法破坏SQL语句结构。

攻击原理:


“宽字节注入”利用了数据库连接层的一个特性:当MySQL连接使用 GBKBIG5SJIS 等宽字符集( multibyte character set)时,可能会将两个字节识别为一个汉字。

  • 关键点:在GBK编码中,%df%5c 是一个合法的汉字。

    • %df 就是我们讨论的这个字符。

    • %5c 是反斜杠 \ 的URL编码。

攻击过程:


假设我们想注入 id=1',但程序会对单引号转义。

  1. 正常输入被转义

    • 输入:1'

    • 转义后:1\' (单引号前被加上了反斜杠 \

    • 最终SQL:SELECT * FROM users WHERE id = '1\'';

    • 这个SQL是合法的,单引号被转义,注入失败。

  2. 使用 %df 进行宽字节注入

    • 输入:%df' (注意,这里是输入 %df 这个字符,而不是输入这三个符号)

    • 转义机制工作:程序看到单引号 ',于是在它前面加一个反斜杠 \

      • 转义后的数据变成了:%df\'

      • 在十六进制表示下,这就是:df 5c 27 (%df + \ + '

    • 魔法时刻:当数据库连接使用 GBK 这类宽字符集时,它会将 %df%5c(即 df 和 5c 这两个字节)“吞并”,理解为一个GBK编码的汉字 “運” (yùn)。

    • 最终,数据库看到的SQL语句变成了:

      sql

      SELECT * FROM users WHERE id = '運'';
    • 看!反斜杠(\)神奇地消失了! 单引号 ' 失去了它的保护伞(反斜杠),重新暴露出来,成为了一个未转义的单引号,成功地闭合了前面的字符串。

    • 现在,攻击者就可以在这个单引号之后继续构造Payload,例如:%df' AND 1=1 # 或 %df' UNION SELECT ... #


3. 总结:%df 的意义

  • 目的:它是一个用于触发宽字节注入精心构造的字节

  • 作用:与系统自动添加的反斜杠(\%5c)结合,形成一个宽字符(如GBK中的“運”),从而“吃掉”用于防护的安全反斜杠,使后续的单引号重新生效。

  • 条件:这种攻击成功需要两个前提:

    1. 数据库连接使用了宽字符集(如 GBKBIG5)。

    2. 目标网站使用了转义函数(如 addslashes)但未使用参数化查询

所以,%df 是Web安全历史上一个非常有名的“黑客字符”,它专门用来利用特定环境下的防御漏洞。看到它,安全研究人员立刻就会想到“宽字节注入”。

接下来回到靶场。

首先尝试1',发现没有报错,然后怎么输入页面都不变,时间盲注也没有办法使用。

这里我们尝试使用宽字节注入,在pikachu靶场的字符型sql注入中输入xx' or 1=1#就会返回所有人的信息,那么在这里按理来说,输入xx%df' or 1=1#应该也可以输出好多人的信息,但是这里没有。

但是当我们抓包时,将name改为1%df' or 1=1#时

然后再放包,就出现了所有人的信息,为什么呢?

因为首先如果在输入框输入1%df'后面会进行url编码,将%号url编码为%25,将单引号url编码为%27,并且生成斜杠然后url编码为%5c,所以原来的就变成1%25df%5c%27,但是在GBK编码中%df%5c 是一个合法的汉字,%25df%5c就不是一个合法的汉字了,从而导致单引号没有逃逸。

当我们在抓包后输入时,%就不会被url进行编码,从而当发现我们输入单引号时,系统生成斜杠(\),并且对它进行url编码为%5c,从而%df%5c表示一个汉字,从而剩下了单引号留下。

抓包后输入1%df' order by 3#后报错,输入1%df' order by 2#没有报错,那么存在两列。

输入1%df' union select 1,database()#

拿到了数据库名。

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

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

相关文章

TLS(传输层安全协议)

文章目录一、核心概念二、为什么需要 TLS/SSL?三、工作原理与详细流程握手步骤详解:1.ClientHello & ServerHello:2.服务器认证 (Certificate, ServerKeyExchange):3.客户端响应 (ClientKeyExchange, Finished):4.…

【SpringMVC】SSM框架【二】——SpringMVC超详细

SpringMVC 学习目标: 1.SpringMVC简介 1)web访问流程1.web服务器通过浏览器访问页面2.前端页面使用异步提交的方式发送请求到后端服务器3.后端服务器采用:表现层—业务层—数据层的架构进行开发4.页面请求由表现层进行接收,获取用…

PostgreSQL表膨胀的危害与解决方案

PostgreSQL 的 表膨胀(Table Bloat) 是数据库中由于 MVCC(多版本并发控制)机制导致的一种常见性能问题,表现为物理存储空间远大于实际有效数据量。以下是详细解释及其危害:一、表膨胀的产生原因 1. MVCC 机…

Elasticsearch面试精讲 Day 5:倒排索引原理与实现

【Elasticsearch面试精讲 Day 5】倒排索引原理与实现 在“Elasticsearch面试精讲”系列的第五天,我们将深入探讨搜索引擎最核心的技术基石——倒排索引(Inverted Index)。作为全文检索系统的灵魂,倒排索引直接决定了Elasticsearc…

【小白笔记】基本的Linux命令来查看服务器的CPU、内存、磁盘和系统信息

一、 核心概念与命令知识点英文名词&#xff08;词源解释&#xff09;作用与命令CPU (中央处理器)Central Processing Unit&#xff1a;<br> - Central&#xff08;中心的&#xff09;&#xff1a;来自拉丁语 centralis&#xff0c;意为“中心的”。<br> - Process…

51c大模型~合集177

自己的原文哦~ https://blog.51cto.com/whaosoft/14154064 #公开V3/R1训练全部细节&#xff01; 刚刚&#xff0c;DeepSeek最新发文&#xff0c;回应国家新规 AI 生成的内容该不该打上“水印”&#xff1f;网信办《合成内容标识方法》正式生效后&#xff0c;De…

CA根证书的层级关系和验证流程

CA根证书的层级关系和验证流程&#xff1a;1. 证书层级结构&#xff08;树状图&#xff09; [根证书 (Root CA)] │ ├── [中间证书 (Intermediate CA 1)] │ │ │ ├── [网站证书 (example.com)] │ └── [邮件证书 (mail.example.com)] │ └── [中间证书 (In…

液态神经网络(LNN)1:LTC改进成CFC思路

从液态时间常数网络&#xff08;Liquid Time-Constant Networks, LTC&#xff09;到其闭式解版本——闭式连续时间网络&#xff08;Closed-form Continuous-time Networks, CfC&#xff09; 的推导过程&#xff0c;可以分为以下几个关键步骤。我们将基于你提供的两篇论文&#…

【图像处理基石】图像预处理方面有哪些经典的算法?

图像预处理是计算机视觉任务&#xff08;如目标检测、图像分割、人脸识别&#xff09;的基础步骤&#xff0c;核心目的是消除图像中的噪声、提升对比度、修正几何畸变等&#xff0c;为后续高阶处理提供高质量输入。以下先系统梳理经典算法&#xff0c;再通过Python实现2个高频应…

MySQL 多表查询方法

MySQL 多表查询方法MySQL 多表查询用于从多个表中检索数据&#xff0c;通常通过关联字段&#xff08;如外键&#xff09;实现。以下是常见的多表查询方式&#xff1a;内连接&#xff08;INNER JOIN&#xff09;内连接返回两个表中匹配的行。语法如下&#xff1a;SELECT 列名 F…

网络断连与业务中断的全链路诊断与解决之道(面试场景题)

目录 1. 网络链路的“命脉”:从物理层到应用层的排查逻辑 物理层:别小看那一根网线 数据链路层:MAC地址和交换机的“恩怨情仇” 工具推荐:抓包初探 2. 网络层的“幕后黑手”:IP冲突与路由迷雾 IP冲突:谁抢了我的地址? 路由问题:数据包的“迷路”之旅 3. 传输层与…

英伟达Newton与OpenTwins如何重构具身智能“伴随式数采”范式

具身智能的“数据饥荒”&#xff1a;行业痛点与技术瓶颈的深度剖析1.1 具身智能的现状与核心挑战Embodied AI的落地之路面临着多重严峻挑战。在算法层面&#xff0c;实现通用智能仍需人类的持续介入&#xff0c;并且从感知到行动的认知映射尚未完全打通。在硬件层面&#xff0c…

STM32HAL 快速入门(十六):UART 协议 —— 异步串行通信的底层逻辑

大家好&#xff0c;这里是 Hello_Embed。在前几篇中&#xff0c;我们通过环形缓冲区解决了按键数据丢失问题&#xff0c;而在嵌入式系统中&#xff0c;设备间的数据交互&#xff08;如单片机与电脑、传感器的通信&#xff09;同样至关重要。UART&#xff08;通用异步收发传输器…

使用 C 模仿 C++ 模板的拙劣方法

如下所示&#xff0c;准备两个宏&#xff0c;一个定义类型&#xff0c;一个定义容器大小。 使用时只要先定义这两个宏&#xff0c;然后再包含容器头文件就能生成不同类型和大小的容器了。但是这种方法只允许在源文件中使用&#xff0c;如果在头文件中使用&#xff0c;定义不同类…

flume接收处理器:构建高可用与高性能的数据链路

flume接收处理器&#xff1a;构建高可用与高性能的数据链路 在大规模数据采集场景中&#xff0c;单点故障和性能瓶颈是两大核心挑战。Flume 通过 Sink Group 接收处理器&#xff08;Processor&#xff09; 机制&#xff0c;提供了强大的故障转移&#xff08;Failover&#xf…

高级Kafka应用之流处理

40 Kafka Streams与其他流处理平台的差异在哪里&#xff1f; 什么是流处理平台&#xff1f; “Streaming Systems”一书是这么定义“流处理平台”的&#xff1a;流处理平台&#xff08;Streaming System&#xff09;是处理无限数据集&#xff08;Unbounded Dataset&#xff09;…

Custom SRP - LOD and Reflections

1 LOD Groups 场景中对象越多,场景就越丰富,但是过多的对象,也会增加 CPU 和 GPU 的负担.同时如果对象最终渲染在屏幕上后覆盖的像素太少,就会产生模糊不清的像素点/噪点.如果能够不渲染这些过小的对象,就能解决噪点问题,同时释放 CPU GPU,去处理更重要的对象. 裁剪掉这些对象…

【Linux篇章】互联网身份密码:解密 Session 与 Cookie 的隐藏玩法和致命漏洞!

本篇摘要 本篇将承接上篇HTTP讲解&#xff08; 戳我查看 &#xff09;遗留的关于Cookie与Session的介绍&#xff0c;在本篇&#xff0c;将会介绍Cookie的由来&#xff0c;作用&#xff0c;以及缺点等&#xff0c;进而引出Session&#xff0c;最后介绍一下它们的性质等&#xf…

Postman接口测试工具:高效管理测试用例与环境变量,支持断言验证及团队协作同步

之前跟你们聊过能搭知识网络的 Obsidian&#xff0c;今天换个偏向接口测试的方向 —— 给你们安利一个 Github 上的「Postman」&#xff0c;它是个接口测试工具&#xff0c;官网能直接下载&#xff08;Postman: The Worlds Leading API Platform | Sign Up for Free&#xff09…

可可图片编辑 HarmonyOS 上架应用分享

可可图片编辑 HarmonyOS 上架应用分享 介绍 可可图片编辑 原名 图片编辑大师&#xff0c;因为上架审核的时候 &#xff0c;提示与一些已有应用重名&#xff0c;为了避免冲突&#xff0c;需要改名字&#xff0c;所以苦心思考了一分钟&#xff0c;就调整成 可可图片编辑。 应用…