BUU LFI COURSE 1 1学习解题

题目:BUU LFI COURSE 1

1

解题思路:

进行代码审计

<?php
/**
 * Created by PhpStorm.
 * User: jinzhao
 * Date: 2019/7/9
 * Time: 7:07 AM
 */

highlight_file(__FILE__);  #在页面显示PHP脚本内容,便于调试

if(isset($_GET['file'])) {   #第一行代码检测是否通过get方法接收到名为file的参数
    $str = $_GET['file'];	#定义变量file是字符串

    include $_GET['file']; #通过include函数,将file传递进来的参数当做PHP代码执行。
}

解题过程:本体考查文件包含漏洞的简单利用。

漏洞原理为include函数会将接收参数所指定的文件加载进来并执行。故此可以利用该函数来获取服务器文件信息,或者执行PHP代码。
在这里插入图片描述
传递参数file=flag,报错
Warning: include(flag): failed to open stream: No such file or directory in /var/www/html/index.php on line 14
报错解释:

这个警告信息表明在尝试使用include函数包含一个名为flag的文件时失败了,因为在指定的路径下没有找到这个文件或目录。

Warning: include(): Failed opening ‘flag’ for inclusion (include_path=‘.:/usr/local/lib/php’) in /var/www/html/index.php on line 14
这个警告信息表明在尝试包含(include)一个名为 ‘flag’ 的文件时失败了。错误发生在你的 PHP 文件 /var/www/html/index.php 的第 14 行。
带了绝对路劲,并且访问成功了,也没有过滤掉flag关键字。这个目录下没有,随后又试了flag.php flag.txt都没有访问成功。
试试常见敏感目录,到根目录下看看有没有,构造payload:file=…/…/…/…/flag
成功获取flag=flag{2a77f0f2-df71-49c6-8024-d20acf9b53d0}

还是不求甚解,就去搜了解题思路发现2篇文章:
1.https://www.jianshu.com/p/ef0ed116a8be
2.https://blog.youkuaiyun.com/weixin_42751456/article/details/88735456
按照描述,本php程序,执行在/var/www/html/目录下,如果要访问上层目录,需通过…/来实现。但实际上,file=/etc/passwd file参数赋值绝对路径也可以直接访问文件,通过构造file=/file 直接获取到flag。
在这里插入图片描述

收获和心得:知道了include文件包含漏洞要验证是否存在漏洞,学习了好几种include漏洞利用方式,比如此题还可以使用PHP伪协议进行解答,如下在这里插入图片描述

ZmxhZ3syYTc3ZjBmMi1kZjcxLTQ5YzYtODAyNC1kMjBhY2Y5YjUzZDB9Cg==

进行base64解密得到flag=flag{2a77f0f2-df71-49c6-8024-d20acf9b53d0}
所以CTF解题思路千变万化,主要的是要对常见的利用方法及使用参数和使用场景进行归纳总结,
以备不时之需。
(1)今天学到了相对路径如何访问上层目录 …/的方法
(2)学习到了php://filter/convert.base64-encode/resource=文件路径

在 PHP 中,convert.base64-encode 是 php://filter 流的一个过滤器,它允许你在读取文件或数据流时,将其内容实时编码为 Base64。这种过滤器非常有用,因为它可以让你在不需要将整个文件内容加载到内存中的情况下,对文件进行 Base64 编码。
当你使用 file_get_contents 或类似函数,并指定 php://filter/convert.base64-encode/resource=文件路径 作为参数时,PHP 会自动打开指定的文件,读取其内容,并在读取过程中将其编码为Base64。这样,你得到的结果就是文件的 Base64 编码表示。
在使用 php://filter/convert.base64-encode/resource=文件路径 时,‌文件路径可以是绝对路径也可以是相对路径‌。
PHP 会根据提供的路径来尝试打开文件,无论这个路径是绝对的还是相对的。如果给出的是相对路径,PHP 会基于当前脚本的执行目录(通常是包含该脚本的目录,但可以通过 chdir() 函数改变)来解析这个路径。如果给出的是绝对路径,PHP 会直接尝试打开该路径指定的文件。

