PHP-CTF-Docker day4

PHP-CTF-Docker day4,第1张

概述buy.php,加载了js中的buy.js<scripttype="text/javascript"src="js/buy.js"></script>buy.js中发起对api.php的post请求,并且带上了我们输入的7位号码functionbuy(){$('#wait').show();$('#result').hide();varinput=$

buy.PHP,加载了Js中的buy.Js

<script type="text/JavaScript" src="Js/buy.Js"></script>

buy.Js中发起对API.PHP的post请求,并且带上了我们输入的7位号码

function buy(){    $('#wait').show();    $('#result').hIDe();    var input = $('#numbers')[0];    if(input.valIDity.valID){        var numbers = input.value;        $.AJAX({          method: "POST",          url: "API.PHP",          dataType: "Json",          ContentType: "application/Json",           data: JsON.stringify({ action: "buy", numbers: numbers })        }).done(function(resp){            if(resp.status == 'ok'){                show_result(resp);            } else {                alert(resp.msg);            }        })    } else {        alert('invalID');    }    $('#wait').hIDe();}

API.PHP:

function random_win_nums(){    $result = '';    for($i=0; $i<7; $i++){        $result .= random_num();    }    return $result;}function buy($req){    require_registered();    require_min_money(2);    $money = $_SESSION['money'];    $numbers = $req['numbers'];    $win_numbers = random_win_nums();    $same_count = 0;    for($i=0; $i<7; $i++){        if($numbers[$i] == $win_numbers[$i]){            $same_count++;        }    }    switch ($same_count) {        case 2:            $prize = 5;            break;        case 3:            $prize = 20;            break;        case 4:            $prize = 300;            break;        case 5:            $prize = 1800;            break;        case 6:            $prize = 200000;            break;        case 7:            $prize = 5000000;            break;        default:            $prize = 0;            break;    }    $money += $prize - 2;    $_SESSION['money'] = $money;    response(['status'=>'ok','numbers'=>$numbers, 'win_numbers'=>$win_numbers, 'money'=>$money, 'prize'=>$prize]);}

 

1、通过random_win_nums()函数生成了中奖号码

2、中奖的判断代码:

    for($i=0; $i<7; $i++){        if($numbers[$i] == $win_numbers[$i]){            $same_count++;        }    }

3、==和===的区别

这里使用的是 "==",在执行==之前需要让两边的数据类型必须一致,如果数据类型不一致,就会强制转换运算符右边的数据。

而在===中,如果两边的数据类型不一致则直接返回false。

4、==比较利用

这里我们就可以传入一个全为true的数组,那么只要生成的中奖号码中没有0的话就可以完全相同,然后得到prize去获取flag

 

示例:

<?PHP$number='3569456';$a=[(bool)$number[0],    (bool)$number[1],    (bool)$number[2],    (bool)$number[3],    (bool)$number[4],    (bool)$number[5],    (bool)$number[6]];var_dump($a);?>

结果:

array(7) {  [0]=>  bool(true)  [1]=>  bool(true)  [2]=>  bool(true)  [3]=>  bool(true)  [4]=>  bool(true)  [5]=>  bool(true)  [6]=>  bool(true)}

 

 

 

 

 

 


@H_301_74@最后贴上一个松散比较的表格:

 https://www.PHP.net/manual/zh/types.comparisons.PHP

 

 

总结

以上是内存溢出为你收集整理的PHP-CTF-Docker /day4全部内容,希望文章能够帮你解决PHP-CTF-Docker /day4所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/1167009.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-01
下一篇 2022-06-01

发表评论

登录后才能评论

评论列表(0条)

保存