任意文件读取漏洞

这篇具有很好参考价值的文章主要介绍了任意文件读取漏洞。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

任意文件读取漏洞

漏洞概念及成因

任意文件读取漏洞(Arbitrary File Read Vulnerability)是指攻击者可以通过web应用程序读取任意文件而不受访问控制限制的漏洞。这种漏洞可能导致敏感信息泄露、系统崩溃等问题。

攻击者可以利用任意文件读取漏洞访问服务器上的任意文件,包括密码文件、配置文件等,从而获取系统权限和敏感信息。此外,攻击者还可以利用该漏洞读取应用程序中的敏感数据,如数据库凭据、API密钥等。

任意文件读取漏洞通常是由于未正确验证用户输入所导致的。攻击者可以通过构造特殊的请求参数来绕过应用程序的访问控制,从而访问任意文件。例如,攻击者可以通过修改URL路径或添加特殊字符来访问非预期的文件。

PHP语言相关漏洞

  • 通过网页页面信息进行挖掘

我们可以通过查看网页源代码查看是否有以下PHP中任意文件漏洞常见触发点进行挖掘,如果$filename没有经过校验或者校验不合格,用户就可控制变量读取任意文件,如/etc/passwd、/index.php、/config.ini等。

标准库函数:

fopen();//打开一个文件或 URL。
file();//把整个文件读入一个数组中。数组中的每个元素都是文件中相应的一行,包括换行符在内。
file_get_contents();//把整个文件读入一个字符串中。

文件读取函数等:

fread();//语法 string fread(int handle,int length);fread() 从文件指针 handle 读取最多 length 个字节。
fgets();//语法:string fgets( int handle [,int length] );fgets() 从 handle 指向的文件中读取一行并返回长度最多为 length-1 字节的字符串。

文件包含相关的函数等:

include();
require();
include_once();
require_once();

读文件的执行系统命令:

system();
exec();
shell_exec();
passthru();

PHP扩展也可以读取文件的函数:

php-curl扩展(文件内容作为HTTP body)涉及文件存取的库(如数据库相关扩展、图片相关扩展)、XML模块造成的XXE等。
  • 通过url连接进行挖掘
一般链接形式:
download.php?path=
download.php?file=
down.php?file=
data.php?file=
readlife.php?file=
read.php?filename=
或者包含参数:
&url=
&file_name=
&Filepath=
&Path=
&Data=

文件读取代码

<?php
   
   $filename = $_GET['file'];
   if(isset($filename)){
       readfile($filename);
   }
?>
<?php
$filename=”test.txt”;
Echo fiile_get_contents($filename);
?>

漏洞之所以会发生是因为攻击者可以将路径遍历序列放入文件夹内,从当前位置向上回溯,从而浏览整个浏览器的任何文件。

漏洞验证

Index.php?i=../../../../../../../../etc/passwd 
Index.php?i=../index.php
Index.php?i=file:///etc/passwd

参数i的参数值为PHP文件时:

  1. 显示源代码,则是文件查看漏洞 。
  2. 文件被解析,则是文件包含漏洞。
  3. 提示下载附件,则是文件下载漏洞。

敏感文件

发现漏洞后可以进行以下敏感操作

Linux:
/etc/passwd // 账户信息
/etc/shadow // 账户密码文件
/etc/my.conf //mysql 配置文件
/etc/httpd/conf/httpd.conf // Apache配置文件
/usr/local/app/apache2/conf/httpd.conf //Apache2默认配置文件
/usr/local/app/apache2/conf/extra/httpd-vhost.conf //虚拟网站配置
/usr/local/app/php5/lib/php.ini //PHP相关配置
Windows:
C:\boot.ini //查看系统版本
C:\Windows\System32\inetsrv\MetaBase.xml //IIS配置文件
C:\Windows\repair\sam //存储系统初次安装的密码
C:\Program Files\mysql\my.ini //Mysql配置
C:\Program Files\mysql\data\mysql\user.MYD //Mysql root密码
C:\Windows\php.ini //php配置信息
应用的日志文件
1/var/log/apache2/access.log
2/var/log/nginx/access.log

Wrapper 机制

PHP 提供的文件打开方式不仅仅是简单的文件路径,而是通过文件流的方式进行操作。这些文件流可以被看作是一种特殊的协议,即 Wrapper 协议(PHP中有很多功能不同但形式相似的协议,统称为Wrapper)。Wrapper 协议是一种在 PHP 中定义的标准协议,类似于 HTTP 协议,但用于访问不同的资源,例如文件、HTTP、FTP、SSH 等等。

