01、题目分析
程序开发人员通常会把可重复使用的函数写到单个文件中,在使用某些函数时,
直接调用此文件,而无须再次编写,这种调用文件的过程一般被称为文件包含。
在包含文件的过程中,如果文件能进行控制,则存储文件包含漏洞
02、文件包含
在这一题中,采用了session验证,根据提示,我们就可以发现,这里有一个写入功能,我们写入的语句会被存储到服务器上当作session
因此我们可以尝试将php语句传入到session文件中
http://www.bdrwmy.cn:8001/fi/03.php?iwebsec=<?php phpinfo();?>
这样php代码就被存储到了session中,接下来我们要做的就是访问session文件,但是本题中并没有文件包含,无法访问session怎么办,那么只能回到第一题去访问session了,但是在这之前,先f12获取phpsessid,注意,每个人的phpsessid是不相同的!
251md2g1dokp46usgbk711rpm4
在linux服务器中,session的默认目录一般为/var/lib/php/session/
那么我们就去第一题访问session
http://www.bdrwmy.cn:8001/fi/01.php?filename=/var/lib/php/session/sess_251md2g1dokp46usgbk711rpm4
可以发现执行了
虽然这一题和第一题都是在01.php上执行的phpinfo()代码,但是需要注意的是,第一关的phpinfo()是没得选,他本机文件中只有这个包含phpinfo()的代码,但是这一关中,我们实现了构造文件内容,不仅仅可以把文件内容写成phpinfo(),还可以直接放进去木马去执行
03、源码分析
<?php
if(isset($_GET['iwebsec'])){ // 检查是否设置了 'iwebsec' 参数
session_start(); // 启动会话,以便使用会话变量
$iwebsec=$_GET['iwebsec']; // 获取 'iwebsec' 参数的值,并赋给 $iwebsec 变量
$_SESSION["username"]=$iwebsec; // 将 $iwebsec 变量的值存储到名为 "username" 的会话变量中
echo 'SESSION["username"]的内容是'. $_SESSION['username']; // 输出会话变量 "username" 的值
}else{
exit(); // 如果未设置 'iwebsec' 参数,则退出脚本执行
}
?>
标签:文件,包含,03,phpinfo,session,php
From: https://www.cnblogs.com/bdrwmy/p/17643704.html