面试笔记6--文件包含漏洞
目录
前言
一、原理和危害
1.原理
2.危害
二、分类
三、防御措施
四、导致的文件包含函数
五、PHP中Require和Include函数的区别
六、文件包含漏洞的利用思路
七、假设攻击者已经知道某网站存在且仅存在本地文件包含漏洞,并且没有文件上传漏洞及其他漏洞,如何getshell
八、php中要实现远程文件包含则需要对php.ini做什么操作
九、在php站点中,如果想使用user-agent插入php代码,如何进行包含
十、windows特殊文件有哪些
十一、linux特殊文件有哪些
十二、文件包含漏洞的绕过方式有哪些
十三、常见的日志存放路径
总结
前言
本文记录了博主文件包含漏洞的面试笔记。
一、原理和危害
1.原理
文件包含漏洞的原理:由于未经过滤或验证的用户输入被直接包含到动态页面中,使得攻击者可以利用恶意输入来读取或执行服务器上的文件。
2.危害
文件包含漏洞的危害主要有:敏感信息泄露、远程文件执行、服务器拒绝服务等。
二、分类
文件包含漏洞可以分为本地文件包含和远程文件包含:
(1)本地文件包含是指:攻击者利用该漏洞,将恶意的本地文件包含到页面中,从而执行恶意代码或读取敏感文件。攻击者通常利用URL参数或其他用户可控制的输入来触发漏洞。
(2)远程文件包含允许攻击者包含远程服务器上的文件,攻击者会传递一些包含恶意代码的URL。
三、防御措施
参考链接:文件包含漏洞面试题 | blog小窝
任意文件包含漏洞主要出现在能够解析处理脚本文件的函数上,没有对输入的变量进行过滤,导致任意文件包含,进而导致恶意代码执行。
(1)设置白名单:代码在进行文件包含时,如果文件名可以确定,可以设置白名单对传入的参数进行比较。
(2)过滤危险字符:由于Include、Require可以对PHP Wrapper形式的地址进行包含执行需要配置(php.ini),在Linux环境中可以通过"../../"的形式进行目录绕过,所以需要判断文件名称是否为合法的PHP文件。
(3)设置文件目录:PHP配置文件中有open_basedir选项可以设置用户需要执行的文件目录,如果设置目录的话,php仅仅在该目录内搜索文件。
(4)关闭危险配置:PHP配置中的allow_url_include选项如果打开,php会通过Include、Require进行远程文件包含。由于远程文件的不可信任及不确定性,在开发中禁止打开此选项,php默认是关闭的。
四、导致的文件包含函数
PHP:include(),include_once(),require(),require_once(),fopen(),readfile()
JSP:ava.io.File(),java.io.FileReader()
ASP:include file,include virtual
五、PHP中Require和Include函数的区别
Require():如果里面有一些错误就会停止运行;
Include():有错误的话会产生告警信息,同时会接着往下执行。
六、文件包含漏洞的利用思路
(1)利用思路:一般来说文件包含漏洞会配合文件上传漏洞进行利用。如果不存在文件上传漏洞的情况,可以尝试获取一些敏感信息,或者利用日志文件记录报错的方法,往日志文件中写入一句话木马。
(2)配合文件上传漏洞getshell
制作一个图片马,通过文件上传漏洞上传;
通过文件包含漏洞对该图片马进行包含;
获取执行结果。
(3)单独使用getshell
由于没有存在文件上传点,而又需要服务器本地有个文件存在一句话木马代码。这时可以考虑日志文件记录报错的方法,往日志文件中写入一句话木马,然后再利用文件包含漏洞来执行日志文件中的一句话木马。
七、假设攻击者已经知道某网站存在且仅存在本地文件包含漏洞,并且没有文件上传漏洞及其他漏洞,如何getshell
由于没有存在文件上传点,而又需要服务器本地有个文件存在一句话木马代码。这时可以考虑日志文件记录报错的方法,往日志文件中写入一句话木马,然后再利用文件包含漏洞来执行日志文件中的一句话木马。
八、php中要实现远程文件包含则需要对php.ini做什么操作
(1)需要确认allow_url_fopen和allow_url_include的值都为On,也就是打开状态;
(2)如果不是打开状态,可以设置未打开并且完成之后需要重启才能生效;
(3)allow_url_fopen:默认值是ON。允许url里的封装协议访问文件;
(4)allow_url_include:默认值是OFF。不允许包含url里的封装协议包含文件。
九、在php站点中,如果想使用user-agent插入php代码,如何进行包含
包含environ文件即可,常见路径为/proc/self/environ
(1)包含思路:
/proc/self/environ中会保存user-agent头,如果user-agent中插入php代码,则php代码会被写入到environ中,之后再包含它,就可以完成包含user-agent插入的php代码。
(2)利用条件:
php以cgi方式运行,这样environ才会保持UA头;
environ文件存储位置已知,且environ文件可读。
十、windows特殊文件有哪些
C:\boot.ini #Windows的启动配置文件
C:\windows\System32\inetsrv\MetaBas.xml #IIS的配置文件
C:\windows\repair\samWindows #操作系统中存储用户账户信息的备份文件
C:\program Files\mysql\my.ini #MySQL 数据库的配置文件
C:\program Files\mysql\data\mysql\user.MYD #MySQL 数据库中用户表的数据文件
C:\windows\php.ini #PHP 的配置文件
C:\windows\my.ini #MySQL 的配置文件
十一、linux特殊文件有哪些
/root/.ssh/authorized_keys #用于存储授权的 SSH 公钥
/root/.ssh/id_rsa #用户的 SSH 私钥文件
/root/.ssh/id_rsa.keystore #与 SSH 私钥相关的密钥存储文件
/root/.ssh/known_hosts #用户已知的远程主机的公钥信息
/etc/passwdLinux #系统的用户账户信息文件
/etc/shadow #存储了系统用户的密码哈希值以及与密码相关的其他信息
/etc/my.cnf #MySQL 数据库的配置文件
/etc/https/conf/https.conf #HTTPS 服务的配置文件
/root/.bash_history #记录了用户在命令行中执行过的命令历史记录
/root/.mysql_history #记录了用户在 MySQL 客户端中执行过的 SQL 语句历史记录
/proc/self/fd/fd* #用于查看和操作进程的文件描述符
/proc/mounts/proc/config.gzLinux #内核配置文件的压缩版本
十二、文件包含漏洞的绕过方式有哪些
参考链接:【文件包含漏洞】——文件包含漏洞进阶_文件包含漏洞绕过_文件包含攻击的中级高级是如何防护的实验中是如何绕过的-CSDN博客
(1)本地文件包含:
%00截断绕过(在低版本中php读取文件名时认为%00是终止符,对于%00后面的内容就会失效。例如1.png%00,%00后面的.php被注释掉,成功绕过后缀检测机制)
路径长度截断(windows下目录最大长度为256字节,超出的部分会被丢弃;LInux下目录最大长度为4096字节,超出的部分也会被丢弃。)(1.png./././././....,使用长字符串进行截断,使后面拼接的内容失效)
点号截断(windows中点号长于256,超出部分会被丢掉;linux中点号长于4096,超出部分也会被丢掉)(1.png...............)
双写绕过(目标服务器对传入的参数的关键字符替换为空,这时可以通过对关键字符双写进行绕过)
大小写混合绕过
伪协议绕过(查看参考链接)
(2)远程文件包含:
问号绕过(“1.txt?”,目标机器成功解析远端服务器的1.txt为php脚本)
井号绕过("1.txt%23",这里需要对井号进行url编码)
其他绕过方式(查看参考链接)
十三、常见的日志存放路径
参考链接:网安面经之文件包含漏洞_文件包含漏洞面试-CSDN博客
(1)Apache
windows:
apache安装目录/logs/access.log或者error.log
Linux:
/var/log/apache/access.log或者error.log
/var/log/apache2/access.log或者error.log
/etc/https/logs/access.log或者error.log
(2)Nginx
windows:
nginx安装目录/logs/access.log或者error.log
Linux:
/var/log/nginx/access.log或者error.log
(3)IIS
iis6.0:
C:\windows\system32\LogFiles
iis7.5:
%SystemDrive%\inetpub\Logs\LogFiles
总结
以上为博主的文件包含漏洞的面试笔记整理,持续更新。