文章目录
- 前言
- 一、BUU LFI COURSE
- 二、知识点
- PHP的危险函数
- 路径遍历攻击
- 解题感悟
前言
话不多说直接看题
一、BUU LFI COURSE
emmm什么提示也没给啊,那只能点开看一看线索了
okok咱们先分析一下这段php代码
<?php
/**
* Created by PhpStorm.
* User: jinzhao
* Date: 2019/7/9
* Time: 7:07 AM
*/
highlight_file(__FILE__);
if(isset($_GET['file'])) {
$str = $_GET['file'];
include $_GET['file'];
}
?>
highlight_file(FILE):
这行代码会输出当前文件的内容,并进行语法高亮。(这不是重点下面才是)
if(isset($_GET[‘file’])) { … }:
判断这段代码检查是否存在名为 file 的GET参数。如果存在,则将其值赋给变量 $str,并且通过 include 函数包含该文件。
说人话就是检测你这个链接是不是包含file,如果包含file就会把file的值传给str并且执行。
那是不是意味着我们可以通过修改file的值来为所欲为了~好!试一试。
先简单传个1康一康
/?file=1
ok现在已经知道大概路径了,咱们开始找flag
/?file=../flag
www目录下没有找到flag,继续
/?file=../../flag
var目录下也没有找到flag,再来
/?file=../../../flag
旺德发…原来在根目录下…那我为什么不直接从/flag开始试!这个故事告诉我们先找根目录…
小小flag,拿下!
二、知识点
PHP的危险函数
include
require
include_once
require_once
eval(执行字符串中的PHP代码)
system(执行系统命令)
exec(执行系统命令)
passthru(执行系统命令并输出结果)
shell_exec(执行系统命令并返回输出)
本题中的危险函数是include。前四个危险函数是重点,要有敏感度。
路径遍历攻击
../ 是一个相对路径符号,用于指代当前目录的上一级目录。
例:如果当前目录是 /var/www/html,那么
../ 就表示 /var/www。
../flag 表示打开上一级目录的flag文件
解题感悟
这道题提示其实也挺明显的,通过代码分析锁定include危险函数就直接相当于告诉你flag的位置,所以只需要在他的路径下找一找就好了。
补充:
对了有的新手朋友可能会问URL中/?file=../../../flag
中?的作用是什么。在URL中? 用于分隔URL的路径部分和查询字符串部分,而且查询字符串部分需要紧跟在 ? 之后,由一个或多个键值对组成,每个键值对用 = 分隔,多个键值对之间用 & 分隔。
那么又有朋友问了每个键值对用 = 分隔是什么意思呢?就拿本题举例子 file就是键 /flag就是值,中间要用=分隔,说人话就是把一个值传给键,把/flag传给file。