2023年11月28日发(作者:)

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

⽂章⽬录

泄漏敏感信息

漏洞描述

搜索引擎可以通过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⽬录下⾯的⽬录

10Allow: /tmp 这⾥定义是允许爬寻tmp的整个⽬录

11Allow: .htm$ 仅允许访问以".htm"为后缀的URL

12Allow: .gif$ 允许抓取⽹页和gif格式图⽚

13Sitemap: ⽹站地图 告诉爬⾍这个页⾯是⽹站地图。

敏感⽂件信息泄漏

漏洞描述:

敏感数据包括但不限于:等,

⼝令、密钥、证书、会话标识、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响应头

使⽤代理软件如

burpsuitefiddler,拦截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;重启N

ginx

默认页⾯泄漏

漏洞描述

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

测试⽅法:

可以利⽤web漏洞扫描器或⽬录扫描器扫描web应⽤进⾏检测

根据⽹站使⽤的对应的⽰例页⾯。

第三⽅组件和框架⼿⼯输⼊

风险分析

攻击者可利⽤默认页⾯提供的功能和信息对服务器进⾏攻击。

风险等级:

【⾼危】:存在可访问默认页⾯,泄露⾼风险敏感信息(如:tomcat 的 examples ⽬录)。

【中危】:存在可访问默认页⾯,泄露于业务、操作和配置相关的敏感信息。

【低危】:存在可访问的默认页⾯,但未泄露敏感信息。

修复⽅案

建议在不影响业务的前提下删除默认页⾯。

存在可访问的管理后台⼊⼝

漏洞描述

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

测试⽅法:

可以利⽤web漏洞扫描器或⽬录扫描器扫描web应⽤进⾏检测

识别⽹站使⽤的cms框架,判断其默认的管理后台地址。

.在⽹站

中寻找管理后台超链接

风险分析

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

风险等级:

【⾼危】:可访问默认管理后台,通过后台获取 shell。

【中危】:可访问默认管理后台,并成功登录,但⽆法获取 shell。

【低危】:可访问默认管理后台,但⽆法登录或执⾏危险操作。

修复⽅案

建议在不影响业务的前提下,将管理后台隐藏在⾮常规⽬录下或增加管理后台的访问限制。

存在可访问的管理控制台⼊⼝

漏洞描述

测试⽅法

常见的web控制台检测⽅法:整体思路为⾸先需识别⽹站容器的指纹,判断其所采⽤的中间件,然后去扫描其所开放的端⼝,根据开放端⼝

信息和常见固定的路径,去判断其控制台地址。

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

1. Apache+tomcattomcat常见的web控制台地址为:/manager/html或者添加端⼝::8080/manager/html,从TOMCAT5(开始默认/

admin后台不存在,tomcat5之前的控制台为/admin

2. Weblogic控制台:[weblogic所在机器IP]:[weblogic端⼝]/console若没有指定端⼝,且安装在本机上则为:(weblogic默认端⼝为7001localhost:

7001/console

3. Websphere控制台:websphere的控制台常见有两种,⼀种是基于http,另⼀种是基于https的,分别为如下:localhost:9060/ibm/consoleloc

alhost:9043/ibm/console/

4. Oracle web控制台:⼀般默认的是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,即可访问.localhost:2381/

?errno=100&severity=4

7. Service Registry 3控制台:在 Web 浏览器中键⼊以下 URLhostname:port/soar/例如:localhost:6060/soar/如果系统中安装了 Registry,则 h

ostname 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 s;

import ption;

import Chain;

import tRequest;

import tResponse;

import ;

import tException;

import Config;

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 = oteAddr();

if(IsIPinWhitelist(clientIP))

{

//验证成功,继续处理

//n(clientIP+"调⽤Web ServiceIP鉴权通过");

er(req,res);

}

else

{

//验证不成功,禁⽌⽤户调⽤该服务。

n(clientIP+"调⽤Web ServiceIP鉴权不通过");

//throw new ServletException(clientIP + "⽆权限访问Web Service");

}

}

private boolean IsIPinWhitelist(String remoteIPAddress)

{

for(int i = 0; i < ; i++)

{

String strIP = Plist[i];

if((remoteIPAddress))

{

return true;

}

}

return false;

}

public void setFilterConfig(FilterConfig filterConfig)

{

Config = filterConfig;

}

public void destroy()

{

filterConfig = null;

}

public void init(FilterConfig config)

throws ServletException

{

Config = config;

String IPs = tParameter("IPList");

Plist = (",");

}

}

(2) 在中部署过滤器ClientIpFilter

在对应的⽂件的</web-app>前增加以下内容,其中蓝⾊部分为需要根据实际情况配置的IP地址⽩名单(也就是允许访问相应Web模块的客户端IP地址列

表),IP地址间通过逗号隔开,不允许有空格;其中红⾊部分为需要根据实际情况配置的Web⽬录。参考代码:

<filter>

<filter-name>ClientIpFilter</filter-name>

<filter-class>IpFilter</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"修改改weba

ppsxxxxxx(⾃⼰设置的路径);步骤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所采⽤的中间件的版本低⽽导致问题的产⽣,例如ibmwebsphere的任意⽂件下载漏洞,需更新其中间件的版本可修复

4 要下载的⽂件地址保存⾄数据库中。

5 ⽂件路径保存⾄数据库,让⽤户提交⽂件对应ID下载⽂件。

6 ⽤户下载⽂件之前需要进⾏权限判断。

7 ⽂件放在web⽆法直接访问的⽬录下。

8 不允许提供⽬录遍历服务。

9 公开⽂件可放置在web应⽤程序下载⽬录中通过链接进⾏下载。

参考代码:

public String download() throws Exception {

//获取⽂件id

String id = uest().getParameter("id");

try {

//通过id进⾏⽂件查询

DownloadFile downFile = tityById(ong(id));

// 获取该附件的类型

byte[] bt = null;

bt = tent();

HttpServletResponse res =ponse();

();

tentType("application/x-msdownload");

der("Content-Disposition", "attachment;filename="+ (e(), "UTF-8"));

OutputStream out = putStream();

(bt);

();

();

} catch (Exception e1) {

tackTrace();

}

return null;

}

摘抄

现在的你也许平庸渺⼩,

但也要勇敢的⾛下去,

不去考虑是万丈深渊还是星⾠⼤海,

记得⼀直⾛就好。