例如,我们可以通过 php:// 协议访问 PHP 内置的资源,例如标准输入、标准输出和标准错误等等。我们也可以使用 http:// 协议来访问远程服务器上的文件,或使用 ftp:// 协议来访问 FTP 服务器上的文件。这些 Wrapper 协议为我们提供了不同的方式来访问不同的资源。

另外,PHP 还提供了一种接口 stream_wrapper_register,允许开发者自定义 Wrapper 协议。通过这种方式,我们可以自己实现一些 Wrapper 协议,用于访问自定义的资源。这种方式可以很好地扩展 PHP 的文件操作功能,让我们可以方便地访问不同的资源,同时也需要注意安全性问题,避免被攻击者利用这些 Wrapper 协议进行恶意操作。

Filter 机制

  • 在 PHP 中,另一个具有特色的机制是 Filter。Filter 的作用是对当前的 Wrapper 进行处理,例如将文件流中的内容全部变为大写。对于自定义的 Wrapper,开发者需要通过 stream_filter_register 进行注册 Filter。
  • PHP 内置的一些 Wrapper 会自带一些 Filter,例如 php:// 协议会有一些类型的 Filter。这些 Filter 特性给我们进行任意文件读取提供了很多便利。
  • 假设服务端的 include 函数的路径参数可控,正常情况下,它会将目标文件当作 PHP 文件去解析。如果解析的文件中存在 <?php 等 PHP 相关标签,那么标签中的内容会被作为 PHP 代码执行。这种情况下,攻击者可以通过注入恶意代码来实现任意代码执行,造成严重的安全问题。
  • 为了避免这种情况的发生,我们可以使用 Filter 进行文件处理,例如使用 Base64 相关的 Filter 将文件流编码成 Base64 的形式,这样读取的文件内容中就不会存在 PHP 标签。另外,如果服务端开启了远程文件包含选项 allow_url_include,那么攻击者就可以直接执行远程 PHP 代码,这种情况也需要特别注意防范。

中间件/服务器相关

Nginx 错误配置

Nginx是一款常用的Web服务器软件,如果配置不当,会导致任意文件读取漏洞。下面是一个Nginx错误配置造成的任意文件读取漏洞的示例说明:

配置一

假设服务器上存在一个文件路径为/var/www/html/index.php的文件,攻击者通过任意文件读取漏洞想要读取该文件的内容,而服务器的Nginx配置文件/etc/nginx/nginx.conf中包含以下错误配置:

location ~ \.(php)$ {
    include fastcgi_params;
    fastcgi_pass unix:/var/run/php-fpm/php-fpm.sock;
    fastcgi_param SCRIPT_FILENAME /var/www/html$fastcgi_script_name;
}

这个配置的意思是将以.php结尾的请求交给PHP解释器处理,并将文件路径设置为/var/www/html加上请求的文件名。这里存在一个问题,就是如果攻击者发送以下请求:

http://example.com/index.php/../../../etc/passwd

由于Nginx的正则表达式匹配,$fastcgi_script_name会被设置为/index.php/../../../etc/passwd,加上/var/www/html后得到的文件路径为/var/www/html/index.php/../../../etc/passwd,最终将会读取到/etc/passwd文件的内容,造成任意文件读取漏洞。

要解决这个问题,可以在配置文件中添加以下内容,使用Nginx的try_files指令来防止任意文件读取漏洞:

location ~ \.php$ {
    try_files $uri =404;
    include fastcgi_params;
    fastcgi_pass unix:/var/run/php-fpm/php-fpm.sock;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}

这个配置使用try_files指令将文件路径与URI进行比较,如果文件路径中包含..则返回404错误,否则将文件路径设置为$document_root$fastcgi_script_name。这样即使攻击者发送了类似的请求也无法读取到其他文件的内容,从而解决了任意文件读取漏洞。

配置二

在 Nginx 的配置文件中,alias 指令可以用于为请求的路径指定一个本地文件路径。这个功能类似于 Apache 的 mod_alias 模块中的 Alias 指令。通过 alias 指令,可以让 Nginx 将某个 URL 映射到服务器文件系统中的一个文件或目录。例如,在下面的配置中,请求 /static/logo.png 将会被映射到 /home/myapp/static/logo.png 文件:

