一:漏洞名称:
任意文件下载 ,任意文件读取,文件遍历下载。
描述:
目录遍历与任意文件下载息息相关,关于目录遍历详情:浅谈“目录浏览漏洞与目录遍历漏洞”
任意文件下载漏洞是因为服务器端某些程序对用户提交参数过滤不当造成的,该程序一般具有以读取方式输出文件内容或者下载文件,前者也可以叫做任意文件读取,两者本质上是一样的。通常在以下情况下存在该漏洞:
-通过在请求参数中传入文件路径,包括相对路径和绝对路径,如:
download. jsp?filepath=x.txt
- PHP代码中存在的本地文件包含漏洞,如: include、 inc lude_once、require、require_ once。
- WEB目录映射到根目录,导致可直接下载任意文件,如:
http://www. test. com/etc/ passwd。
检测条件:
1.系统中存在文件(附件/文档/图片等等资源)下载的地方。
2.未进行过滤../../../字符。
检测方法:
1、通过web漏洞扫描工具对网站实施扫描可能发现目录遍历或者任意文件下载漏洞,发送一系列”../”字符来遍历高层目录,并且尝试找到系统的配置文件或者系统中存在的敏感文件。
2、也可通过判断网站语言,并根据其url中部分提供的参数,进行构造相关的路径信息,如收集到网站中间件版本为apache,则想办法构造../../../WEB-INF/web.xml等,然后查看其是否可被下载出来。随后可构造下载系统文件。
3、漏洞利用代码
readfile.php?file=/etc/passwd readfile.php?file=../../../../../../../../etc/passwd readfile.php?file=../../../../../../../../etc/passwd%00
漏洞修复:
1、净化数据:对用户传过来的文件名参数进行硬编码或统一编码,对文件类型进行白名单控制,对包含恶意字符或者空字符的参数进行拒绝。
2、web应用程序可以使用chroot环境包含被访问的web目录,或者使用绝对路径+参数来访问文件目录,时使其即使越权也在访问目录之内。www目录就是一个chroot应用。由chroot创造出的那个根目录,叫做“chroot监狱”(所谓”监狱”就是指通过chroot机制来更改某个进程所能看到的根目录,即将某进程限制在指定目录中,保证该进程只能对该目录及其子目录的文件有所动作,从而保证整个服务器的安全。
详细具体chroot的用法,自行百度。3、任意文件下载漏洞也有可能是web所采用的中间件的版本低而导致问题的产生,例如ibm的websphere的任意文件下载漏洞,需更新其中间件的版本可修复。
4、要下载的文件地址保存至数据库中。
5、文件路径保存至数据库,让用户提交文件对应ID下载文件。
6、用户下载文件之前需要进行权限判断。
7、文件放在web无法直接访问的目录下。
8、不允许提供目录遍历服务。
9、公开文件可放置在web应用程序下载目录中通过链接进行下载。
10、记录文件下载日志。
参考代码:
public String download() throws Exception { //获取文件id String id = Struts2Utils.getRequest().getParameter("id"); try { //通过id进行文件查询 DownloadFile downFile = fileService.findEntityById(Long.parseLong(id)); //获取该附件的类型 byte[] bt = null; bt = downFile.getContent(); HttpServletResponse res = Struts2Utils.getResponse(); res.reset(); res.setContentType("application/x-msdownload"); res.setHeader("Content-Disposition", "attachment;filename="+ URLEncoder.encode(uacFile.getName(), "UTF-8")); OutputStream out = res.getOutputStream(); out.write(bt); out.flush(); out.close(); } catch (Exception e1) { e1.printStackTrace(); } return null; }
5、敏感文件表
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:\Windows\win.ini //Windows系统的一个基本系统配置文件 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 //记录每个访问计算机用户的公钥 /etc/passwd /etc/shadow//账户密码文件 /etc/my.cnf //mysql配置文件 /etc/httpd/conf/httpd.conf //apache配置文件 /root/.bash_history //用户历史命令记录文件 /root/.mysql_history //mysql历史命令记录文件 /proc/mounts //记录系统挂载设备 /porc/config.gz //内核配置文件 /var/lib/mlocate/mlocate.db //全文件路径 /porc/self/cmdline //当前进程的cmdline参数
其他补充说明:
可参考:浅谈“目录浏览漏洞与目录遍历漏洞”
1.WEB-INF是Java的WEB应用的安全目录
WEB-INF常用的目录或文件:
/WEB-INF/web.xml:Web应用程序配置文件,描述了 servlet 和其他的应用组件配置及命名规则。
/WEB-INF/classes/:含了站点所有用的 class 文件,包括 servlet class 和非servlet class,他们不能包含在 .jar文件中
/WEB-INF/lib/:存放web应用需要的各种JAR文件,放置仅在这个应用中要求使用的jar文件,如数据库驱动jar文件
/WEB-INF/src/:源码目录,按照包名结构放置各个java文件。
/WEB-INF/database.properties:数据库配置文件
漏洞检测以及利用方法:通过找到web.xml文件,推断class文件的路径,最后直接class文件,在通过反编译class文件,得到网站源码2.任意下载漏洞还可以通过谷歌来进行搜索
inurl : readfile.php?file= inurl : download.php?file=
3.具体的案列:参考:(待补充)
参考:
https://blog.csdn.net/qq_43431158/article/details/102649596
https://blog.csdn.net/weixin_39997829/article/details/79633454