本章目的
普及文件包含漏洞的原理以及常规文件包含漏洞
基础概念
文件包含
原理
文件包含漏洞产生的原因是在通过PHP函数引入文件时,由于传入的文件名没有经过合理的校验,从而操作了预想之外的文件,就可能导致意外的文件泄露甚至恶意的代码注入。几乎所有的脚本语言都会提供文件包含的功能,但文件包含漏洞在PHPWebApplication中居多,而在JSP、ASP、ASP.NET程序中却非常少,这是有些语言设计的醉端。在PHP中经常出现文件包含漏洞,但并不意味着其他语言不存在。
利用条件
(1)include等函数通过动态执行变量的方式引入需要包含的文件
(2)用户能控制该动态变量
PHP文件包含
文件包含函数
include():找不到被包含文件时会产生警告(E_WARNING);
include_once():与include()类似,代码已经被包含则不会再次包含
require():找不到被包含的文件时会产生致命错误(E COMPILE ERROR)
require_once():与require()类似,代码已经被包含则不会再次包含
文件包含分类
文件包含漏洞可以分为LFI(Local File Inclusion,本地文件包含)和RFI(Remote File Inclusion,远程文件包含)两种。而区分二者最简单的办法就是通过查看php.ini中是否开启了allow_url _include。如果开启就有可能包含远程文件。远程文件包含需要php.iniallow_url_include=on,allow_url_fopen=On。在php.ini中,allow_url_fopen默认一直是On,
而allow_url_include从php5.2之后就默认为Off。
文件包含漏洞利用
读取敏感文件(win)
http://127.0.0.1/include/03/index.php?page=C:\windows-version.txt
Vindows系统敏感信息:
C:\boot.ini
/查看系统版本
C:\windows\system32\inetsrv\MetaBase.xml
/IS配置文件
C:\windows\repair\sam
/windows初次安装的密码
C:\program Files\mysql\my.ini
/Mysql配置信息
C:\program Files\mysql\data\mysql\user.MYD
//Mysql root
C:\windows\php.ini
/php配置信息
Linux系统敏感信息:
/etc/passwd
/linux用户信息
/usr/local/app/apache2/conf/httpd.conf
/apache2配置文件
/usr/local/app/php5/lib/php.ini
/php配置文件
/etc/httpd/conf/httpd.conf
/apache配置文件
/etc/my.cnf
/Mysql配置文件
包含日志文件
找到Apache路径,利用包含漏洞包含日志文件获取Webshell。
Apache两个日志文件:access.log、error.log
很多时候,web服务器会将请求写入到日志文件中,比如说apache。在用户发起请求时,会
将请求写入access.log,当发生错误时将错误写入error.log。
日志默认路径
Apache
/etc/httpd/logs/access_log/或var/log/httpd/access log
Apache+Windows日志默认路径
XAMPP套件:xampp\apache\logs/access.log
phpStudy套件:phpStudy\Apache\logs/access.log
日志默认路径
IIS
C:WINDOWS\system32\Logfiles
IS7默认日志文件位置
%SystemDrive%\inetpub\logs\LogFiles
Nginx
nginx日志文件在用户安装目录的logs目录下如安装目录为/usr/local/nginx,则日志目录就是在/usr/local/nginx/Iogs里也可通过其配置文件nginx.conf,获取到日志的存在路径(/opt/nginx/logs/access.log)
session简介:cookie存在客户端,session存在服务端,cookie一般用来保存用户的账户密码,session一般用来跟踪会话。
利用场景;
一般存在登陆点位置注册用户
使用PHP封装伪协议
PHP有很多内置URL风格的封装协议,这类协议与fopen()、copy()、file_exists()和filesize()的文件系统函数所提供的功能类似。