web应用安全测试之信息泄露

时间:2025-02-19 14:08:33

文章目录

      • 泄漏敏感信息
        • 漏洞描述
        • 测试方法:
        • 风险分析:
        • 风险等级:
        • 修复方案
      • 敏感文件信息泄漏
        • 漏洞描述:
        • 测试方法:
        • 风险分析:
        • 风险等级:
        • 修复方案:
      • 过时的、用于备份的或者开发文件残留
        • 漏洞描述
        • 测试方法:
        • 风险分析
        • 风险等级
        • 修复方案:
      • 报错页面敏感信息泄漏
        • 漏洞描述
        • 测试方法:
        • 风险分析
        • 风险等级:
        • 修复方案:
      • 物理路径泄漏
        • 漏洞描述
        • 测试方法:
        • 风险分析
        • 风险等级:
        • 修复方案:
      • 明文密码本地保存
        • 漏洞描述
        • 测试方法:
        • 风险分析
        • 风险等级:
        • 修复方案
      • 入侵痕迹残留
        • 漏洞描述
        • 测试方法
        • 风险分析
        • 风险等级:
        • 修复方案
      • HTTP头信息泄漏
        • 漏洞描述
        • 测试方法:
        • 风险分析
        • 风险等级:
        • 修复方案
      • 目录浏览
        • 漏洞描述
        • 测试方法
        • 风险分析
        • 风险等级:
        • 修复方案
      • 默认页面泄漏
        • 漏洞描述
        • 测试方法:
        • 风险分析
        • 风险等级:
        • 修复方案
      • 存在可访问的管理后台入口
        • 漏洞描述
        • 测试方法:
        • 风险分析
        • 风险等级:
        • 修复方案
      • 存在可访问的管理控制台入口
        • 漏洞描述
        • 测试方法
        • 风险分析
        • 风险等级:
        • 修复方案
      • 参数溢出
        • 漏洞描述
        • 测试方法
        • 风险分析
        • 风险等级:
        • 修复方案
      • 任意文件下载
        • 漏洞描述
        • 测试方法:
        • 风险等级:
        • 修复方案:
      • 摘抄

泄漏敏感信息

漏洞描述
  • 搜索引擎可以通过robots文件可以获知哪些页面可以爬取,哪些页面不可以爬取。
  • Robots协议是网站国际互联网界通行的道德规范,其目的是保护网站数据和敏感信息、确保用户个人信息和隐私不被侵犯,如果文件编辑的太过详细,反而会泄露网站的敏感目录或者文件,比如网站后台路径,从而得知其使用的系统类型,从而有针对性地进行利用。
测试方法:
  • 检测形式多样,工具爬虫扫描得到敏感文件的路径,从而找到robots文件;
  • 手工挖掘,直接在域名后输入/进行查看。
风险分析:

攻击者可通过发现文件,收集网站的敏感目录或文件,从而有针对性的进行利用。

风险等级:

【低危】:中存在allow和disallow的具体内容泄露敏感目录信息。

修复方案

可根据实际情况,进行如下对应的修复:

