本文为记录个人信安小白的刷题路程,大佬勿喷,也同时希望文章能对您有所帮助

打开靶机,是一个介绍购买的界面,看看源码,

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
function enc(code){
hash = hex_md5(code); // 调用之前定义的 hex_md5 函数计算 code 的 MD5 值
return hash; // 返回计算出的 MD5 哈希值(32位十六进制字符串)
}
function validate(){
// 获取页面上 ID 为 "vcode" 的输入框的值
var code = document.getElementById("vcode").value;

// 检查输入是否为空
if (code != ""){
// 核心验证逻辑:计算输入值的MD5,并与硬编码的正确MD5进行比较
if(hex_md5(code) == "0cd4da0223c0b280829dc3ea458d655c"){
// 如果匹配,弹出成功提示
alert("您通过了验证!");
// 并跳转到 flag.php 页面
window.location = "./flag.php"
}else{
// 如果不匹配,弹出错误提示
alert("你的授权码不正确!");
}
}else{
// 如果输入为空,提示用户输入
alert("请输入授权码");
}
}

可是页面中没有vcode输入框,访问flag.php

验证逻辑在后端,说明前端的不是验证逻辑,提到了IP,我们没有购买者的IP,但是可以伪造本地的IP
Burp抓包,添加X-Forwarded-For字段,

获得flag