
💎【行业认证·权威头衔】
✔ 华为云天团核心成员:特约编辑/云享专家/开发者专家/产品云测专家
✔ 开发者社区全满贯:CSDN博客&商业化双料专家/阿里云签约作者/腾讯云内容共创官/掘金&亚马逊&51CTO顶级博主
✔ 技术生态共建先锋:横跨鸿蒙、云计算、AI等前沿领域的技术布道者
🏆【荣誉殿堂】
🎖 连续三年蝉联"华为云十佳博主"(2022-2024)
🎖 双冠加冕CSDN"年度博客之星TOP2"(2022&2023)
🎖 十余个技术社区年度杰出贡献奖得主
📚【知识宝库】
覆盖全栈技术矩阵:
◾ 编程语言:.NET/Java/Python/Go/Node...
◾ 移动生态:HarmonyOS/iOS/Android/小程序
◾ 前沿领域:物联网/网络安全/大数据/AI/元宇宙
◾ 游戏开发:Unity3D引擎深度解析
文章目录
🚀前言
🔎项目描述
测试Web应用时,需要对浏览器发送给服务器的数据进行分析、更改等操作。在初始安装的浏览器中,只能对请求时URL附带的参数进行修改,无法对页面中未出现在输入框的POST传输的参数进行编辑。而在某些测试场合下,需要通过代理才能访问测试网站,编辑系统代理可能会导致计算机的其他应用无法操作请求。在常用的Chrome或Firefox浏览器中安装HackBar 、SwitchyOmega插件,即可解决这一问题。
🔎项目分析
如果读者想安装Firefox浏览器的插件,那么可以在浏览器中搜索附加组件,进入Firefox浏览器的官网中下载即可。对于Chrome浏览器插件的安装,可以进入Google商店中搜索对应的插件名称,然后下载该插件即可。
成功安装HackBar与SwitchyOmega插件,并按要求提交伪造数据。
🚀一、HackBar插件的使用
🔎1.任务概述
HackBar插件可以提交GET、POST数据,自定义提交Referrer内容,并对指定数据进行Hex、URL和Base64编码。在phpStudy的站点根目录中创建demo.php文件,在该文件中写入代码:
php
<?php
error_reporting(0);
$a = $_GET['a'];
$b = $_POST['b'];
$c = base64_encode('Hello');
$d = urlencode('&');
if ($a === $d && $b === $c) {
echo "Success!";
} else {
highlight_file(__FILE__);
}
?>
根据代码要求,提交相关参数,使页面仅输出 "Success!"。
🔎2.任务分析
5.1.1节中的代码为PHP代码,变量a通过GET请求传输,变量b通过POST请求传输,变量c的值为"Hello"字段进行Base64编码后的内容,变量d为"&"符号进行URL编码后的内容。在if条件判断中,要求变量a与变量d的值与类型必须相同,变量b与变量c的值与类型必须相同,当二者条件均满足时,输出"Success!",否则高亮当前页面的代码内容。
🔎3.相关知识
HackBar可以对指定的字符串进行Base64、URL、Hex编码,结合代码中需要传输的内容,通过HackBar对指定字符进行编码和提交。
服务器在处理HTTP请求数据时,会自动对GET请求中的内容进行URL解码,由于变量a是GET请求数据,且对比的变量d为"&"符号进行URL编码后的内容。服务器接收GET请求a的内容后,自动进行URL解码。在phpStudy站点根目录中创建test.php文件,内容如下:
php
<?php
$get = $_GET['test'];
echo $get;
?>
开启phpStudy的站点服务,通过浏览器访问test.php,并传入参数"&",访问地址如下:
http://127.0.0.1/test.php?test=&
提交请求,页面响应结果为空,如图5-1所示。

在HTTP请求中,"&"符号被用作多变量连接符号,当需要对目标站点传入多个变量时,变量与参数之间可以通过"&"符号进行区分。例如,如果输入的请求为"?test=%26",其中"%26"为"&"符号URL编码后的内容,那么在提交请求后,页面输出如图5-2所示。

