文件包含漏洞面试题

您所在的位置:网站首页 远程文件包含getshell 文件包含漏洞面试题

文件包含漏洞面试题

2023-07-29 12:44| 来源: 网络整理| 查看: 265

———————————————— 版权声明:本文为 CSDN 博主「_PowerShell」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。 原文链接:https://blog.csdn.net/qq_51577576/article/details/128123224 转发博文:http://t.csdn.cn/bo3hT

什么是文件包含漏洞? 能讲一下文件包含漏洞的原理吗? 文件包含漏洞可以分为那两类,如何区分? 文件包含漏洞的分类 本地文件包含 远程文件包含 文件包含漏洞的危害 PHP 中的包含函数 JSP/Servlet 中的包含函数 ASP 中的包含函数 PHP 中 Require 和 Include 函数区别 文件包含利用思路 利用思路 配合文件上传漏洞 getshell 单独使用 getshell 假设攻击者已经知道某网站存在且仅存在本地文件包含漏洞,并且没有文件上传漏洞点及其他漏洞,如何 GetShell。 php 中要实现远程文件包含则需要对 php.ini 做什么操作? 常见的防范措施 设置白名单 过滤危险字符 设置文件目录 关闭危险配置 SESSION 文件常见的常见的路径有哪些? 在 php 站点中,如果我想使用 user-agent 插入 php 代码,如何进行包含? 包含思路 利用条件 Windows 特殊文件有哪些? linux 特殊文件有哪些? 文件包含漏洞的绕过方式有哪些? 文件后加入特殊字符绕过 省略后缀 双写绕过 利用目录解析漏洞 包含日志文件 伪协议包含 什么是文件包含漏洞? 12文件包含漏洞是一种最常见的漏洞类型,它会影响依赖于脚本运行时的web应用程序。当应用程序使用攻击者控制的变量构建可执行代码的路径时,文件包含漏洞会导致攻击者任意控制运行时执行的文件。如果一个文件包含这个漏洞,为了方便起见,经常在开发阶段就实施。由于它经常用于程序开发阶段,所以这就为后来的攻击埋下了伏笔并导致了各种基于文件的攻击。文件包含漏洞主要是程序员把一些公用的代码写在一个单独的文件中,然后使用其他文件进行包含调用,如果需要包含的文件使用硬编码,一般是不会出现安全问题,但是有时可能不确定需要包含哪些具体文件,所以就会采用变量的形式来传递需要包含的文件,但是在使用包含文件的过程中,未对包含的变量进行检查及过滤,导致外部提交的恶意数据作为变量进入到了文件包含的过程中,从而导致提交的恶意数据被执行。 能讲一下文件包含漏洞的原理吗? 12341、文件包含漏洞的产生原因是在PHP的函数引入文件时,由于传入的文件名没有经过合理的校验,从而操作了预想之外的文件,就可能导致意外的文件泄露甚至恶意的代码注入。2、最常见的就属于本地文件包含(Local File Inclusion)漏洞了。开发人员一般会把重复使用的函数写到单个文件中,需要使用某个函数时直接调用此文件,无需再次编写,这个文件调用的过程就是文件包含。如果对传入的文件名限制不严谨就会引发文件包含漏洞。3、几乎所有脚本语言都会提供文件包含的功能,但文件包含漏洞在PHP站点文件包含漏洞居多,而在JSP、ASP等站点文件包含漏洞非常少,甚至没有,这是有些语言设计的弊端。 文件包含漏洞可以分为那两类,如何区分? 文件包含漏洞的分类

文件包含漏洞分为本地文件包含 (Loacl File Inclusion,LFI) 和远程文件包含 (Remote File Inclusion,RFI)。二者有着相同的原理,但前者只能包含服务器上存在的文件,而后者可以包含远程服务器上的文件。

本地文件包含

本地文件包含就是通过浏览器包含 web 服务器上的文件,这种漏洞是因为浏览器包含文件时没有进行严格的过滤允许遍历目录的字符注入浏览器并执行。

远程文件包含 1远程文件包含就是允许攻击者包含一个远程的文件,一般是在远程服务器上预先设置好的脚本。 此漏洞是因为浏览器对用户的输入没有进行检查,导致不同程度的信息泄露、拒绝服务攻击 甚至在目标服务器上执行代码。 文件包含漏洞的危害

1、通过文件包含漏洞,可以读取系统中的敏感文件,源代码文件等,如密码文件,通过对密码文件进行暴力破解。 2、若破解成功则可获取操作系统的用户账户,甚至可通过开放的远程连接服务进行连接控制。 3、不管是本地文件包含还是远程文件包含,文件包含漏洞还可能导致执行任意代码。 4、简单来说就是可能造成敏感文件泄露,获取 webs hell,任意命令执行。 5、导致文件包含的函数

PHP 中的包含函数 1234567include()include_once()require()re-quire_once()fopen()readfile()...... JSP/Servlet 中的包含函数 123ava.io.File()java.io.Fil-eReader()...... ASP 中的包含函数 12include fileinclude virtual PHP 中 Require 和 Include 函数区别

Require ():如果里面有一些错误就会停止运行。 Include ():有错误的话会产生警告信息,同时会接着往下执行。

