java 代码审计中的文件上传漏洞如何修复 java文件包含漏洞利用_php


01

漏洞介绍

文件包含漏洞是代码注入的一种。其原理就是注入一段用户能控制的脚本或代码,并让服务器端执行,代码注入的典型代表就是文件包含File inclusion。文件包含可能会出现在jsp、php、asp等语言中。服务器通过函数去包含任意文件时,由于要包含的这个文件来源过滤不严,从而可以去包含一个恶意文件,而我们可以构造这个恶意文件来达到邪恶的目的。常见的文件包含的函数如下:

PHP:include() 、include_once( )、require( )、require_once( )、fopen( )、readfile( )
JSP/Servlet:ava.io.file( )、java.io.filereader( )
ASP:include file、include virtual

02

文件包含漏洞的分类

文件包含可以分为本地文件包含和远程文件包含两种。顾名思义,本地文件包含就是通过URL将服务器本地的其他文件include进来。远程文件包含就是将远程服务器的文件include进来。最主要的是,包含进来的文件都以当前脚本文件解析,比如,当前测试系统是Apache加php环境,那么被include进来的文件,不管是什么类型,比如说图片,文本文档,这些文件被包含以后,都会被当做php脚本来解析。

03

文件包含漏洞的危害

①执行任意代码

②读取文件源码或敏感信息。

③包含恶意文件控制网站,甚至控制服务器。

04

文件包含漏洞漏洞复现

利用DVWA靶场进行CSRF漏洞演练:

1. Low Security Level

查看源码:


java 代码审计中的文件上传漏洞如何修复 java文件包含漏洞利用_文件包含_02


服务器获取 page 的值,没有进行任何过滤。因此直接读取C:UsersdellDesktop1.txt文件。


java 代码审计中的文件上传漏洞如何修复 java文件包含漏洞利用_dvwa文件包含_03


若文件中存在php代码,<?php phpinfo(); ?>,则会执行php代码并返回代码执行的结果。


java 代码审计中的文件上传漏洞如何修复 java文件包含漏洞利用_dvwa文件包含_04


还可以进行远程文件包含,如下:


java 代码审计中的文件上传漏洞如何修复 java文件包含漏洞利用_文件包含_05


2. Medium Security Level

查看源码:


java 代码审计中的文件上传漏洞如何修复 java文件包含漏洞利用_服务器_06


Medium等级的代码将'http://', 'https://', '../', '..'都替换为空,防御了简单的远程和本地包含。但是我们在后面加绝对路径一样可以执行。


java 代码审计中的文件上传漏洞如何修复 java文件包含漏洞利用_php_07


并且,源码中使用的是 str_replace() 函数,可以使用重写的方式绕过。


htthttp://p://  -> http://
..././         -> ../


java 代码审计中的文件上传漏洞如何修复 java文件包含漏洞利用_php_08


3. High Security Level

查看源码:


java 代码审计中的文件上传漏洞如何修复 java文件包含漏洞利用_php_09


High等级的代码限制了page参数必须以file开头,或者page参数为include.php。

如果要以file开头,我们可以采用file协议来读取,即file:///C:/Users/dell/Desktop/1.txt


java 代码审计中的文件上传漏洞如何修复 java文件包含漏洞利用_文件包含_10


05

防御方案

①严格判断包含中的参数是否外部可控,因为文件包含漏洞利用成功与否的关键点就在于被包含的文件是否可被外部控制;

②路径限制:限制被包含的文件只能在某一文件内,一定要禁止目录跳转字符,如:“../”;

③包含文件验证:验证被包含的文件是否是白名单中的一员;

④尽量不要使用动态包含,可以在需要包含的页面固定写好,如:include('head.php')。