DVWA靶场笔记之文件包含原理
文件包含:
服务器执行php文件时,能够通过包含函数加载另一个文件中的php代码,当被包含的文件中存在木马时,也就意味着木马程序会在服务器上加载执行
在php中文件包含函数分为四个:
require(),require_once(),include(),include_once()
其中require和include的区别是,require出现错误的时候,会直接报错并退出程序的执行,而include包含的过程中如果出现错误,会抛出一个警告,程序继续正常运行。
Request_once和include_once则只包含一次
不管他们里面包含的是什么,图片也好,文本也好,都会被函数当成php代码解析,所以文件包含运用不当回给服务器带来极大的威胁。
文件文件包含常常需要用到一些php伪协议:
1、 php://filter 可以对文件进行base64的形式读取
需要allow_url_include=on
常用语法;
?file=php://filter/convert.base-encode/resource=xxx.php
2、 php://input可以进行代码执行,写入木马,利用post传参
需要allow_url_fopen和allow_url_include=on
3、 file://可以读取系统文件
4、 data://伪协议 数据流封装器
利用了流的概念,和php://input类似,同样可以造成代码执行
?file=data:text/plain,<?php phpinfo()?>
?file=data://text/plain;base64,执行代码base64加密后
5、 phar://这个协议不管后缀是什么,都会当做压缩包来解压,php>=5.3.0压缩包需要 zip协议压缩,rar不行,首先先准备一句话木马,然后把他压缩,在修改成.jpg,然后利用phcar解析,他会把.jpg解压成.php
6、 zip://可以访问压缩文件中的子文件,且不需要指定后缀名,先准备一个txt文件,里面的内容为<?php eval($_REQUEST[‘CMD’]);?>,然后进行压缩成test.zip,上传www目录下面然后用zip伪协议进行命令执行
格式:zip://压缩包名#压缩包子文件名
**文件包含又分为两类:**本地问价包含和远程文件包含(可能需要用)
远程文件包含还需要php配置文件中打开两个配置,但是从php5.2开始allow_url
_include默认为off
allow_url_fopen = on
allow_url_include = on
例子:
比如我们看个dvwa的靶场打开这个文件包含漏洞之后,查看一下源码(这是一个好习惯)
发现这个代码没有任何过滤机制,就可能会导致任意的进行本地文件包含
直接构造语句
…/…/…/…/1.txt(这里是直接在根目录下创建一个txt文件)
直接获得了
根目录的txt文件里面的内容
文件包含修复建议:
过滤点一些危险字符(…/ ./)
配置php.ini文件(关闭掉allow_url_fopen和allow_url_include)
设置一些白名单
总结:文件包含会常常与文件上传联系在一起使用,想认识每一个漏洞,最好的方式就是从他的源码开始了解。