攻防世界18.fileclude

18.fileclude

image-20240327190700852

include函数:包含并执行变量或者文件。

if:是if语句用来判断。

isset:判断变量是否存在,值是否为NULL。

$_GET:接收表单提交数据,并把数据附加到url链接当中。

逻辑运算符&&:条件都满足才会执行。

关系运算符!:不、反的意思。

empty函数:只用来判断变量的值是否为NULL。

file_get_contents() 函数:把整个文件读入一个字符串中。

===:判断值是否相同并且判断值的类型是否相同。

else:条件都不满足的时候才会执行它。

die函数:输出内容并退出程序。

打开题目场景发现有if嵌套语句,存在flag.php,并且可以执行这个文件。

第一个if语句说的是如果file1和file2这两个变量都存在并且值不是空的,就会存放这两个数据的from表单,并将这个数据表单发送到url中。

第二个if语句说的是如果这两个变量都不为NULL,则返回true,并执行,但是前面加的有关系运算符!,所以说这两个值都是空的才会返回true,并执行。显而易见这两个变量都是存在的,但是值都是空的。???????

第三个if语句说的是file_get_contents() 函数包含file2变量,当满足file2的值等于hello ctf以及值的类型两者相同(类型是字符串),才会执行包含在include函数中的file1变量。(所以说这里咱们需要用到php://input绕过)

当这三个条件都不满足就会输出NONONO这个字符串。(显然可见这是不可能的)

解题:

image-20240327192231350

执行构造好的payload

http://61.147.171.105:57934/?file1=php://filter/convert.base64-encode/resource=flag.php&file2=data://text/plain,hello ctf

file1的写法是构造php伪协议的规则

?file1=php://filter/convert.base64-encode/resource=flag.php

关于后面跟的file2

file1=php://filter/read=convert.base64-encode/resource=flag.php 以Base64的格式读取文件flag.php中的语句;

file2=data://text/plain,hello ctf 以纯文本格式写入题目要求的内容hello ctf~

简单的通过post传参hello ctf是不可以的,下图中点击执行后并没有反应

image-20240327193109347

php://input可以读取没有处理过的POST数据

file_get_contents函数是打开文件读取的,所以我们这里需要利用php的data伪协议写入数据,也就是上面的写法

?file1=php://filter/convert.base64-encode/resource=flag.php&file2=data://text/plain,hello ctf

攻防世界中的文件包含漏洞(File Inclusion Vulnerability)是一种常见的web安全漏洞。它主要出现在web应用程序中,当应用程序动态包含用户可控制的文件时,如果没有正确过滤和验证用户输入,攻击者可以利用这个漏洞执行恶意代码或读取敏感文件。 文件包含漏洞分为本地文件包含(Local File Inclusion,LFI)和远程文件包含(Remote File Inclusion,RFI)两种类型。LFI漏洞发生在应用程序尝试包含本地文件时,而RFI漏洞则允许攻击者通过远程服务器包含外部文件。 为了防止文件包含漏洞,开发人员应该遵循以下最佳实践: 1. 永远不要信任用户输入。对用户提供的文件名、路径或URL进行严格的输入验证和过滤。 2. 使用白名单机制限制可包含的文件范围。只允许应用程序包含预定义的合法文件,而不是用户可控制的任意文件。 3. 避免使用动态包含,尽量使用静态包含。如果必须使用动态包含,确保只包含可信任的文件。 4. 对于本地文件包含漏洞,限制访问文件系统的权限。确保应用程序只能访问必要的文件,并将敏感文件放在可访问性受限的目录下。 5. 对于远程文件包含漏洞,禁止从远程服务器包含文件,或者使用安全的方法验证和限制远程文件的来源。 6. 定期更新和修补应用程序的漏洞,以确保及时修复已知的文件包含漏洞和其他安全问题。 这些是一些常见的防范文件包含漏洞的方法,但在实际开发过程中,还需要根据具体情况采取其他安全措施来保护应用程序免受攻击。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值