[CTF] 攻防世界-simple_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;
}
?>

官方write-up

simple_php

[原理]

php中有两种比较符号

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

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

[目地]

掌握php的弱类型比较

[环境]

windows

[工具]

firefox

[步骤]

1.打开页面,进行代码审计,发现同时满足 $a==0 和 $a 时,显示flag1。

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

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

posted @ 2022-12-25 03:42  faf4r  阅读(78)  评论(0编辑  收藏  举报