使用php://input函数尝试了几次没成功,但是得到了一个400 bad requests,也算是一种学习精力吧,后面还是多做题,多写笔记,来一个一个慢慢熟悉,CTF技能和知识点。

<think>好的,我现在需要处理用户关于BUU LFI COURSE 1的问题。首先,用户希望找到与该课程相关的资料或内容,特别是第一单元的内容。根据提供的引用信息,我需要整理已有的信息并生成相关的解答和相关问题。 首先,我需要回顾所有相关的引用。引用[2]、[3]、[4]、[5]都涉及BUU LFI COURSE 1的内容。根据这些引用,可以总结出该课程主要涉及PHP文件包含漏洞的利用。用户提到的Level 1 Unit 1可能指的是这个课程的第一个挑战或实验,其中涉及通过文件包含漏洞获取flag。 接下来,我需要确保回答符合用户的要求,即结构清晰、步骤详细,并且引用正确的资料。根据引用[2],题目开局给出源代码,存在文件包含漏洞,通过传递file参数来包含文件。引用[3]和[5]提到这是一个PHP文件,代码简单,存在文件包含漏洞,需要利用路径遍历来访问上级目录中的flag文件。引用[4]和[5]指出需要退到根目录,可能需要多次使用../来访问flag,比如三次或四次。 在回答中,我需要分步骤说明如何解决这个问题,包括漏洞分析、利用方法、路径遍历的具体操作以及最终的payload示例。同时,需要确保引用正确,每个引用在适当的位置标注。例如,在提到路径遍历时,引用[2]和[5]都提到了使用../,所以需要注明这些来源。 另外,用户可能希望了解相关的扩展知识,例如防御文件包含漏洞的方法,或者该漏洞的实际应用场景,所以生成的相关问题应该覆盖这些方面。例如,如何防御文件包含漏洞,或者文件包含漏洞的其他利用方式。 最后,需要检查所有LaTeX格式是否正确,行内公式用$...$,独立公式用$$...$$,但根据当前问题内容,可能不需要数学公式,所以这部分可能不需要处理。但如果有变量或路径表达式,需要正确使用格式。例如,路径中的../可能需要使用代码块或引号,但根据示例,代码块应使用反引号包裹。 总结回答的结构应该是: 1. 漏洞背景和题目描述 2. 漏洞分析步骤 3. 利用方法的具体步骤 4. 最终Payload示例 5. 引用标注 6. 相关问题生成 现在需要将这些整理成自然的中文回答,确保引用正确,结构清晰,并且符合用户的要求。</think>### BUU LFI COURSE 1 第一单元内容解析 #### 1. 漏洞背景与题目描述 该课程实验聚焦于**PHP文件包含漏洞**的利用。题目初始界面给出PHP源代码,要求通过传递参数`file`触发文件包含漏洞,最终获取隐藏的flag[^3][^5]。 #### 2. 漏洞分析步骤 1. **代码审计** 题目PHP代码结构简单,核心逻辑如下: ```php <?php if(isset($_GET['file'])){ include $_GET['file']; } ``` 此处未对用户输入的`file`参数进行过滤,导致可加载任意文件(包括远程文件或路径遍历)[^3][^4]。 2. **错误信息利用** 直接访问`?file=flag`会报错,提示文件不存在,说明flag不在当前目录,需通过路径遍历向上级目录查找[^2]。 #### 3. 漏洞利用方法 1. **路径遍历攻击** 使用`../`回退到根目录,尝试加载`flag`文件: ```url http://靶场URL/?file=../../../flag ``` 根据实际环境,可能需要调整`../`的数量(如3-4次)才能定位到根目录[^5]。 2. **最终Payload示例** 成功获取flag的请求如下: ```url http://b6ed0fd6.../?file=../../../flag ``` 返回结果包含flag:`flag{59132e77-fb4e-455f-b7e7-21ea02be8bd8}`。 #### 4. 关键知识点总结 - **文件包含漏洞类型**:本地文件包含(LFI)与远程文件包含(RFI)。 - **防御方法**:对输入参数进行白名单校验,或使用`basename()`函数过滤路径。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值