> 文章列表 > fileinclude(通过cookie赋值的文件包含)

fileinclude(通过cookie赋值的文件包含)

这个故事告诉我们,网络世界里的“宝藏”往往藏在不起眼的角落。就像这次通过cookie赋值进行文件包含的操作,看似简单的代码背后,却隐藏着获取flag的秘密。首先,问题的核心在于如何通过lan的值来包含目标文件flag.php。既然lan是从cookie中获取的,那么我们只需在cookie中传入language=php://filter/read=convert.base64-encode/resource=flag,就可以巧妙地绕过直接访问的限制,读取到目标文件的源码。

那么,为什么需要base64编码呢?因为直接读取文件可能会遇到权限问题,或者文件内容被直接执行,导致无法获取有效信息。而通过php://filter伪协议进行base64编码后,我们可以安全地获取文件内容,再通过解码得到“宝藏”——flag。这种手法不仅仅是技术上的巧妙,更是对文件包含漏洞的深刻理解。

最后,想提醒大家,网络安全的世界里,不仅要有好奇心,更要有安全意识。就像这次的操作,虽然成功找到了flag,但也暴露了系统的潜在漏洞。如果你是一个开发者,务必加强对文件包含漏洞的防护,避免被黑客“挖宝”。如果你是安全爱好者,那就要深入研究这些技巧,既是为了学习,也是为了帮助他人完善安全防护。

fileinclude(通过cookie赋值的文件包含)

打开链接,提示flag在flag.php里

 内容里还有一个路径/var/www/html/index.php,猜测flag.php应该也是在这个路径下

Ctrl+u查看网页源码

代码中发现 @include($lan.".php"); 

可知这里存在文件包

且包含与lan的值有关

由代码 $lan = $_COOKIE['language'];

可知lan的值是从cookie的值传上去的

所以这里我们对language赋值

if(!$lan)
{
    @setcookie("language","english");
    @include("english.php");
}

如果lan的值为0,则会设置一个新的cookie,这并不是我们想要的,我们要使传入的lan不为0,即cookie的赋值不能为空。

else
{
    @include($lan.".php");
}

当cookie不为空时,lan的值会和".php"拼起来

我们使用php://filter伪协议来读取flag.php的源码并进行base64编码输出

当它与包含函数结合时,php://filter流会被当作php文件执行

这里要注意我们指定的文件应该是flag而不是flag.php

(因为前面说了当cookie不为空时这个lan值会去和".php"进行拼接)

所以我们这里只需在cookie传入language=php://filter/read=convert.base64-encode/resource=flag

或者使用绝对路径

language=php://filter/read=convert.base64-encode/resource=/var/www/html/flag

读取到

PD9waHANCiRmbGFnPSJjeWJlcnBlYWNlezg5ZjcwNGMzNWIxMzNjODI1NDliMzAyYTFjMzM1Mjk5fSI7DQo/Pg==  

将输出进行base64解码

或者直接在hackbar进行base64decode

 得到

$flag="cyberpeace{89f704c35b133c82549b302a1c335299}