页面成功输出"&"符号,这证明服务器对输入的"%26"进行了URL解码。然而,这导致了对比时两边的内容并不相等,因此无法输出"Success!"内容。综上分析,需要对"&"进行两次URL编码并提交,以确保服务器解码一次后的数据与代码的一次解码内容相匹配。
🔎4.工作任务
在phpStudy站点根目录中创建demo.php文件,写入5.1.1节中提及的代码,开启phpStudy的Apache服务,使用已安装HackBar的Firefox浏览器访问 http://127.0.0.1/demo.php,显示结果如图5-3所示。

在安装好Firefox浏览器的HackBar插件后,可通过按下 F9键 调出插件内置内容,如图5-4所示。单击左上方的 "Load URL" 按钮,可以将当前请求页面的网址加载到HackBar的输入框中,对加载后的数据可以直接进行编辑,编辑完成后单击 "Execute" 按钮提交请求。

输入框的上方存在 SQL BASICS 、UNION BASED 、ERROR/DOUBLE QUERY 等下拉按钮,单击该下拉按钮选择所需的模块,可以直接加载HackBar自带的漏洞测试语句,如图5-5所示。

选择所需的模块信息后,会在输入框中自动填充对应的测试语句。HackBar插件的下侧按钮为 Post data 、Referrer 、Hex 、URL 、Base64 编码功能按钮。利用下侧的功能按钮可以编辑HTTP请求时的Post数据与Referrer地址,并对所需的字符串进行指定类型的编码。
在编码模块中,先在输入框中输入需要编码的内容并选中相应内容,单击对应编码的左侧方向键 ,即对该字符串进行相关解码 ,单击编码的右侧方向键 ,即对该字符串进行相关编码。
加载访问 http://127.0.0.1/demo.php 的请求网址,根据代码意义进行数据设定,如图5-6所示,在网址的后方添加GET请求参数a,值为"&",勾选下侧的 Post data 复选框,输入内容为 b=Hello。利用HackBar对请求变量的值进行所需的编码。选中GET请求变量a的值"&",单击URL编码器的右侧方向键,对该值进行URL编码,单击一次表示进行一次URL编码,结合前文的分析,该值需要进行两次URL编码 。选中POST请求变量b的值"Hello",单击Base64编码器的右侧方向键,对该值进行Base64编码,编码结果如图5-7所示。

编码完成后单击HackBar工具左侧的 "Execute" 按钮,访问目标网页并提交所需的参数,页面成功显示 "Success!" 字段,即页面成功显示目标字段,如图5-8所示。

🔎5.归纳总结
利用HackBar工具可以直接提交GET、POST数据,同时可以方便地对提交的数据进行编码。在提交请求时,需要了解可能存在的特殊字符和服务器编解码的问题,避免因为编解码不同步导致数据解析出错。
🔎6.提高拓展
将demo.php文件的内容更改为:
php
<?php
error_reporting(0);
$referer = $_SERVER['HTTP_REFERER'];
$url = 'http://www.test.com';
if (strcmp($referer, $url) === 0) {
echo "Success!";
} else {
highlight_file(__FILE__);
}
?>
通过 $_SERVER['HTTP_REFERER'] 获取当前链接的上一个链接来源地址,即链接到当前页面的前一页面的URL地址,可以起到防盗链作用,一般该变量只有在单击超链接(即<a href=...>)打开的页面时才有 HTTP_REFERER 环境变量。将 $_SERVER['HTTP_REFERER'] 获取的内容与指定链接 http://www.test.com 进行对比,二者一致则输出 "Success!",否则将高亮当前页面的代码。
在HackBar插件的下侧功能栏中,可以对Referrer字段 的内容进行伪造。勾选Referrer左侧的复选框,在弹出的输入框中输入需要伪造的来源地址,单击 "Execute" 按钮提交请求,提交后页面成功显示 "Success!" 字段,如图5-9所示。

