一、任意文件读取/下载漏洞
任意文件读取/下载漏洞,常发生在查看文件/下载文件等地方,后端没有对用户查看或下载的内容做限制,导致可以查看或下载其他文件,甚至是服务器中敏感文件。
举个例子,比如系统中存在一处下载功能,抓包发现URL为 http://127.0.0.1/file?download=/img/touxiang1.img 。下面我们可以尝试配合使用 ../ 目录穿越漏洞读取系统内敏感文件,最终读取/下载任意文件URL为 http://127.0.0.1/file?download=../../../../../../../../../etc/passwd 。当然了,上述仅是个在没有任何防护下的例子,为了便于理解任意文件读取/下载漏洞。
1.1 windows 系统敏感文件
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
| boot.ini #查看系统版本 c:/windows/php.ini #php配置信息 c:/windows/my.ini #MYSQL配置文件,记录管理员登陆过的MYSQL用户名和密码 c:/winnt/php.ini c:/winnt/my.ini 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 C:\Program Files\mysql\my.ini C:\mysql\data\mysql\user.MYD #存在MYSQL系统中的用户密码 C:\Windows\System32\drivers\etc\hostswinserver配置Telnet信息
|
1.2 Linux 系统敏感文件
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37
| /etc/httpd/conf/httpd.conf /etc/rc.local 有时可以读出来apache的路径 /usr/local/apache/conf/httpd.conf /var/www/html/apache/conf/httpd.conf /home/httpd/conf/httpd.conf /usr/local/apache2/conf/httpd.conf /usr/local/httpd/conf/httpd.conf /etc/apache/httpd.conf /usr/local/lib/php.ini /etc/hosts.deny 定义禁止访问本机的主机 /etc/bashrc bash shell 的系统全局配置 /etc/group 系统用户组的定义文件 /etc/httpd/httpd.conf /etc/issue 显示Linux核心的发行版本信息(用于本地登陆用户) /etc/issue/net 显示Linux核心和发行版本信息(用于远程登陆用户)----没成功 /etc/ssh/ssh_config ssh配置文件 /etc/termcap 终端定义和配置文件 /etc/xinetd.d /etc/mtab 包含当前安装的文件系统列表 有时可以读取到当前网站的路径 redhat-release:包含识别当前Red Hat 版本号的字符串 shells:列出可用在系统上的shell命令行解释器(bash,sh,csh等). /etc/vsftpd/vsftpd.conf /etc/xinetd.conf xinetd 配置文件 /etc/protocols 列举当前可用的协议 /etc/logrotate.conf 维护 /var/log 目录中的日志文件 /etc/ld.so.conf “动态链接程序”(Dynamic Linker)的配置。 我在我的系统中安装了非常有用的 wget 实用程序。/etc/ 中有一个 /etc/wgetrc 文件 Linux操作系统用户配置文件 /etc/passwd /etc/shadow /etc/inputrc DNS客户机配置文件,设置DNS服务器的IP地址及DNS域名 /etc/resolv.conf 内容为Default Router的ip地址 Redhat 5.x: /etc/sysconfig/network /etc/sendmail.cf (Linux) Sendmail(EMAIL服务器)配置文件 /etc/sendmail.cw 本地主机名
|
二. 任意文件读取 / 下载漏洞代码审计
代码审计流程大致分为下面几步,
- 首先是确定功能是否存在文件读取/下载功能,其次是分析文件参数是否可控
- 再其次分析路径是否可控,如果存在路径限制则尝试绕过,
- 最终经过一系列分析确定是否存在任意文件读取/下载漏洞。
任意文件读取/下载漏洞代码审计本身不难,确定了功能点后,如果后端直接接受前端传来的文件名,没有对路径做限制,那大概率存在任意文件读取/下载漏洞。当然具体情况还得具体分析。
2.1 确定功能点
确定目标系统是否存在读取或下载功能方式很多。可以通过阅读使用手册,官方文档,部署环境后前端定位功能,后端关键字查找。
关键字:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
| org.apache.commons.io.FileUtils org.springframework.stereotype.Controller import java.nio.file.Files import java.nio.file.Path import java.nio.file.Paths import java.util.Scanner sun.nio.ch.FileChannelImpl java.io.File.list/listFiles java.io.FileInputStream java.io.FileOutputStream java.io.FileSystem/Win32FileSystem/WinNTFileSystem/UnixFileSystem sun.nio.fs.UnixFileSystemProvider/WindowsFileSystemProvider java.io.RandomAccessFile sun.nio.fs.CopyFile sun.nio.fs.UnixChannelFactory sun.nio.fs.WindowsChannelFactory java.nio.channels.AsynchronousFileChannel FileUtil/IOUtil BufferedReader readAllBytes scanner
|
上面是给出的文件操作类关键字,这些关键字不仅仅能定位到文件读取或下载操作,还会涉及到一些比如文件删除,文件移动,文件遍历等操作。
总之上面通过关键字定位到文件操作类功能时,大家都可以进一步审计,也许还会存在任意文件删除,任意文件遍历,任意文件移动等漏洞。
2.2 文件参数可控
2.3、路径无限制