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

相关推荐
浩浩测试一下2 小时前
网络安全 --- 基于网络安全的 Linux 最敏感目录及文件利用指南
linux·安全·web安全
文sir.3 小时前
网络编程知识预备阶段
网络
youngerwang3 小时前
【嵌入式硬件测试之道连载之开篇语+第一章】
网络·功能测试·嵌入式硬件·深度学习·硬件架构·硬件工程·测试覆盖率
珹洺5 小时前
计算机网络:(二)计算机网络在我国发展与网络类别与性能 (附带图谱更好对比理解)
运维·服务器·网络·数据库·后端·计算机网络
网安导师小李5 小时前
Android Studio下载及安装和Gradle的配置(非常详细)从零基础入门到精通,看完这一篇就够了
android·运维·ide·人工智能·安全·web安全·android studio
前端wchen5 小时前
在 macOS 上轻松部署 Docker:详细安装与配置步骤
开发语言·网络·程序人生·macos·docker·mac·工具
安科瑞刘鸿鹏5 小时前
什么是故障电弧?故障电弧的危害该如何应对?
运维·网络·数据库·物联网
Koma_zhe6 小时前
【网站检测工具Web-Check】Web-Check本地部署与远程访问解决方案全面掌控网站状态
linux·服务器·网络
xcLeigh6 小时前
计算机网络基础:网络配置与管理
网络·计算机网络·php
charlie1145141917 小时前
计算机网络笔记再战——理解几个经典的协议HTTP章4
网络·笔记·网络协议·学习·计算机网络·http