APP下载

Web网站敏感目录自动检测工具设计

2018-06-29李晨阳陈吟樊云王镜琅雷敏

网络空间安全 2018年1期

李晨阳 陈吟 樊云 王镜琅 雷敏

摘 要:敏感目录是指目标服务器上存在含有敏感名称的目录,这些目录中可能包含了大量的敏感文件和信息。利用该漏洞,攻击者可全面了解目标服务器的网站架构,甚至获取敏感文件中的敏感信息,从而得到目标服务器的控制权,实施进一步攻击。论文介绍了敏感目录漏洞及其危害,对HTTP协议及URL进行分析,设计并实现了以字典为检测标准的自动化检测脚本,判断指定主机是否存在该漏洞,并在实际测试中被成功应用。

关键词:网站扫描;敏感目录;自动化检测

中图分类号:TP312 文献标识码:A

Design of automated detection tool for sensitive path of websites

Abstract: Sensitive paths are paths on the target server that contain sensitive names, which may contain a large number of sensitive files and information. Using this vulnerability, attackers can fully understand the target server's site architecture, and even access sensitive information in sensitive files to gain control of the target server for further attacks. This paper introduces the sensitive paths vulnerability and its effects, analyzes the HTTP protocol and URL, designs and implements the automated detection script based on the dictionary which is successfully applied in the actual test to judge whether the server exists the vulnerability.

Key words: web scan; sensitive path; automated detection

1 引言

Web应用的易于开发性、开放性使得Web应用快速发展,与此同时安全问题也日益突出,Web应用已成为攻击者攻击的主要对象。2015年史考特证券遭遇攻击,同年Web托管公司000Webhost也遭遇黑客攻击,数百万名用户敏感信息被泄露。此外,缓冲区溢出、跨站点脚本、目录遍历等各种安全问题也不断涌现。

敏感目录漏洞是一种常见的Web漏洞,它是指目标服务器上存在含有敏感名称的目录,例如/upload、/database、/bak等。攻击者可通过目标服务器的目录信息全面了解网站架构,从而对网站进行入侵攻击,获取服务器后端数据库信息,使得用户敏感信息泄露。目前,中国国家信息安全漏洞共享平台(CNVD)对该漏洞的评级为“低危”。

鉴于敏感目录漏洞的危害和影响,方便网站运维人员和管理人员及时发现并解决问题,本文提出了编写Python脚本来实现对网站敏感目录漏洞的自动扫描与检测。本文通过对HTTP协议以及URL的分析,设计了基于字典的通过探测服务器响应信息来检测Web网站敏感目录的脚本。最后,以内网中一台存在敏感目录漏洞的主机(试验机)为例,测试了脚本的运行结果。

2 漏洞简介

漏洞指的是在系统设计、实现、管理或者操作时产生的可能引发系统安全问题的缺陷或弱点,使得系统或其应用数据的保密性、完整性、可用性、访问控制以及监测机制等方面面临威胁。Web漏洞可分为服务器端漏洞和客户端漏洞两大类。

敏感目录是指目标服务器中含有敏感名称或敏感文件的目录,如/admin、/robots.txt、/index.php、/upload等。利用该漏洞,攻击者可全面了解目标服务器的网站架构。此外,敏感名称的目录中可能包含了大量的敏感文件和脚本,如服务器的配置信息、管理脚本、数据库信息以及后台管理界面等,攻击者可通过暴力破解等方式直接访问管理界面,获取目标服务器的控制权,实施进一步的攻击,并对目标服务器造成严重的危害。

敏感目录虽是低危漏洞,但若被攻击者利用,同样会对目标服务器造成巨大的危害。若网站运维人员或管理人员发现检测出的敏感目录中包含了敏感文件或脚本时,可以对该目录进行非常规的重命名;也可以设置权限,禁止用户访问;还可将敏感文件或脚本与网站目录分离,放在不易猜测的路径中;若目录中内容是非必要的,则可以考虑删除该目录。

3 检测工具设计

3.1 HTTP协议分析

本文设计的检测工具通过向目标服务器发送请求,并根据获取的服务器响应来检测Web网站的敏感目录,这一功能基于HTTP协议。

超文本傳输协议(Hypertext Transfer Protocol,HTTP)是WWW服务器与浏览器间传输超文本的网络协议,它是基于请求与响应模式的、无状态的协议,绝大多数的Web开发都是构建在HTTP协议上的Web应用。HTTP协议示意图如图1所示。

HTTP报文包括请求报文和响应报文。请求报文由请求行、请求头、空行以及正文四部分构成。请求行一般由请求方式、URI以及协议版本组成,在HTTP/1.1版本提供的八种请求方式中,POST方法和GET方法最为常见,其中GET方法常用于对特定资源的访问请求,在本文设计的检测工具中使用了GET方法。请求报文结构如图2所示。

