|
发表于 2025-3-23 20:06:56
|
显示全部楼层
HTML 部分:创建了一个表单,通过post方法提交,包含一个文本输入框和提交按钮,提示在fun中找flag。
PHP 部分:
highlight_file(__FILE__);:显示当前 PHP 文件的内容,便于查看代码。
error_reporting(0);:关闭错误报告。
ini_set('open_basedir', '/var/www/html:/tmp');:设置文件访问目录限制。
$file = 'function.php';:指定要包含的文件。
$func = isset($_GET['function'])?$_GET['function']:'filters';:从GET参数中获取function的值,若不存在则为filters。
call_user_func($func,$_GET);:调用$func函数,并传入$_GET参数。
后面的if语句判断$file中是否包含function.php,若不包含则输出提示并退出,否则包含该文件。
解题步骤
利用call_user_func函数的特性,尝试构造恶意参数。因为代码限制了文件包含必须是function.php,所以不能直接包含其他文件获取flag。
这里可以利用 PHP 的一些内置函数来实现目的。例如,可以尝试使用assert函数(在 PHP 低版本中可用),构造GET请求参数function=assert&_GET[0]=system('cat /var/www/html/function.php') (假设flag在function.php中)。通过assert执行系统命令查看指定文件内容。
发送构造好的请求,查看返回结果,从中找到flag。
不同环境和题目设定可能会有细微差别,若上述方法不行,可以进一步分析function.php可能存在的逻辑,尝试其他方法,比如利用show_source等函数查看文件内容 。 |
|