🔎【附】AI 提示词模板
若您需要将上述内容交由 AI 进行进一步加工(如生成HackBar操作练习任务、输出Referer防盗链与绕过原理详解、制作编码对比表格、设计CTF题型等),可使用以下提示词模板:
提示词模板:
请根据以下关于"浏览器代理插件HackBar的使用"的技术文章内容,完成下列任务:
【角色设定】 你是一位Web安全培训讲师兼CTF出题人。
【任务类型】 (请选择:①设计一道基于HackBar使用的CTF闯关练习题(含答案与解析) ②制作URL编码/Base64编码/Hex编码的对比与原理说明表格 ③输出Referer防盗链原理与伪造方式的详解文档 ④生成一份"HackBar插件从入门到精通"操作指南 ⑤提炼PHP代码审计中常见绕过技巧清单)
【输出要求】 (请填写具体要求,如:CTF题目需包含完整的PHP源码和WriteUp/表格需包含编码前后对照示例、适用场景及注意事项/操作指南需配步骤截图占位)
【原文内容】
(在此处粘贴上述整理后的完整第5章文章)
【补充说明】 (可选,如:需要补充双重URL编码的其他实际场景/说明如何结合Burp Suite进行联动测试/增加SwitchyOmega代理切换的配置方法等)
示例回答(针对上述提示词模板的完整回复):
好的,作为Web安全培训讲师兼CTF出题人,我已完成您指定的任务。以下是根据原文内容设计的 【CTF闯关练习题】 ,涵盖HackBar使用、双重URL编码、Base64编码及Referer伪造知识点,适用于学员实操考核:
🦋CTF 闯关题:HackBar 编码挑战
关卡名称: 神秘的编码之门
题目描述:
小张在渗透测试过程中发现了一个可疑的PHP页面,源码如下。请分析代码逻辑,使用HackBar插件构造正确的GET和POST请求,使页面输出 "CTF{success_flag}"。
题目源码(
challenge.php):
php<?php error_reporting(0); $key1 = $_GET['key1']; $key2 = $_POST['key2']; $secret1 = urlencode(urlencode('%')); $secret2 = base64_encode('CTF'); if ($key1 === $secret1 && $key2 === $secret2) { echo "CTF{success_flag}"; } else { highlight_file(__FILE__); } ?>过关要求:
- 使用HackBar插件提交请求
- GET参数
key1需经过正确次数的URL编码- POST参数
key2需经过Base64编码
🦋WriteUp(答案解析)
步骤一:分析源码
php$secret1 = urlencode(urlencode('%'));
'%'字符进行一次URL编码为"%25"- 再进行一次URL编码为
"%2525"(%25中的%被编码为%25,再加上原有的25,得到%2525)- 因此,
$secret1 = "%2525"
php$secret2 = base64_encode('CTF');
- 对字符串
"CTF"进行Base64编码- 查Base64编码表:
C→Qw==?不对,重新计算- 实际上,"CTF" 的Base64编码为
Q1RG(因为C→Qw==需要补齐,但三个字符的编码是Q1RG,中间有填充细节)- 准确计算:
'C'ASCII 67 →01000011,'T'ASCII 84 →01010100,'F'ASCII 70 →01000110,分组为6位:010000(16=Q)、110101(53=1)、010001(17=R)、100110(38=G) →Q1RG。所以$secret2 = "Q1RG"步骤二:HackBar 操作步骤
- 在phpStudy根目录放入
challenge.php,启动Apache- 使用Firefox浏览器访问
http://127.0.0.1/challenge.php(按F9打开HackBar)- 单击 "Load URL" 加载当前地址
- 在URL末尾添加GET参数:
?key1=%2525(注意:%2525已经是双重编码后的结果,这是需要提交的最终值)- 勾选 "Post data" 复选框,在输入框中填写:
key2=Q1RG- 单击 "Execute" 按钮提交请求
步骤三:验证结果
页面输出
CTF{success_flag},通关成功!
考查知识点总结:
知识点 说明 GET/POST参数传递 区分URL参数和请求体参数 URL双重编码 服务器自动解码一次,代码中再解码一次,需双重编码绕过 Base64编码 对字符串进行Base64编码传输 HackBar操作 使用Load URL、添加参数、勾选Post data、Execute提交
拓展思考:
- 如果源码中使用
urldecode()三次,GET参数应该进行几次URL编码?- 如何用Burp Suite代替HackBar完成同样操作?
(如需其他格式如编码对照表或操作指南,可再次使用提示词模板指定任务类型。)