【CTF | WEB】002、攻防世界WEB题目之simple_php

simple_php

题目描述:

小宁听说php是最好的语言,于是她简单学习之后写了几行php代码。

解题思路:

打开场景

<?php
show_source(__FILE__);
include("config.php");
$a=@$_GET['a'];
$b=@$_GET['b'];
if($a==0 and $a){
    echo $flag1;
}
if(is_numeric($b)){
    exit();
}
if($b>1234){
    echo $flag2;
}
?>

这段PHP代码包含了一个显示文件源代码的功能以及一些简单的条件检查。以下是对代码的逐行解释:

  1. show_source(__FILE__);

    • 这个函数会输出当前文件的源代码。__FILE__是一个魔术常量,它代表当前文件的路径。换句话说,访问这个PHP文件时,它会在页面上显示出自身的源代码。
  2. include("config.php");

    • 这行代码会包含并运行config.php文件的内容。假设config.php文件中定义了一些变量或函数,这些内容就可以在后续的代码中使用。
  3. $a=@$_GET['a'];

    • 这行代码从URL参数中获取参数a的值,并将其赋值给变量$a@符号用于抑制可能出现的错误或警告信息。
  4. $b=@$_GET['b'];

    • 这行代码与上面类似,从URL参数中获取参数b的值,并将其赋值给变量$b
  5. if($a==0 and $a){ echo $flag1; }

    • 这是一条条件语句,如果$a同时满足两个条件:$a==0$a本身的值为真,则会输出变量$flag1的值。
  6. if(is_numeric($b)){ exit(); }

    • 这行代码检查$b是否为数字。如果$b是数字,则脚本会立即停止执行。
  7. if($b>1234){ echo $flag2; }

    • 如果变量$b的值大于1234,则输出变量$flag2的值。

通过阅读代码发现需要同时满足 a==0 且 if a 为真,b 不是数字且 b>1234 才会返回 flag。

原理

php中有两种比较符号

=== 会同时比较字符串的值和类型

== 会先将字符串换成相同类型,再作比较,属于弱类型比较

1.php中的弱类型比较会使‘abc’ == 0为真,所以输入a=abc时,可得到flag1,如图所示。(abc可换成任意字符)。

2.is_numeric() 函数会判断如果是数字和数字字符串则返回 TRUE,否则返回 FALSE,且php中弱类型比较时,会使(‘1234a’ == 1234)为真,所以当输入a=abc&b=1235a,可得到flag2

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值