题目: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技能和知识点。