location /static {
    alias /home/myapp/static/;
}

这种配置可能会导致任意文件读取漏洞,因为攻击者可以通过构造特定的 URL 请求,来访问服务器上任意的文件。具体来说,攻击者可以在 URL 中使用特定的路径,使得 Nginx 映射到服务器上敏感文件的路径,从而实现任意文件读取。例如,如果攻击者请求 /static/../../../etc/passwd,则 Nginx 会将该请求映射到 /etc/passwd 文件,从而导致敏感文件泄露。

为了防止这种攻击,需要对 URL 进行严格的限制,使得请求的文件路径只能位于特定的目录下。在上面的例子中,可以通过添加以下配置,限制请求的文件路径只能位于 /home/myapp/static/ 目录下:

location /static {
    alias /home/myapp/static/;
    if ($request_filename !~ ^/home/myapp/static/) {
        return 404;
    }
}

在这个配置中,使用了 Nginx 的内置变量 $request_filename,该变量包含了请求文件的完整路径。使用 if 指令和正则表达式,判断请求文件路径是否以 /home/myapp/static/ 开头。如果请求的文件路径不符合要求,就返回 404 错误。这样可以有效地防止任意文件读取漏洞。

Docker-API

Docker是一个流行的容器化平台,允许用户在轻量级的虚拟环境中运行应用程序。Docker提供了一组RESTful API,允许开发者通过程序化方式管理Docker容器。

然而,这些API可能存在任意文件读取漏洞。具体来说,如果攻击者能够利用API中的某些函数(如“/containers/{id}/archive”),他们就可以读取容器中的任意文件,甚至可以在主机文件系统中读取文件。

例如,如果攻击者能够通过API获取到容器的ID,并知道容器中某个敏感文件的路径,他们可以使用以下curl命令来获取该文件的内容:

curl -XPOST --unix-socket /var/run/docker.sock http://localhost/containers/[container_id]/archive -H "Content-Type: application/json" --data-binary '{"path":"[file_path]"}'

这条命令将向Docker API发送一个POST请求,请求下载容器中的文件。攻击者将文件路径设置为相对路径,即可读取任意文件。

为了防止此类攻击,应当在Docker API的使用上实行合理的权限控制,并限制API的访问范围。如果API服务不能禁止外部访问,则应将其放置在内部网络中,只开放给受信任的主机。此外,还应当使用Docker中的安全机制,如Docker的安全标签功能,来保护容器内的数据和文件系统。

软链接

之前学校战队招新赛遇到过的题目类型,给出一个上传页面可以上传压缩包,但是压缩包里其实可以藏一个软链接,这样的话可以把特定文件像个钩子一样勾出来,实现任意文件读取

例如在虚拟机终端中:

ln -s /etc/passwd passwd //创建一个指向/etc/passwd的软链接,文件名为passwd
zip --symlinks passwd.zip passwd //将这个文件压缩到zip里

拖出后上传并访问

任意文件读取漏洞,php,服务器,开发语言

查看文件

root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
bin:x:2:2:bin:/bin:/usr/sbin/nologin
sys:x:3:3:sys:/dev:/usr/sbin/nologin
sync:x:4:65534:sync:/bin:/bin/sync
games:x:5:60:games:/usr/games:/usr/sbin/nologin
man:x:6:12:man:/var/cache/man:/usr/sbin/nologin
lp:x:7:7:lp:/var/spool/lpd:/usr/sbin/nologin
mail:x:8:8:mail:/var/mail:/usr/sbin/nologin
news:x:9:9:news:/var/spool/news:/usr/sbin/nologin
uucp:x:10:10:uucp:/var/spool/uucp:/usr/sbin/nologin
proxy:x:13:13:proxy:/bin:/usr/sbin/nologin
www-data:x:33:33:www-data:/var/www:/usr/sbin/nologin
backup:x:34:34:backup:/var/backups:/usr/sbin/nologin
list:x:38:38:Mailing List Manager:/var/list:/usr/sbin/nologin
irc:x:39:39:ircd:/var/run/ircd:/usr/sbin/nologin
gnats:x:41:41:Gnats Bug-Reporting System (admin):/var/lib/gnats:/usr/sbin/nologin
nobody:x:65534:65534:nobody:/nonexistent:/usr/sbin/nologin
systemd-timesync:x:100:102:systemd Time Synchronization,,,:/run/systemd:/bin/false
systemd-network:x:101:103:systemd Network Management,,,:/run/systemd/netif:/bin/false
systemd-resolve:x:102:104:systemd Resolver,,,:/run/systemd/resolve:/bin/false
systemd-bus-proxy:x:103:105:systemd Bus Proxy,,,:/run/systemd:/bin/false
_apt:x:104:65534::/nonexistent:/bin/false
mysql:x:105:109:MySQL Server,,,:/nonexistent:/bin/false
extract0r:x:1000:1000::/home/extract0r:

