5.攻防世界simple_php

打开题目页面如下

看到是PHP代码,进行代码审计

php 复制代码
<?php
// 显示当前 PHP 文件的源代码
show_source(__FILE__);
// 从 HTTP GET 请求中获取名为 'a' 的参数的值,并将其赋值给变量 $a。
// @ 符号是错误抑制符,它会抑制可能出现的未定义索引警告,即如果请求中没有 'a' 参数,不会显示警告信息
$a = @$_GET['a'];
// 从 HTTP GET 请求中获取名为 'b' 的参数的值,并将其赋值给变量 $b
// 同样,@ 符号用于抑制可能出现的未定义索引警告
$b = @$_GET['b'];
// 检查变量 $a 是否等于 0 并且 $a 的值在布尔上下文中被视为真。
// 在 PHP 中,一些值(如空字符串、0、空数组等)在布尔上下文中被视为假。
if ($a == 0 and $a) {
    // 如果条件满足,输出变量 $flag1 的值。
    // 这个变量应该是在 "config.php" 文件中定义的。
    echo $flag1;
}

// 检查变量 $b 是否为数字或可以转换为数字的字符串。
// is_numeric() 函数会返回 true 如果变量是数字或者是可以转换为数字的字符串。
if (is_numeric($b)) {
    // 如果 $b 是数字,终止当前脚本的执行。
    exit();
}

// 检查变量 $b 是否大于 1234。
if ($b > 1234) {
    // 如果条件满足,输出变量 $flag2 的值。
    // 这个变量也应该是在 "config.php" 文件中定义的。
    echo $flag2;
}
?>

条件 a == 0 and a:

在 PHP 中,a == 0 会检查 a 的值是否等于 0,而 a 在布尔上下文中会被转换为布尔值进行判断。要同时满足 a == 0 和 a 在布尔上下文中为真,这看起来是矛盾的,但由于 PHP 的弱类型特性,可以通过传入特定的值来绕过。可以传入 a=0e123,在 PHP 的弱类型比较中,0e123 会被当作科学计数法的数字,其值为 0,但在布尔上下文中,它被视为真,从而满足条件输出 flag1。
条件 is_numeric(b) 和 b > 1234:

is_numeric() 函数用于检查变量是否为数字或可转换为数字的字符串。然而,攻击者可以利用 PHP 的类型转换特性绕过这个检查。例如,传入 b=1235a,is_numeric('1235a') 会返回 false,因为它不是一个纯粹的数字,但在比较 b \> 1234 时,PHP 会尝试将 b 转换为数字进行比较,1235a 会被转换为 1235,从而满足 b \> 1234 的条件,输出 flag2。

方法一:

分别满足条件传参

可知利用get传参,令$a等于0

得到了一半的flag

Cyberpeace{647E37C7627CC3E401

再利用第二个条件构造$b

得到另一半flag 9EC69324F66C7C}

组合最终得到flagCyberpeace{647E37C7627CC3E4019EC69324F66C7C}

方法二:

满足全部条件一块得到全部flag

由于在 PHP 中,a == 0 会检查 a 的值是否等于 0,而 a 在布尔上下文中会被转换为布尔值进行判断。要同时满足 a == 0 和 $a 在布尔上下文中为真,这看起来是矛盾的,但由于 PHP 的弱类型特性,可以通过传入特定的值来绕过。可以传入 a=0abc

最终得到flag

相关推荐
BingoGo1 天前
当你的 PHP 应用的 API 没有限流时会发生什么?
后端·php
JaguarJack1 天前
当你的 PHP 应用的 API 没有限流时会发生什么?
后端·php·服务端
cipher2 天前
ERC-4626 通胀攻击:DeFi 金库的"捐款陷阱"
前端·后端·安全
BingoGo2 天前
OpenSwoole 26.2.0 发布:支持 PHP 8.5、io_uring 后端及协程调试改进
后端·php
JaguarJack2 天前
OpenSwoole 26.2.0 发布:支持 PHP 8.5、io_uring 后端及协程调试改进
后端·php·服务端
JaguarJack3 天前
推荐 PHP 属性(Attributes) 简洁读取 API 扩展包
后端·php·服务端
BingoGo3 天前
推荐 PHP 属性(Attributes) 简洁读取 API 扩展包
php
JaguarJack4 天前
告别 Laravel 缓慢的 Blade!Livewire Blaze 来了,为你的 Laravel 性能提速
后端·php·laravel
郑州光合科技余经理5 天前
代码展示:PHP搭建海外版外卖系统源码解析
java·开发语言·前端·后端·系统架构·uni-app·php
一次旅行5 天前
网络安全总结
安全·web安全