HTTP响应报文也由四部分构成,包括状态行、响应头、空行以及响应正文。状态行一般由协议版本、状态码以及消息组成,例如:

HTTP/1.1 200 OK

其中HTTP/1.1表示该报文使用的HTTP协议版本,200为响应报文的状态码,表示找到了请求的特定资源,响应正文OK表示一切正常,是指服务器返回的资源信息。根据请求信息的不同,服务器返回的响应状态码也不同。常见的响应报文状态码及其所对应的含义如图3所示。

本文设计的敏感目录检测工具则是根据探测服务器响应信息,即获取响应报文的状态码来设计实现的。

3.2 URL分析

Web站点敏感目录的爬取与URL密切相关,统一资源定位符(Uniform Resource Locator,URL)是对互联网上可获取资源的位置及访问方法的简洁表示,互联网上每个资源都有唯一的URL。

基本的URL包括协议/模式(Scheme)、服务器名称(Host)、端口(Port)和路径(Path)四部分,此外还有用户名(Name)和密码(Pwd)、参数(Parameters)、查询(Query)以及片段(fragment)等。URL组成及含义如图4所示。

URL的通用格式为:

scheme://name:pwd@host[:port]/path/[;params][?query][#fragment]

3.3 自动化脚本设计

基于HTTP协议及URL格式分析,本文按照图5思路设计编写自动化检测脚本。

首先,通过用户输入获取目标服务器地址及字典参数:

获取成功后,需要使用Python中urlparse函数对目标服务器

URL进行解析,获取目标服务器名称(host)信息,并将该信息作为数据库名称永久存储。urlparse函数可将URL解析为6个组件,但其在解析时,URL开头部分必须包含“//”,否则无法正确解析出服务器名称,所以需要对获取的服务器地址进行验证或修改:

本文设计的自动检测脚本需要获取响应报文的状态码等信息,这里选用Python第三方库requests来完成,requests.get()方法表示以GET方式发送请求,其返回结果为一个存储了服务器响应信息的response对象,响应信息包括状态码,响应实体等。该部分关键代码为:

其中target为要请求的URL。将allow_redirects参数设置为False,表示不允许页面跳转,若出现页面跳转则返回的状态码为302,而不是200。

请求的URL则是由字典及用户输入的服务器地址共同构造的,所以需要将字典中敏感目录以行为单位提取出来,保存在以list命名的数组中,接着再分别与服务器地址构造成URL。关键代码为:

此外还需要考虑到敏感目录信息的永久存储,Python 2.5 x以上版本已默认自带sqlite3模块。首先需要创建用于存储服务器扫描结果的数据库,确定表名、列名以及列的数据类型。其中数据库名由URL解析获得的host信息确定,列名则包括返回状态码(status_code,TEXT)和服务器存在的敏感目录(path,TEXT)。

在使用requests.get()方法获取到服务器的响应信息后,需要判断请求的URL是否已存在于数据库中,若不存在且响应码不为404,通过insert将该条信息插入对应数据库的表中即可。关键代码如下:

在脚本运行结束后,若目标服务器名称对应的数据库不为空,则表示该服务器存在敏感目录,返回并显示扫描结果:

3.4 实际测试

实际测试环境为含有敏感目录的docker镜像,首先使用如如6所示命令加载镜像:

$ docker load < sens_path.tar

接着使用如图7所示命令启动被加载成功的docker镜像:

$ docker run -d -p 8004:80 joomla:v2

本次测试中,使用自定义字典payload.txt对目标网站进行扫描,输入命令“python sens_path.py 10.109.35.113:8004(要检测的地址)”,运行自动化检测脚本,可检测出目标网站存在的敏感目录,如图8所示。

4 结束语

Web应用不断发展的同时,其安全问题也受到越来越多的重视关注。本文通过对HTTP协议以及URL结构的分析,提出了编写Python脚本以实现对Web网站敏感目录的自动检测。通过本文设计的自动化检测脚本,可对目标服务器进行快速扫描,便于管理、运维人员及时发现安全问题。

基金项目:

国家科技支撑计划(项目编号:2015BAH08F02)。

参考文献

[1] 王琪.面向Web应用的漏洞扫描技术研究[D].南京邮电大学, 2016.

[2] 王涛.HTTP协议技术浅析[J].中国新技术新产品, 2013(22):14-14.

[3] 胡志偉.Web应用安全漏洞扫描系统的设计与实现[D].北京邮电大学,2013.

[4] 胡冬梅.基于B/S架构Web应用安全防范[J].信息安全与通信保密,2013(1):31-31.

[5] 杨新英.基于网络爬虫的Web应用程序漏洞扫描器的研究与实现[D].电子科技大学, 2010.

[6] 丁敏.基于python语言实现自动化测试的研究[J].数字技术与应用,2010(3):88-88.

[7] 钱劼,雷敏,邹仕洪.Java反序列化漏洞自动检测脚本设计[J].网络安全技术与应用,2017,(08):66-68.