这里给大家简单写点渗透最基础的一些方法以及技能,主要来自于
ctfshow靶场;
文章目录
Base64编码隐藏
适合纯新手入门使用,难度极低。
知识点
这道题的核心考察点是前端源代码审计 。通过浏览器开发者工具(F12)查看网页源码,可以发现在 <script> 标签中直接硬编码了登录校验逻辑,这演示了将敏感逻辑或密钥放置在客户端脚本中所带来的安全风险。
另一个关键知识点是 Base64 编码与解码 。代码中的 btoa() 函数用于将字符串转换为 Base64 格式,解题时只需将对比用的字符串 Q1RGe2Vhc3lfYmFzZTY0fQ== 进行逆向解码,即可直接获取明文密码;
打开网页,看到如下页面:

这里打开页面源码,即可得到答案:

如下:

HTTP头注入
知识点
这道题的知识点可以总结为以下两点:
-
HTTP 请求头的构成与伪造 :HTTP 头部(如
User-Agent、Referer)是客户端向服务器传递的元数据。本题考察如何利用 Burp Suite、Hackbar 或浏览器插件,手动修改这些客户端完全可控的字段,以模拟特定的浏览器环境或绕过简单的环境检测。 -
服务端对 Header 信息的盲目信任 :此类考点揭示了服务端逻辑的安全缺陷------如果后端代码直接依赖
User-Agent等 Header 信息来判断权限或返回数据,攻击者就可以通过篡改 Header 诱导服务器执行特定逻辑。这种"基于 Header 的访问控制"极易被绕过,是 Web 安全中典型的信任风险。
输入账号密码后,我们得到如下响应结果:
同理,打开页面,我们发现源码存在Base64编码 ,解密后得到结果:CTF{easy_base64}

随后输入账号密码,进入系统:

得到一个告警:You must use "ctf-show-brower" browser to access this page

既然是UA头无效,那就按上述要求进行修改:
bash
User-Agent: ctf-show-brower
得到结果:

Base64多层嵌套解码
知识点
这道题目的知识点可以总结为以下两点:
-
算法逆向推导
本题涉及
btoa(Base64 编码)、reverse(字符串翻转)、slice/substr(切片)以及固定干扰字符(如xH7jK、aB3、qW9)的组合调用。解题过程需基于最终加密值correctPassword,按代码逻辑的相反顺序进行逆向操作,包括使用atob解码、再次翻转字符串以及精确剔除特定位置的填充字符。 -
前端硬编码与审计风险
校验逻辑完全运行在客户端。由于 JavaScript 源码对用户公开,所有加密步骤、偏移量和盐值均可通过浏览器开发者工具获取。这种设计展示了前端校验的脆弱性,即无论算法如何叠加混淆,只要核心逻辑硬编码在本地脚本中,即可被静态分析或控制台调试破解。
这里我们查看源码,发现并不是之前的Base64编码了,而是存在js脚本:
js
<script>
document.getElementById('loginForm').addEventListener('submit', function(e) {
const correctPassword = "SXpVRlF4TTFVelJtdFNSazB3VTJ4U1UwNXFSWGRVVlZrOWNWYzU=";
function validatePassword(input) {
let encoded = btoa(input);
encoded = btoa(encoded + 'xH7jK').slice(3);
encoded = btoa(encoded.split('').reverse().join(''));
encoded = btoa('aB3' + encoded + 'qW9').substr(2);
return btoa(encoded) === correctPassword;
}
const enteredPassword = document.getElementById('password').value;
const messageElement = document.getElementById('message');
if (!validatePassword(enteredPassword)) {
e.preventDefault();
messageElement.textContent = "Login failed! Incorrect password.";
messageElement.className = "message error";
}
});
</script>
</body>
</html>
但好消息是:我们知道了该页面前端加密的过程,所以可以根据该脚本内容逆向出来,得到正确密码:

而加密后的密码为:SXpVRlF4TTFVelJtdFNSazB3VTJ4U1UwNXFSWGRVVlZrOWNWYzU=
所以这里编写脚本,成功逆向得到结果:
bash
{
const correctPassword = "SXpVRlF4TTFVelJtdFNSazB3VTJ4U1UwNXFSWGRVVlZrOWNWYzU=";
// 逆推 Step 5
const step4 = atob(correctPassword);
// 逆推 Step 4 (补全缺失的 'YU')
const step3_padded = atob('YU' + step4);
const step3 = step3_padded.slice(3, -3);
// 逆推 Step 3
const step2_reversed = atob(step3);
const step2 = step2_reversed.split('').reverse().join('');
// 逆推 Step 2 & 1 (爆破缺失的前 3 个 Base64 字符)
const b64_chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
console.log("🏃 正在精准爆破...");
// 给外层循环打个标签叫 outerLoop,方便后面直接跳出
outerLoop:
for (let c1 of b64_chars) {
for (let c2 of b64_chars) {
for (let c3 of b64_chars) {
try {
let testStr = c1 + c2 + c3 + step2;
let decoded = atob(testStr);
if (decoded.endsWith('xH7jK')) {
let btoa_input = decoded.slice(0, -5);
let flag = atob(btoa_input);
// 过滤条件:确保解出来的 Flag 全部是正常的可见字符(ASCII 范围)
// 或者直接包含了 ctfshow 关键字
if (/^[\x20-\x7E]+$/.test(flag) && flag.length > 5) {
console.log("🎉 爆破成功!真正的 Flag 是: " + flag);
// 直接打断所有循环,结束战斗!
break outerLoop;
}
}
} catch (e) {
// 忽略无效 Base64
}
}
}
}
}
F12出现"控制台"------F5刷新一下------使用代码,回车------得到结果:

成功得到密码:#A7316
后面步骤与上一关一样,修改UA头即可:

HTTPS中间人攻击(wireshark导入ssl解密流量)
适合纯新手入门使用,难度极低。
知识点
-
SSL/TLS 加密与密钥交换
- HTTPS 在传输层通过 SSL/TLS 协议加密。其核心在于握手阶段 :客户端与服务器协商加密算法并生成会话密钥(Session Key)。由于后续数据传输使用对称加密,解密的逻辑关键在于获取该会话密钥。
-
Wireshark 流量解密原理:Wireshark 无法直接破解加密报文,必须导入相关凭据:
- 情况 A:如果你有密钥日志文件(最常见,如
sslkeylog.log) - 情况 B:如果你有 RSA 私钥文件(
.key或.pem)
- 情况 A:如果你有密钥日志文件(最常见,如
这个解压后得到一个加密流量包以及ssllog文件(存储着SSL密钥):

未解密前:(都是加密流量)

解密步骤:Wireshark 配置Protocols -> TLS -> (Pre-)Master-Secret log filename

成功解密流量:

在POST包里找到flag:

Cookie伪造
适合纯新手入门使用,难度极低。
知识点
Cookie 伪造是攻击者通过非法篡改或预测客户端 Cookie 内容 ,从而绕过验证机制或实现权限提升 的行为。其原理在于服务端对凭证缺乏严格的完整性校验,或生成逻辑过于简单,导致攻击者能通过修改用户标识(如 guest 改为 admin)来冒充特定身份。
常见手段包括 Base64 解码重组、弱哈希碰撞或利用 XSS 漏洞窃取会话令牌。防御措施应包括服务端加密签名、设置 HttpOnly 属性以及完善 Session 管理机制,以确保凭证具备唯一性、不可预测性与安全性。
打开页面,发现默认为guest用户:

并且源代码也没有敏感信息;
这里尝试弱口令:
bash
123456
admin
admin123
guest
...
简单尝试,发现密码为guest
抓包登陆后:

只能查看响应包源码:

关键就在这一行:Set-Cookie: role=guest; expires=...
服务器非常直白地告诉了你它的鉴权逻辑:它通过一个名为 role 的 Cookie 来识别你的身份;既然现在是 guest(访客),我们要做的就是把它伪造成 admin(管理员)。
修改为如下Cookie:
bash
Cookie: PHPSESSID=95c19a8b8364823f2329b9126f29002a;role=admin
修改后成功得到结果(可对照上图):

总结
知识点回顾:
-
JS 逆向:通过分析前端脚本的加密逻辑并编写逆向脚本,还原被隐藏的原始明文数据。
-
流量解密:在 Wireshark 协议设置中导入密钥日志或私钥,将加密的 TLS 通信还原为可读明文。
-
Cookie 伪造:通过手动篡改浏览器请求中的身份标签(如角色、权限位),直接冒充高权限用户。
期待下次再见;