可以看到我们实现了对/etc/passwd的读取。

客户端相关

浏览器/Flash XSS

浏览器/Flash XSS(跨站脚本攻击)是一种常见的网络安全漏洞,攻击者可以利用这种漏洞来读取用户系统中的任意文件。

XSS攻击通常通过注入恶意脚本代码来实现,攻击者可以通过各种方式将这些恶意代码注入到网站的页面中,比如在表单中输入特定的代码,或者在URL中加入恶意参数。一旦用户访问了被注入了恶意代码的页面,这些代码就会被执行,从而导致各种安全问题,包括任意文件读取漏洞。

在利用XSS漏洞进行任意文件读取时,攻击者通常会构造特定的恶意脚本代码,利用浏览器或Flash的某些功能来读取用户系统中的任意文件,比如:

  • 利用XMLHttpRequest对象(XHR)发送HTTP请求,从而读取用户系统中的任意文件内容。
  • 利用Flash中的FileReference对象,从用户系统中选择一个文件,然后将文件内容读取到攻击者的服务器上。

为了防止浏览器/Flash XSS漏洞,开发者需要注意以下几点:

  • 过滤用户的输入,包括表单数据、URL参数等,避免注入恶意脚本。
  • 将所有输入的特殊字符进行转义处理,避免被解释为脚本代码。
  • 在Web应用程序中使用CSP(内容安全策略),以限制脚本执行的范围。
  • 避免使用Flash等插件,或者对插件进行严格限制。
  • 对文件读取操作进行严格的权限控制,避免攻击者利用漏洞读取敏感文件。

MarkDown语法解析器XSS

Markdown是一种轻量级的标记语言,用于编写易于阅读和编写的文档。由于其简单易用的特点,现在在各种场合广泛使用,如博客、文档撰写、社区讨论等。

但是,在MarkDown语法解析器中存在一些安全问题,其中包括任意文件读取漏洞。具体来说,当使用MarkDown解析器时,如果输入的内容包含恶意代码,就会导致任意文件读取漏洞。

一种常见的攻击方式是通过XSS攻击来实现任意文件读取漏洞。攻击者可以通过XSS攻击在MarkDown中嵌入恶意代码,使其在用户浏览器中执行。在执行的过程中,恶意代码可以利用MarkDown解析器的漏洞,来读取任意文件内容,包括敏感文件内容。

例如,攻击者可以在MarkDown中嵌入以下代码:

[link](javascript:fetch('http://example.com/read.php?file=/etc/passwd').then(response => response.text()).then(data => document.write(data)))

当用户点击该链接时,恶意JavaScript代码将向指定URL发送一个GET请求,并将返回的文件内容显示在用户的浏览器中。通过这种方式,攻击者可以轻松地读取服务器上的敏感文件内容。

为了防止这种攻击,可以采用以下措施:文章来源地址https://www.toymoban.com/news/detail-614536.html

  1. 在服务器端对输入进行过滤和验证,避免用户输入恶意内容;
  2. 在MarkDown解析器中添加白名单,只允许指定的HTML标签和属性;
  3. 对于用户输入的文件路径等敏感信息,使用严格的访问控制和权限管理,避免恶意读取文件内容;
  4. 更新MarkDown解析器的版本,及时修复已知的漏洞。
    response.text()).then(data => document.write(data)))

当用户点击该链接时,恶意JavaScript代码将向指定URL发送一个GET请求,并将返回的文件内容显示在用户的浏览器中。通过这种方式,攻击者可以轻松地读取服务器上的敏感文件内容。

为了防止这种攻击,可以采用以下措施:

1. 在服务器端对输入进行过滤和验证,避免用户输入恶意内容;
2. 在MarkDown解析器中添加白名单,只允许指定的HTML标签和属性;
3. 对于用户输入的文件路径等敏感信息,使用严格的访问控制和权限管理,避免恶意读取文件内容;
4. 更新MarkDown解析器的版本,及时修复已知的漏洞。

