攻防世界 web simple_php

XX:php是世界上最好的语言!
我:看不懂啊…
攻防世界 web simple_php_第1张图片
(纯属娱乐,Java党勿喷)

题解部分

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;
}
?>

意思都能看明白:
flag被分成了两个部分。就是当a==0且a为真的时候输出flag1,当b>1234的时候输出flag2。这里b还有一个限制,is_numeric(b)表示b为数字或者数字字符串的时候,is_numeric的值为真,此时程序退出,也就是不能让b为数字或者数字字符串。

php中的弱类型比较

php中有两种比较符号
=== 会同时比较字符串的值和类型
== 会先将字符串换成相同类型,再作比较,属于弱类型比较

攻防世界 web simple_php_第2张图片

php一个数字和一个字符串进行比较或者进行运算时,PHP会把字符串转换成数字再进行比较。PHP转换的规则的是:若字符串以数字开头,则取开头数字作为转换结果,若无则输出,纯字母被转换为0。若字符串以字母开头,也输出0

也就是是说a=abcde(随便一个字母即可绕过第一个条件)
b的限制条件是不能让b为纯字符串,且b>1234,令b=2020wish
攻防世界 web simple_php_第3张图片
注:php中的URL后缀以/?开头,a和b之间使用&连接
Cyberpeace{647E37C7627CC3E4019EC69324F66C7C}

附:

URL中易出现的特殊字符

  • + 表示空格(在URL中不能使用空格)
  • / 分隔目录和子目录
  • ?分隔实际的URL和参数
  • # 表示书签
  • & URL指定参数间的分隔符
  • = URL中指定参数的值

你可能感兴趣的:(#,web)