一.Base64编码隐藏
1打开环境发现是一个登录页面,然后新手入门的话,目前就只要查看页面源代码
2.然后就在这里发现存在base64编码,直接解密,就得到flag
二.HTTP头注入
1.打开靶场发现是和上一题一样的环境,于是我们可以输入和上一题一样的密码:CTF{easy_base64},但是显示有提示:不合法的User-Agent,然后要我们换成ctf-show-brower,那我们就去抓包然后替换就行
2.打开bp抓包,这里抓的是我们输入完密码的那个页面的,然后发送到repeater功能
3.把User-Agent换成指定的ctf-show-brower,然后点击send即可看见flag
三.Base64多层嵌套解码
1.打开靶场是和之前相同的登录界面,但是查看源代码之后发现这里又告诉我们密码的加密过程
2.根据这些加密的过程可以反向推断出原来的密码:
// 定义一个常量 correctPassword,用来保存题目中给出的最终目标字符串(也就是最后要比对的“正确结果”) const correctPassword = "SXpVRlF4TTFVelJtdFNSazB3VTJ4U1UwNXFSWGRVVlZrOWNWYzU="; // 定义一个函数 validatePassword,用来验证输入的密码 input 是否能够通过题目的校验 function validatePassword(input) { // 第一步:把输入的密码 input 进行 Base64 编码,并把结果保存到变量 encoded 中 let encoded = btoa(input); // 第二步: // 1. 先把上一步的 encoded 和固定字符串 'xH7jK' 拼接起来 // 2. 再对拼接后的结果做一次 Base64 编码 // 3. 最后使用 slice(3) 从下标 3 开始截取到末尾,相当于删掉前 3 个字符 encoded = btoa(encoded + 'xH7jK').slice(3); // 第三步: // 1. 先用 split('') 把字符串 encoded 拆成字符数组 // 2. 再用 reverse() 把字符顺序反转 // 3. 再用 join('') 把反转后的数组重新拼接成字符串 // 4. 最后对这个倒序后的字符串再做一次 Base64 编码 encoded = btoa(encoded.split('').reverse().join('')); // 第四步: // 1. 在当前 encoded 前面拼接固定字符串 'aB3' // 2. 在当前 encoded 后面拼接固定字符串 'qW9' // 3. 对拼接后的整体再做一次 Base64 编码 // 4. 再用 substr(2) 从下标 2 开始截取到最后,相当于删掉前 2 个字符 encoded = btoa('aB3' + encoded + 'qW9').substr(2); // 第五步: // 把当前的 encoded 再进行一次 Base64 编码, // 然后使用 === 与最开始定义的 correctPassword 进行严格比较: // 如果完全相等,返回 true;否则返回 false return btoa(encoded) === correctPassword; } // 使用 for 循环来枚举 ASCII 码从 32 到 126 的所有常见可打印字符 for (let i = 32; i <= 126; i++) { // 把当前 ASCII 码 i 转成对应字符,再和字符串 "17316" 拼接,组成一个待测试的密码 let test = String.fromCharCode(i) + "17316"; // 调用 validatePassword(test) 检查这个测试密码是否能通过校验 if (validatePassword(test)) { // 如果能通过校验,就把这个可用密码输出到浏览器控制台中 console.log(test); } }3.最后解出来的密码是:所有 ASCII 码 32-126 的字符与 "17316" 拼接
4.到这个地方和上一题的过程就是一样的了,直接给出flag:CTF{base64_brute_force_success}
四.HTTPS中间人攻击
1.下载附件发现是一个流量包和一个sslkey.log文件,有点像那个TLS流量分析
2.既然给了这样的文件,那就先按照做tls流量分析的步骤来,把sslkey.log文件导入到.pcap中:编辑——首选项——protocols里面找到tls,然后导入.log文件
3.然后过滤http流,就只有两个,然后去追踪tls流
4.最后在这里找到了flag
5.什么是HTTPS中间人攻击:
在CTF题目中,HTTPS中间人攻击(MITM)[&常用于考察选手对TLS加密原理、证书信任链以及流量解密技术的理解。HTTPS依赖TLS握手&]与CA证书体系来确保端到端加密,但如果攻击者能控制信任链,就能解密并篡改通信内容。
典型攻击流程
流量截获:攻击者(或企业代理)拦截客户端发往目标站点的HTTPS请求,与真实服务器建立合法TLS连接。
伪造证书:使用自建CA签发与目标域名一致的“冒牌证书”,并利用设备中预装的私有根证书绕过浏览器警告。
双向加密通道: 客户端 ↔ 代理:使用伪造证书加密 代理 ↔ 服务器:使用真实证书加密 所有数据在代理节点被解密、分析、再加密转发。
数据可见性:代理可查看明文HTTP请求/响应,包括Cookie、密码等敏感信息。
CTF实战解密方法在比赛中,常会提供流量包(.pcap)[&和sslkey.log&]文件:
sslkey.log记录了TLS会话的临时密钥(如CLIENT_RANDOM),可用于解密HTTPS流量。
在Wireshark中配置:编辑 → 首选项 → Protocols → TLS → (Pre)-Master-Secret log filename指向sslkey.log
解密后可直接追踪HTTP流,分析Cookie、参数等信息,进而进行伪造或注入攻击。
五.Cookie伪造
1.启动靶场发现这个页面和之前一样都是登录页面,然后查看页面源代码
2.然后这一步好像没什么作用,我们再回到登录页面,发现登录的用户名是guest游客身份登录,我们尝试用这个当作是密码登录看一下
3.然后就发现登录成功了,于是设想,要是以admin身份登录是否可以直接得到flag
4.然后就是修改cookie,我这个版本的harkbar是点击MODIFY HEADER之后,在Name里面找到Cookie选项,然后把role中的guest改为admin
5.然后点击EXECUTE,即可得到flag
6.什么是Cookie伪造:
在 CTF Web 题目中,Cookie常被用来存储用户状态或验证信息,很多签到题会通过修改 Cookie 值来获取 Flag。理解其原理并掌握常用操作方法是解题关键。
查看与修改 Cookie
打开开发者工具在浏览器中按 F12,切换到 Application(存储) 面板,找到 Cookies。 查看当前站点的 Cookie 列表,重点关注如 login、admin 等字段。
修改 Cookie 值直接在浏览器开发者工具中双击对应值进行修改,例如将 login=0 改为 login=1。 或使用 Burp Suite 抓包,在 HTTP 请求头 中添加或修改: Cookie: login=1
刷新或重发请求修改后刷新页面或在 Burp Suite 中点击 Forward/Go,若验证通过即可返回 Flag。
技巧与注意事项
优先查看源码和响应头,有时 Flag 会直接出现在Set-Cookie或响应内容中。
注意 Cookie 与 Session 的区别,Cookie 存在客户端,容易被篡改。
对于加密或编码的 Cookie(如 Base64),需先解码再修改。