1、	User-agent: * 这里的*代表的所有的搜索引擎种类,*是一个通配符
2、	Disallow: / 这里定义是禁止爬寻站点所有的内容
3、	Disallow: /admin/ 这里定义是禁止爬寻admin目录下面的目录
4、	Disallow: /ABC/ 这里定义是禁止爬寻ABC目录下面的目录
5、	Disallow: /cgi-bin/*.htm 禁止访问/cgi-bin/目录下的所有以".htm"为后缀的URL(包含子目录)。
6、	Disallow: /*?* 禁止访问网站中所有包含问号 (?) 的网址
7、	Disallow: /.jpg$ 禁止抓取网页所有的.jpg格式的图片
8、	Disallow:/ab/ 禁止爬取ab文件夹下面的文件。
9、	Allow: /cgi-bin/ 这里定义是允许爬寻cgi-bin目录下面的目录
10、Allow: /tmp 这里定义是允许爬寻tmp的整个目录
11、Allow: .htm$ 仅允许访问以".htm"为后缀的URL。
12、Allow: .gif$ 允许抓取网页和gif格式图片
13、Sitemap: 网站地图 告诉爬虫这个页面是网站地图。

敏感文件信息泄漏

漏洞描述:

敏感数据包括但不限于:口令、密钥、证书、会话标识、License、隐私数据(如短消息的内容)、授权凭据、个人数据(如姓名、住址、电话等)等,在程序文件、配置文件、日志文件、备份文件及数据库中都有可能包含敏感数据。

测试方法:
  • 检测形式多样,工具爬虫扫描得到敏感文件的路径,从而找到敏感数据,
  • 手工挖掘,根据web容器或者网页源代码的查看,找到敏感信息。
风险分析:

攻击者可通过上述方式获取网站敏感文件,收集网站敏感信息,从而有针对性的进行利用。

风险等级:

【高危】:返回含有重要的敏感信息的文件,比如数据库文件、代码的备份文件或svn、git版本控制文件等。

修复方案:
1、	禁止在代码中存储敏感数据:禁止在代码中存储如数据库连接字符串、口令和密钥之类的敏感数据,这样容易导致泄密。用于加密密钥的密钥可以硬编码在代码中。
2、	禁止密钥或帐号的口令以明文形式存储在数据库或者文件中:密钥或帐号的口令必须经过加密存储。例外情况,如果Web容器的配置文件中只能以明文方式配置连接数据库的用户名和口令,那么就不用强制遵循该规则,将该配置文件的属性改为只有属主可读写。
3、	禁止在 cookie 中以明文形式存储敏感数据:cookie信息容易被窃取,尽量不要在cookie中存储敏感数据;如果条件限制必须使用cookie存储敏感信息时,必须先对敏感信息加密再存储到cookie。
4、	禁止在隐藏域中存放明文形式的敏感数据。
5、	禁止用自己开发的加密算法,必须使用公开、安全的标准加密算法。
6、	禁止在日志中记录明文的敏感数据:禁止在日志中记录明文的敏感数据(如口令、会话标识jsessionid等), 防止敏感信息泄漏。
7、	禁止带有敏感数据的Web页面缓存:带有敏感数据的Web页面都应该禁止缓存,以防止敏感信息泄漏或通过代理服务器上网的用户数据互窜问题。

过时的、用于备份的或者开发文件残留

漏洞描述

应用遗留的过时文件、备份页面、渗透测试遗留文件、开发文件残留的测试文件等。

测试方法:
  • 常见检测方法是通过对网站进行web漏洞扫描,直接利用爬虫来爬取网站可能存在的路径以及链接,如果存在备份文件,则可通过web直接进行下载。
  • 也可以通过自行构造字典,对网站某一目录下,指定字典进行爆破,常见的扫描工具有wwwscan、御剑后台扫描工具等。
风险分析

攻击者可通过上述方式获取网站备份文件、过时文件、遗留文件等内容,收集网站敏感信息,从而有针对性的进行利用。

风险等级

【高危】:泄露重要敏感信息,或能够进行核心业务操作。
【中危】:泄露一般重要信息,做只能进行一般功能操作。
【低危】:页面泄露非重要信息,不能进行相关功能操作。

修复方案:
1、	网站管理员严格检查web中可访问的路径下是否存在备份文件,常见备份文件后缀为.、.bak、.sql、.txt、等等。如果有这些文件,直接将该备份文件进行转移到其他目录或者直接删除即可。
2、	严格控制可网站可访问目录下的文件敏感度的存放问题,不要将敏感文件置于该目录。

报错页面敏感信息泄漏

漏洞描述
  • 错误页面由服务器产生403、404、500等错误时,返回详细错误信息。
  • 报错信息中可能会包含服务器代码信息、数据库连接信息、SQL语句或者敏感文件的路径,为攻击者收集信息提供了方便。
测试方法:
  • 通过目录扫描或手工输入不存在的文件或路径,触发服务器产生404错误并返回404页面
  • 通过目录扫描或手工输入一个无权限查看的文件或路径,触发服务器产生403错误并返回403页面
  • 手工输入不存在的参数或特殊构造的字符串,如单引号,尖括号等,触发服务器产生500错误并返回500页面或异常信息
风险分析

攻击者可通过上述几种方式触发Web应用程序报错,提取报错信息泄露的敏感信息,如Web中间件的版本信息、数据库连接信息

风险等级:

【高危】:开启调试模式,泄露大量应用的敏感信息如代码、报错信息等;
【低危】:未开启调试模式,泄露部分中间件版本、少量代码信息等。

修复方案:
1.	编码时增加异常处理模块,对错误页面做统一的自定义返回界面,隐藏服务器版本信息;
2.	不对外输出程序运行时产生的异常错误信息详情。

物理路径泄漏

漏洞描述

应用中泄露出应用在主机中的绝对地址路径

测试方法:
  • 打开网页源代码,查看图片等媒体的链接及超链接
  • 通过报错信息获取
风险分析

攻击者可通过获取网站物理路径,为下一步攻击做准备。

风险等级:

【低危】:泄露应用绝对路径

修复方案:
1、媒体链接和超链接采用相对路径的表达方式;
2、 报错信息中不对外输出网站物理路径等敏感信息。

明文密码本地保存

漏洞描述

明文密码保存在本地客户端

测试方法:
  • 查看网页源代码
  • 查看网站在本地客户端的缓存文件
风险分析

攻击者可通过嗅探或直接查看源代码的方式获取传输到前端的账号及密码,登录他人账号。

风险等级:

【高危】:全部账号的明文密码保存在本地客户端
【低危】:只有本账号的明文密码保存在本地客户端

修复方案
禁止将密码保存到本地客户端,即便是加密后的密码也不建议保存在本地,攻击者可利用密文格式的密码登录或修改其他账户的密码。

入侵痕迹残留

漏洞描述

在渗透过程中发现应用中存在曾经的入侵痕迹,如存在的webshell文件。

测试方法

通常使用Web应用安全漏洞扫描工具或目录扫描工具发现入侵痕迹。

风险分析

残留的入侵痕迹可被其他攻击者用于二次攻击,对网站造成一定的影响。

风险等级:

【高危】:发现存在入侵痕迹,比如存在Webshell或者网页被篡改。

修复方案
可借助工具全盘清理入侵痕迹,如D盾可以扫描Windows系统中的webshell。 

HTTP头信息泄漏

漏洞描述

在服务器返回的HTTP头中泄露服务器信息

测试方法:
  • 在浏览器的调试窗口中查看HTTP响应头
  • 使用代理软件如burpsuite、fiddler,拦截HTTP响应头
风险分析

攻击者可通过获取服务器banner信息,针对某个版本存在的漏洞进行定向攻击。

风险等级:

【低危】:泄露服务器版本等信息

修复方案
隐藏或者修改banner信息。

目录浏览

漏洞描述

目录浏览漏洞是由于网站存在配置缺陷,存在目录可浏览漏洞,这会导致网站很多隐私文件与目录泄露
比如数据库备份文件、配置文件等,攻击者利用该信息可以更容易得到网站权限,导致网站被黑

测试方法

可以利用web漏洞扫描器扫描web应用进行检测,也可通过搜索,网站标题包含“index of”关键词的网站进行访问

风险分析

攻击者通过访问网站某一目录时,该目录没有默认首页文件或没有正确设置默认首页文件,将会把整个目录结构列出来,将网站结构完全暴露给攻击者;
攻击者可能通过浏览目录结构,访问到某些隐秘文件(如PHPINFO文件、服务器探针文件、网站管理员后台访问地址、数据库连接文件等)。

风险等级:

【高危】:目录可以浏览,泄露包含密码、个人信息等敏感文件。
【低危】:目录可以浏览,未泄露包含密码、个人信息等敏感文件。

修复方案

目前存在该漏洞的常见中间件为apache和IIS,以下列出其相关的修复方式:

* 	IIS中关闭目录浏览功能:在IIS的网站属性中,勾去“目录浏览”选项,重启IIS。 
* Apache中关闭目录浏览功能:打开Apache配置文件,查找“Options Indexes FollowSymLinks”,修改为“ Options -Indexes”(减号表示取消,保存退出,重启Apache。 
* 	Nginx中默认不会开启目录浏览功能,若您发现当前已开启该功能,可以编辑文件,删除如下两行:autoindex on;autoindex_exact_size on;重启Nginx。

默认页面泄漏

漏洞描述

存在默认安装中间件、插件、框架等会携带示例页面及说明文档。

测试方法:
  • 可以利用web漏洞扫描器或目录扫描器扫描web应用进行检测
  • 根据网站使用的第三方组件和框架手工输入对应的示例页面。
风险分析

攻击者可利用默认页面提供的功能和信息对服务器进行攻击。

风险等级:

【高危】:存在可访问默认页面,泄露高风险敏感信息(如:tomcat 的 examples 目录)。
【中危】:存在可访问默认页面,泄露于业务、操作和配置相关的敏感信息。
【低危】:存在可访问的默认页面,但未泄露敏感信息。

修复方案
建议在不影响业务的前提下删除默认页面。

存在可访问的管理后台入口

漏洞描述

应用存在未限制访问的后台,或者能直接登录管理后台。

测试方法:
  • 可以利用web漏洞扫描器或目录扫描器扫描web应用进行检测
  • 识别网站使用的cms框架,判断其默认的管理后台地址。
  • .在网站中寻找管理后台超链接
风险分析

攻击者可通过登录网站管理后台篡改页面,或利用上传功能上传webshell,导致服务器被控制。

风险等级:

【高危】:可访问默认管理后台,通过后台获取 shell。
【中危】:可访问默认管理后台,并成功登录,但无法获取 shell。
【低危】:可访问默认管理后台,但无法登录或执行危险操作。

修复方案
建议在不影响业务的前提下,将管理后台隐藏在非常规目录下或增加管理后台的访问限制。

存在可访问的管理控制台入口

漏洞描述

Web 控制台是一种基于 Web 的用户界面, 其常常被用于网站后台或者web容器控制台中,其不仅仅局限于容器或者网站管理后台,还包括一些数据库默认地址等。在web安全中,网站系统在泄漏其web容器(中间件)或者数据库的控制台后,存在增加被入侵的风险。常见的web控制台包括以下多种:tomcat、aria2、weblogic、websphere、oracle、jboss、等。这些web的容器控制台常见访问形式:http://hostname:port/load/,例如::8080/manage/

测试方法

常见的web控制台检测方法:整体思路为首先需识别网站容器的指纹,判断其所采用的中间件,然后去扫描其所开放的端口,根据开放端口信息和常见固定的路径,去判断其控制台地址。

以下列举常见控制台的检测方法:

1.	Apache+tomcat:tomcat常见的web控制台地址为:/manager/html或者添加端口::8080/manager/html,从TOMCAT5(开始默认/admin后台不存在,tomcat5之前的控制台为/admin。
2.	Weblogic控制台:http://[weblogic所在机器IP]:[weblogic端口]/console若没有指定端口,且安装在本机上则为:(weblogic默认端口为7001)http://localhost:7001/console。
3.	Websphere控制台:websphere的控制台常见有两种,一种是基于http,另一种是基于https的,分别为如下:http://localhost:9060/ibm/console和https://localhost:9043/ibm/console/。
4.	Oracle web控制台:一般默认的是http://localhost:5500/em,一般存放于Oracle安装文件夹下的install文件夹下中文本文件,上面有web控制台的地址。
5.	Mongodb web控制台:自带了Web控制台:默认和数据服务一同开启。他的端口在Mongodb数据库服务器端口的基础上加1000,如果是默认的Mongodb数据服务端口(Which is 27017),则相应的Web端口为28017,这个页面可以看到当前Mongodb的所有连接、各个数据库和Collection的访问统计,包括:Reads, Writes, Queries, GetMores ,Inserts, Updates, Removes、写锁的状态、以及日志文件的最后几百行(CentOS+10gen yum 安装的mongodb默认的日志文件位于/var/log/mongo/)。
6.	HP system managent控制台:该控制台一般默认的端口为2381,可在其后添加路径/?errno=100&severity=4,即可访问.https://localhost:2381/?errno=100&severity=4
7.	Service Registry 3控制台:在 Web 浏览器中键入以下 URL:http://hostname:port/soar/例如:http://localhost:6060/soar/如果系统中安装了 Registry,则 hostname 为 localhost。如果系统中尚未安装 Registry,请使用安装了 Registry 的系统的名称。port 的值通常为 6060,除非发生端口冲突。
8.	Tomcat控制台URL:/manager/html
9.	Tomcat控制台默认帐号admin,默认密码admin或空
10.	Jboss控制台URL:/jmx-console/
11.	Jboss控制台URL:/web-console/
12.	Jboss控制台默认无须登陆,或者admin/admin
13.	WebSphere控制台URL:/ibm/console/
14.	WebSphere默认帐号admin,默认密码admin
15.	Apache控制台URL:/server-status
16.	Axis2控制台URL:/axis2-admin/
17.	Axis2控制台默认口令帐户:admin/axis2
18.	iSAP控制台URL:/admin/
19.	iSAP控制台默认的帐号和密码:admin/admin
20.	“普元”管理控制台URL:/eosmgr/
21.	“普元”管理控制台默认的帐号和密码:sysadmin/000000
风险分析

攻击者使用弱口令扫描工具或者直接使用常见的弱口令去尝试登录Web中间件的管理控制后台
然后通过部署war包上传webshell,进而控制整个系统。

风险等级:
【高危】:可访问默认中间件控制台,且能过成功获取 shell。

【中危】:可访问默认中间件控制台,并成功登录,但无法获取 shell。
【低危】:可访问默认中间件控制台,但无法登录且无法执行危险操作。

修复方案

默认的web容器控制台泄漏于网络中,常常可被利用,进行对web系统的攻击,一旦进入这些控制台后,可对网站进行任意的部署,中断服务等危险行为,建议从以下几点出发,修复有关控制台地址泄漏的问题:

1、	对于必须暴露于公网或者其他网络中的控制台地址,则为其地址做访问白名单措施,即只允许白名单以内的用户IP地址可以访问到该控制台,通过过滤器(filter)实现:

(1) 创建客户端IP过滤器ClientIpFilter

package ;
import ;
import ;
import ;
import ;
import ;
import ;
import ;
public class ClientIpFilter implements Filter
{
    protected FilterConfig filterConfig;
    private String whiteIPlist[] = null;
    public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain)
        throws IOException, ServletException
    {
        String clientIP = ();        
        if(IsIPinWhitelist(clientIP))
		{
		 	//验证成功,继续处理
			//(clientIP+"调用Web Service,IP鉴权通过");
			(req,res);		
		}		
		else
		{
			//验证不成功,禁止用户调用该服务。
			(clientIP+"调用Web Service,IP鉴权不通过");
		 	//throw new ServletException(clientIP + "无权限访问Web Service!");
		}
    }    
	private boolean IsIPinWhitelist(String remoteIPAddress)
	{
		for(int i = 0; i < ; i++)
        {
			String strIP = [i];
			if((remoteIPAddress))
			{
				return true;
			}
        }		
		return false;
	}
	public void setFilterConfig(FilterConfig filterConfig)
    {
         = filterConfig;
    }
    public void destroy()
    {
        filterConfig = null;
    }
    public void init(FilterConfig config)
        throws ServletException
    {
         = config;
        String IPs = ("IPList");
         = (",");
    }
}

(2) 在中部署过滤器ClientIpFilter

在对应的文件的</web-app>前增加以下内容,其中蓝色部分为需要根据实际情况配置的IP地址白名单(也就是允许访问相应Web模块的客户端IP地址列表),IP地址间通过逗号隔开,不允许有空格;其中红色部分为需要根据实际情况配置的Web目录。参考代码:
<filter>
	   <filter-name>ClientIpFilter</filter-name>
	   <filter-class></filter-class>
		 <init-param>
		   <param-name>IPList</param-name>
		   <param-value>192.168.1.11,192.168.2.22,10.70.107.119</param-value>
		 </init-param>
	</filter>
	<filter-mapping>
	   <filter-name>ClientIpFilter</filter-name>
	   <url-pattern>/WebService/*</url-pattern>
	</filter-mapping>
2、	修改控制台默认的用户名和名吗,并为其控制台设置强壮的口令措施,防止可被恶意或简单猜解得到用户名和密码。
3、	修改web容器控制台的默认端口,默认路径,避免可被直接利用,访问得到地址。
例如:tomcat的修复方式:禁止别人访问tomcat主页,环境:tomcat 6.0 ;步骤1:在中 <Host name="localhost" appBase="webapps"修改改webapps为xxxxxx(自己设置的路径);步骤2:在中 :<user name="admin" password="xxxx" roles="admin,manager" /> 更改用户名和密码(需强壮)

参数溢出

漏洞描述

攻击者在参数中输入超长字符串,导致数据溢出,致使应用或者数据库报错引发相关信息泄露,或者引起拒绝服务攻击等问题。

测试方法

在前端可控参数中输入超长字符串

风险分析

攻击者可通过输入参数溢出触发应用服务器异常或服务器拒绝服务,影响系统可用性。

风险等级:

【高危】:超长参数导致服务器报错引发崩溃拒绝服务。

修复方案
限制输入参数内容的长度。

任意文件下载

漏洞描述
  • 目录遍历(任意文件下载)漏洞不同于网站目录浏览,此漏洞不仅仅可遍历系统下web中的文件,而且可以浏览或者下载到系统中的文件,
  • 攻击人员通过目录遍历攻击可以获取系统文件及服务器的配置文件等等。
  • 一般来说,他们利用服务器API、文件标准权限进行攻击。
  • 严格来说,目录遍历攻击并不是一种web漏洞,而是网站设计人员的设计“漏洞”。
测试方法:
  • 通过web漏洞扫描工具对网站实施扫描可能发现目录遍历或者任意文件下载漏洞,发送一系列”…/”字符来遍历高层目录,并且尝试找到系统的配置文件或者系统中存在的敏感文件。
  • 也可通过判断网站语言,并根据其url中部分提供的参数,进行构造相关的路径信息,如收集到网站中间件版本为apache,则想办法构造…/…/…/ WEB-INF/等,然后查看其是否可被下载出来。随后可构造下载系统文件。
    风险分析:如果web设计者设计的web内容没有恰当的访问控制,允许http遍历,攻击者就可以访问受限的目录,并可以在web根目录以外执行命令。
风险等级:
【高危】:各场景通用
修复方案:
1、	净化数据:对用户传过来的文件名参数进行硬编码或统一编码,对文件类型进行白名单控制,对包含恶意字符或者空字符的参数进行拒绝。
2、	web应用程序可以使用chroot环境包含被访问的web目录,或者使用绝对路径+参数来访问文件目录,时使其即使越权也在访问目录之内。www目录就是一个chroot应用. 由chroot创造出的那个根目录,叫做“chroot*”(所谓"*"就是指通过chroot机制来更改某个进程所能看到的根目录,即将某进程限制在指定目录中,保证该进程只能对该目录及其子目录的文件有所动作,从而保证整个服务器的安全,详细具体chroot的用法,可参考:/frozen_fish/article/details/2244870
3、	任意文件下载漏洞也有可能是web所采用的中间件的版本低而导致问题的产生,例如ibm的websphere的任意文件下载漏洞,需更新其中间件的版本可修复。
4、	要下载的文件地址保存至数据库中。
5、	文件路径保存至数据库,让用户提交文件对应ID下载文件。
6、	用户下载文件之前需要进行权限判断。
7、	文件放在web无法直接访问的目录下。
8、	不允许提供目录遍历服务。
9、	公开文件可放置在web应用程序下载目录中通过链接进行下载。
参考代码:
public String download() throws Exception {
    	//获取文件id
String id = ().getParameter("id");
		try {
			//通过id进行文件查询
DownloadFile downFile = ((id));
			// 获取该附件的类型
			byte[] bt = null;
			bt = (); 
			HttpServletResponse res  =();
			();
			("application/x-msdownload");
			("Content-Disposition", "attachment;filename="+ ((), "UTF-8"));
			OutputStream out = ();
			(bt);
			();
			();
		} catch (Exception e1) {
			();
		}

		return null;
}

摘抄


现在的你也许平庸渺小,

但也要勇敢的走下去,

不去考虑是万丈深渊还是星辰大海,

记得一直走就好。