到了这里,关于任意文件读取漏洞的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Web漏洞-任意文件读取漏洞

    任意文件读取漏洞 原理 任意文件读取是属于文件操作漏洞的一种,通过提交专门设计的输入,攻击者就可以在被访问的文件系统中读取或写入任意内容,往往能够使攻击者从服务器上获取敏感文件,正常读取的文件没有经过校验或者校验不严格,用户可以控制这个变量或者

    2024年02月13日
    浏览(47)
  • 渗透测试漏洞原理之---【任意文件读取漏洞】

    1、概述 一些网站的需求,可能会提供文件查看与下载的功能。如果对用户查看或下载的文件没有限制或者限制绕过,就可以查看或下载任意文件。这些文件可以是源代码文件,配置文件,敏感文件等等。 任意文件读取会造成(敏感)信息泄露; 任意文件读取大多数情况是由

    2024年02月10日
    浏览(50)
  • 任意文件读取和漏洞复现

    一些网站的需求,可能会提供文件查看与下载的功能。如果对用户查看或下载的文件没有限制或者限制绕过,就可以查看或下载任意文件。这些文件可以是漂代码文件,配置文件,敏感文件等等。 任意文件读取会造成(敏感)信息泄露: 任意文件读取大多数情况是由于其他

    2024年02月09日
    浏览(45)
  • 任意文件读取及漏洞复现

    一些网站的需求,可能会提供文件查看与下载的功能。如果对用户查看或下载的文件没有限制或者限制绕过,就可以查看或下载任意文件。这些文件可以是源代码文件,配置文件,敏感文件等等。 任意文件读取会造成(敏感)信息泄露: 任意文件读取很多情况是由于其他漏

    2024年02月09日
    浏览(56)
  • 任意文件读取与下载漏洞

    任意文件读取是属于文件操作漏洞的一种,一般任意文件读取漏洞可以读取配置信息甚至系统重要文件。其中的目录遍历是由于web服务器或者web应用程序对用户输入的文件名称的安全性验证不足而导致的一种安全漏洞,使得攻击者通过利用一些特殊字符就可以绕过服务器的安

    2023年04月09日
    浏览(43)
  • 任意文件读取漏洞

    任意文件读取漏洞(Arbitrary File Read Vulnerability)是指攻击者可以通过web应用程序读取任意文件而不受访问控制限制的漏洞。这种漏洞可能导致敏感信息泄露、系统崩溃等问题。 攻击者可以利用任意文件读取漏洞访问服务器上的任意文件,包括密码文件、配置文件等,从而获取

    2024年02月15日
    浏览(43)
  • 【漏洞复现】OfficeWeb365 Indexs 任意文件读取漏洞

    OfficeWeb365 /Pic/Indexs接口处存在任意文件读取漏洞,攻击者可通过独特的加密方式对payload进行加密,读取任意文件,获取服务器敏感信息,使系统处于极不安全的状态。 FOFA:body=\\\"请输入furl参数\\\" || header=\\\"OfficeWeb365\\\" || banner=\\\"OfficeWeb365\\\" 读取文件加密方式

    2024年02月02日
    浏览(49)
  • 深信服应用交付报表任意文件读取漏洞

      深信服应用交付报表系统 download.php文件存在任意文件读取漏洞,攻击者通过漏洞可以下载服务器任意文件。   深信服应用交付报表系统   app=“SANGFOR-应用交付报表系统”   这里通过抓包进行文件读取,当然也可以在页面中直接进行获取。

    2024年02月10日
    浏览(49)
  • Jenkins CLI 任意文件读取漏洞复现

    Jenkins CLI 是 Jenkins 内置的命令行页面。 Jenkins 受影响版本中使用 args4j 库解析CLI命令参数,该库默认将参数中 @ 字符后的文件路径替换为文件内容,未授权的攻击者可利用该特性使用 Jenkins 控制器进程的默认字符编码读取 Jenkins 控制器文件系统上的任意文件(如加密密钥的二进

    2024年02月22日
    浏览(53)
  • 漏洞复现-Yearning front 任意文件读取漏洞(附漏洞检测脚本)

    文章中涉及的漏洞均已修复,敏感信息均已做打码处理,文章仅做经验分享用途,切勿当真,未授权的攻击属于非法行为!文章中敏感信息均已做多层打马处理。传播、利用本文章所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,作者不为此承担

    2024年01月18日
    浏览(41)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包