php审计1-extract函数变量覆盖

php审计1-extract函数变量覆盖

这是一个关于php审计的栏目,本人也是初学者,分享一下网上的关于php审计的一些知识,学习一下php的语法,顺便记录一下学习过程。

以下是一个关于php审计ctf题

php 复制代码
<?php

$flag='flag.txt'; 
extract($_GET);
 if(isset($shiyan))
 { 
    $content=trim(file_get_contents($flag));
    if($shiyan==$content)
    { 
        echo'ctf{过关}'; 
    }
   else
   { 
    echo'Oh.no';
   } 
   }

?>

分析代码,先了解一下extract函数

定义和用法

extract() 函数从数组中将变量导入到当前的符号表。

该函数使用数组键名作为变量名,使用数组键值作为变量值。针对数组中的每个元素,将在当前符号表中创建对应的一个变量。

该函数返回成功设置的变量数目。

php 复制代码
<?php
$a = "Original";
$my_array = array("a" => "Cat","b" => "Dog", "c" => "Horse");
extract($my_array);
echo "\$a = $a; \$b = $b; \$c = $c";
?>

运行结果如下:

复制代码
$a = Cat; $b = Dog; $c = Horse 

就是将数组my_array对应的键(a,b,c)作为变量,来接收my_array对应的值(cat,Dog,Horse),如果其中的变量之前有赋值过,如a = "Original";,那么运行该函数后,会覆盖之前的值a="Cat"。

file_get_contents(flag)是获取flag中的路径字符串,读取该路径指定的文件内容,这里是读取文件flag.txt里面的内容。

trim函数是去掉字符串前后的空格。

这里的逻辑就是需要我们通过get方式,给变量shiyan赋值,让shiyan的值等于flag.txt里面的内容,这样才能通关。

但是我们并不知道flag.txt里面的值,这个题考的就是我们如何绕过验证过关。

刚才已经分析过,extract()函数可以将之前的变量的值覆盖,$flag虽然已经赋值了,但是程序是从上至下运行的,我们在url上给flag重新赋一个值,这样就覆盖原先的值,绕过验证:

但是给flag重新赋值后,file_get_contents(flag)就无法正常读取数据了,content应为空字符串,$shiyan的值也应为空,payload如下:

复制代码
php?shiyan=&flag=1

或者

复制代码
php?shiyan=&flag=

文件下载:

https://download.csdn.net/download/m0_53073183/90277339

相关推荐
饮长安千年月3 分钟前
Linux下的敏感目录
linux·网络·数据库·web安全
饮长安千年月1 小时前
一带一路暨金砖国家技能发展与技术创新大赛网络安全防护与治理-Win基线加固
网络安全·ctf·金砖国家技能发展与技术创新大赛·一带一路
饮长安千年月2 小时前
一带一路暨金砖国家技能发展与技术创新大赛网络安全防护与治理-Linux 安全基线加固
web安全·ctf·金砖国家技能发展与技术创新大赛·网络安全防护与治理
Chengbei112 小时前
内网渗透过程中搜寻指定文件内容Everything小工具
android·安全·网络安全·系统安全·密码学·网络攻击模型·安全架构
东方隐侠安全团队-千里2 小时前
圆桌会议复盘,WAF/HIDS建设如何走出告警泥潭?
web安全
饮长安千年月3 小时前
一带一路暨金砖国家技能发展与技术创新大赛网络安全防护与治理-Linux应急响应手册
linux·运维·web安全·ctf·应急响应
Rhystt4 小时前
furryCTF题解|Web方向|ezmd5、猫猫最后的复仇
android·前端·web安全·web
ShoreKiten4 小时前
ctfshowweb入门 SSTI模板注入专题保姆级教程(三)
web安全·ssti·ctfshow
Jerry_Gao9215 小时前
【CTF】【ez-upload】FrankenPHP(v1.11.1)Unicode路径解析漏洞
安全·php·ctf·frankenphp
сокол1 天前
【网安-Web渗透测试-漏洞系列】RCE漏洞
web安全·php