原理:
在通过服务器脚本的函数引入文件时,由于传入的文件名没有经过合理的校验,从而操作了预想之外的文件,导致意外的文件泄露、恶意代码的注入等。
文件包含分为两种,一种为本地文件包含,一种为远程文件包含,此篇记录本地文件包含。本地文件包含(Local File Include),简称 LFI。
文件包含在 php 中,涉及到的危险函数有四个,分别是 include()、include_once()、require()、require_once()。
区别如下:
include:包含并运行指定的文件,包含文件发生错误时,程序警告,但会继续执行。
include_once:和 include 类似,不同处在于 include_once 会检查这个文件是否已经被导入,如果已导入,下文便不会再导入,直面 once 理解就是只导入一次。
require:包含并运行指定的文件,包含文件发生错误时,程序直接终止执行。
require_once:和 require 类似,不同处在于 require_once 只导入一次。
准备:
1.php环境
2.phpMyAdmin v4.8.1的环境 https://www.phpmyadmin.net/files/4.8.1/
3.在phpMyAdmin的根目录下加入1.text 内容<?php phpinfo(); ?>
开始试验
1.通过审计我们找到这个
![](https://img.haomeiwen.com/i15793902/e6324774f181307d.png)
2.找到原代码(并分析)
![](https://img.haomeiwen.com/i15793902/26aa5c8ff2b106bc.png)
![](https://img.haomeiwen.com/i15793902/87c8deba173da560.png)
![](https://img.haomeiwen.com/i15793902/b99bb2613ed0319f.png)
3.进攻方式
在链接中输入 index.php?target=db_search.php%253f/../1.txt (db_search.php可以是数组中任意一个值)
得到
![](https://img.haomeiwen.com/i15793902/d5d47c6398234736.png)
4.说说index.php?target=db_search.php%253f/../1.txt 的执行流程
1>首先在index.php中进行判断最后走到里面
![](https://img.haomeiwen.com/i15793902/6bcebb99ed81d9c1.png)
2>分析过程
![](https://img.haomeiwen.com/i15793902/899b4f2ac60febff.png)
开头摘与 https://blog.csdn.net/fageweiketang/article/details/80699051
网友评论