hetianlab_check your source code

这是一道代码审计题
打开靶机输入地址
hetianlab_check your source code_第1张图片

查看源代码
提示有source.txtd 打开发现源码


$flag = "XXXXXXXXXXXXXXXX";
$secret = "xx";

if(!isset($_POST["username"]) || !isset($_POST["password"])){
     
    exit();
}
$username = $_POST["username"];
$password = $_POST["password"];
 
if (!empty($_COOKIE["check"])) {
     


    if (urldecode($username) === "admin" && urldecode($password) != "admin") {
     
        if ($_COOKIE["check"] === base64_encode($secret) . urldecode($username . $password))) {
     
            echo "Login successful.\n";
            die ("The flag is ". $flag);
        }
        else {
     
            die ("重新检查下你的cookie吧");
        }
    }
    else {
     
        die ("你是不是管理员心里没点数吗?");
    }
}
 
setcookie("ahash", base64_encode($secret . urldecode("admin" . "admin")), time() + (60 * 60 * 24 * 7));
?>

分析源码
必须存在username和password 不然不会提交
必须存在cookie 的键名为 check 不然会输出"你是不是管理员心里没点数吗?"
并且对username进行url解码(post表单提交时会自动将username和password进行url编码)
=== 就是类型和值都要一致 并且password只要不是 ‘password’ 就行
如果 cookie的值是 变量为secret的base64编码加上username和password的解码
就会给出flag
最后一行setcookie 函数意思为 键值为 ahash 内容为base64编码的变量secret加上url解码的
usernameusername也就是 adminadmin

hetianlab_check your source code_第2张图片
解码cookie后得知 secret的值就是88
hetianlab_check your source code_第3张图片
再将 88进行base64编码得知为
hetianlab_check your source code_第4张图片
这里还需要注意我们接受的cookie键值应该是check 而不是原本的 ahash
所以正确playload为
hetianlab_check your source code_第5张图片
得到flag

你可能感兴趣的:(hetianlab_check your source code)