文件包含利用思路 利用思路

一般来说文件包含漏洞会配合文件上传漏洞进行利用,如果不存在文件上传漏洞的情况下我们可以去获取一些敏感信息,或者利用日志文件记录报错的方法,来往日志文件中 “写入” 一句话木马

配合文件上传漏洞 getshell

1. 制作一个图片木马,通过文件上传漏洞上传 2. 通过文件包含漏洞对该图片木马进行包含 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 里的封装协议包含文件。

常见的防范措施

任意文件包含漏洞的主要出现在能够解析处理脚本文件的函数上,没有对输入的变量进行过滤,导致任意文件包含,进而导致恶意代码执行。在开发处理这类功能函数上,一定要遵循编程规范;在代码核心处,对变量进行过滤限制,设置文件路径或者白名单,避免执行任意文件包含。

设置白名单

代码在进行文件包含时,如果文件名可以确定,可以设置白名单对传入的参数进行比较。

过滤危险字符

由于 Include/Require 可以对 PHP Wrapper 形式的地址进行包含执行(需要配置 php.ini),在 Linux 环境中可以通过”…/…/” 的形式进行目录绕过,所以需要判断文件名称是否为合法的 PHP 文件。

设置文件目录

PHP 配置文件中有 open_basedir 选项可以设置用户需要执行的文件目录,如果设置目录的话,PHP 仅仅在该目录内搜索文件。

关闭危险配置

PHP 配置中的 allow_url_include 选项如果打开,PHP 会通过 Include/Require 进行远程文件包含,由于远程文件的不可信任性及不确定性,在开发中禁止打开此选项,PHP 默认是关闭的。

SESSION 文件常见的常见的路径有哪些? 1234/var/lib/php/sess_PHPSESSID/var/lib/php/sess_PHPSESSID/tmp/sess_PHPSESSID/tmp/sessions/sess_PHPSESSID 在 php 站点中,如果我想使用 user-agent 插入 php 代码,如何进行包含?

包含 environ 文件即可,常见路径为 /pros/self/environ。

包含思路

proc/self/environ 中会保存 user-agent 头,如果在 user-agent 中插入 php 代码,则 php 代码会被写入到 environ 中,之后再包含它,就可以完成包含 user-agent 插入的 php 代码。

利用条件

php 以 cgi 方式运行,这样 environ 才会保持 UA 头。 environ 文件存储位置已知,且 environ 文件可读。

Windows 特殊文件有哪些? 1234567C:\boot.iniC:\windows\System32\inetsrv\MetaBas.xmlC:\windows\repair\samC:\program Files\mysql\my.iniC:\program Files\mysql\data\mysql\user.MYDc\windows\php.iniC\windows\my.ini linux 特殊文件有哪些? 12345678910111213/root/.ssh/authorized_keys/root/.ssh/id_rsa/root/.ssh/id_ras.keystore/root/.ssh/known_hosts/etc/passwd/etc/shadow/etc/my.cnf/etc/my.cnf/etc/httpd/conf/httpd.conf/root/.bash_history/root/.mysql_history/proc/self/fd/fd*/proc/mounts/porc/config.gz 文件包含漏洞的绕过方式有哪些? 文件后加入特殊字符绕过

利用工具,将访问路径后加入 %00,可以绕过后缀检查。 或者后面加一些特殊字符例如 斜杠 点之类。

省略后缀

有些程序会将传入参数指引到其他位置,或者修改后缀名,先访问文件判断,例如不需要写后缀名。

双写绕过

当写入文件时,发现删除某些特殊字符,我们可以判断是删除了其中字符,例如”php",“…/”,只需再增加一个使其删除后得到我们需要的,需要注意绝对路径与相对路径。

利用目录解析漏洞

如中间件是 nginx 时,我们可以利用 nginx 目录解析,当我们只能上传.jpg 文件时,我们无法利用,只能原文读取出来,但是发现在 shell.jpg 后加 /xxx.php, 他就能以 php 方式读取文件,这就是目录解析漏洞。

包含日志文件

当我们访问不存在目录时,例如:http://lfi.cn/LFI-1/ 它会将错误路径保存在日志中。不同的中间件有不同的路径。 日志文件名字为 access_log,access.log,error.log,Logfiles 等。

伪协议包含

当不能直接访问目录下文件时,可以选择利用伪协议来访问文件,前提是 allow_url_fopen 和 allow_url_include 都是打开状态。

123456789101.page=file://[绝对路径]当页面有file1,file2……后台会判断是否已file开头,我们可以使用此协议。2.php:// 访问各个输入/输出流(I/O streams)php://filter用于读取源码php://input用于执行php代码,或者直接将代码写入执行。3.zip://[绝对路径], bzip2://[绝对路径], zlib://[绝对路径]协议,都属于压缩楼,访问压缩文件中的子文件,不需要指定后缀phar:// 可以查找指定压缩包内的文件,相对路径与绝对路径都可以写4.data: text/plain,与input类似,当我们想查看源代码时,可以将其先转换为base64文件在传到页面上就不会执行PHP了5.http协议也可以传入外部链接,自己服务器的钓鱼网站


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3