APP下载

Web漏洞扫描系统的设计与实现

2024-12-31龙华秋周皓健燕紫君

现代信息科技 2024年12期
关键词:安全漏洞网络安全

摘" 要:Web系统所面临的安全问题日益严峻,为减轻安全从业人员的压力,设计一个能够对网站以及服务器进行目标指纹和关键信息搜集的Web漏洞扫描系统。系统包括端口扫描、备份扫描、子域名扫描、Web指纹识别、查询备案信息、C段扫描、漏洞扫描等模块,其能够快速准确地发现各种Web漏洞,并给出详细的漏洞扫描报告。安全从业人员可以通过系统实现对Web网站框架的自动化扫描,快速定位漏洞,并及时修复,从而提高Web系统的安全性。

关键词:网络安全;安全漏洞;Web安全

中图分类号:TP309" 文献标识码:A" 文章编号:2096-4706(2024)12-0032-04

Design and Implementation of Web Vulnerability Scanning System

LONG Huaqiu1, ZHOU Haojian1, YAN Zijun2

(1.School of Intelligent Manufacturing, Wuyi University, Jiangmen" 529020, China;

2.School of Open Education, Jiangmen Open University, Jiangmen" 529000, China)

Abstract: The security issues faced by Web systems are becoming increasingly severe, in order to alleviate the pressure on security practitioners, a Web vulnerability scanning system is designed that can collect target fingerprints and key information from websites and servers, including port scanning, backup scanning, subdomain scanning, Web fingerprint recognition, query of record information, C-segment scanning, vulnerability scanning, etc. It can quickly and accurately discover various Web vulnerabilities and provide detailed vulnerability scanning reports. This system enables security practitioners to automatically scan the Web website framework, quickly locate vulnerability, and repair them in a timely manner, thereby improving the security of Web systems.

Keywords: network security; security vulnerability; Web security

0" 引" 言

Web扫描器是一种自动化的Web应用程序安全测试工具。通过检验和利用Web应用程序的漏洞和脆弱点,Web漏洞扫描器可以模拟黑客攻击,以此评估Web应用程序的安全性。它可以自动化扫描、分析、识别并报告Web应用程序中的安全漏洞,例如SQL注入、信息泄露、目录穿越和跨站请求伪造攻击等[1]。

在安全测试领域,Web扫描器通常被用于评估Web应用程序的安全性,评估网络渗透测试的实际效果。通过爬取网页内容、Cookie、网页路径、Robots.txt文件、开源网页文本特征、图标、TCP响应包、端口默认列表等网站信息特征,对网站的可能类型和架构进行判断,从而确认网站可能遭受的风险,并进行扫描验证[2]。它可以在短时间内发现许多安全漏洞,大大提高了测试的效率和准确性。Web扫描器一般分为两种类型:被动式和主动式[3]。被动式扫描器通常是基于代理的,它会监控Web应用程序的流量,识别HTTP请求和响应中的漏洞,并生成报告;主动式扫描器则是通过对Web应用程序进行主动测试,例如通过发送恶意数据包、尝试绕过身份验证和检测错误信息等方式来发现安全漏洞。Web扫描器是一种重要的安全测试工具,可以帮助企业评估Web应用程序的安全性。

1" 系统设计

1.1" 系统总体架构设计

系统采用B/S架构,后端采用Python+Flask,前端采用JavaScript+CSS+HTML+Jinja,其主要优点有:跨平台、可扩展性、性能高、易维护、开发效率高[4]。

1.2" 系统模块设计

1.2.1" 漏洞扫描选择模块

漏洞扫描选择模块为系统引导用户可选扫描模块,主要分为如图1所示的8个模块,用户点击相应模块进入扫描即可。

1.2.2" 用户传参模块

系统在进入主页后提示用户选择相应的功能,选择完成后,提示用户输入相应的URL或者IP。输入的数据会被传入后端进行白名单检查,如果不是URL或者IP则不能成功运行程序,此举为安全检查,防止用户攻击错误网址或者输入不安全参数导致其他异常问题。传参使用了JS代码传入后端再使用Python运行,运行完成之后返回数据传给前端,使用Jinja模板配合CSS展示并且美化数据。主要代码如下:

try:

if" notcheck_url(url):

print(\"url格式错误\")

exit()

ifurl.startswith(\"http://\"):

url = url[7:]

ifurl.startswith(\"https://\"):

url = url[8:]

ifurl.startswith(\"www.\"):

url = url[4:]

ifurl.endswith(\"/\"):

url = url[:-1]

ifurl.count(\":\") gt; 0:

url = url.split(\":\")[0]

url = url.strip()

returnurl

2" 系统实现

2.1" 实现思路

前端JavaScript+HTML传参到后端,Flask模板接受前端传递的参数,再传给Python写的方法函数执行一系列扫描操作,再把执行的结果通过Jinja模板引擎返回给前端,展现给用户。这样的流程,可以构建高效、可靠和易于维护的Web漏洞扫描器。

2.2" 功能模块实现

2.2.1" 端口扫描模块

很多网络威胁都是通过对主机特定的端口进行扫描,以判断这些端口是否存在漏洞,并利用发现的漏洞侵入主机中[5]。在实际进行安全漏洞扫描的过程中,网络与目标主机相通的端口绝对是重中之重。本模块函数实现了一个基于Nmap的端口扫描模块,流程如图2所示。输入一个URL和一个端口列表,输出是一个字典,包括扫描结果和消息;如输入IP地址,扫描结果显示有多个开放的端口和显示端口的服务类型[6]。通过端口扫描可以帮助用户了解目标主机上的服务类型和运行状态[7],以便进行后续的安全评估和漏洞扫描等操作,例如可以爆破22端口的SSH服务,直接获取服务器控制权限等。

2.2.2" 备份扫描模块

函数实现了一个备份文件扫描模块,备份文件是指网站的管理员在备份网站源码的时候,不小心将其.tar或者.zip文件放在网站目录下,导致攻击者可以通过字典爆破的方式下载到网站源代码,源码泄露之后可以通过代码审计的方式发现其网站脆弱点,进而成功攻击网站。此代码具体实现是用函数输入一个URL地址,输出是一个列表,包含了备份文件的URL及其状态(成功或失败)。

2.2.3" 子域名扫描模块

函数实现了一个子域名扫描模块,子域名扫描是指通过对目标网站进行DNS解析,寻找目标网站下的子域名。通过这些子域名进入目标系统。函数的输入是一个顶级域名,输出是一个列表,包含了所有能够找到的子域名。这些子域名可以成为黑客攻击的目标,可能包括后台等其他敏感系统、储存数据、邮件服务等。

2.2.4" Web指纹识别模块

Web指纹识别是一种识别Web应用程序所使用的技术栈的技术[8]。该技术可通过分析HTTP响应报文的特征,识别应用程序所使用的Web框架、Web服务器、操作系统、语言和其他技术。这种技术通常用于识别目标系统的弱点和漏洞。

首先,代码会检查传入的URL是否合法,如果不合法则返回错误信息。接着,使用EHole开源组件对URL进行指纹识别。使用该组件扫描,将结果输出到文件finger_scan_req.txt中。等待3秒以确保组件已经完成了指纹识别,并将结果写入finger_scan_req.txt。接着读取finger_scan_req.txt文件中的第一行,将其中包含的URL、CMS、服务器、状态码、长度和标题等信息提取出来,存储到一个字典中。最后,将结果字典以JSON格式写入文件all.txt中,并返回结果字典,使用subprocess模块来执行命令行,可以避免直接调用系统Shell带来的安全问题。

2.2.5" 查询备案信息模块

该备案查询模块使用Python的Whois库来查询给定URL的备案信息。在函数中,首先通过调用Whois函数并传入URL参数来获取相应URL的Whois信息。然后,将获取到的信息存储到一个字典中,包括域名、注册者名称、注册者邮箱、创建日期和过期日期等信息。最后,将结果返回。如果出现异常,则将异常信息打印出来并返回None。通过备案信息可以查询到网站管理员或者备案人的邮箱等信息,从而进行钓鱼攻击或者发现其他相同备案的网站进行攻击。

2.2.6" C段扫描模块

C段扫描指的是对和目标服务器IP处在同一个C段的其他服务器进行扫描,以探测该段IP地址范围内存活的主机[9]。它通过使用concurrent.futures模块中的ThreadPoolExecutor类实现多线程的并发扫描,从而提高扫描的效率。首先,该程序通过构造一个scan_ip函数来实现IP地址的扫描功能。这个函数使用了Python标准库中的subprocess模块,调用系统的ping命令来扫描指定的IP地址。如果扫描结果中包含TTL信息,那么就说明该IP地址是存活的,这时就返回该IP地址;否则,返回None。其次,程序使用concurrent.futures模块中的ThreadPoolExecutor类创建一个线程池,再使用executor.submit方法提交255个扫描任务,每个任务对应C段IP地址范围内的一个IP地址。程序调用concurrent.futures.as_completed方法来获取已完成的任务结果。如果某个任务返回了一个非None的结果,那么就将该结果加入一个列表。最后,程序使用自定义的排序函数sort_key对结果列表进行排序,排序按照C段IP地址中第4段的大小进行。该模块通过利用Python标准库和第三方库提供的功能,实现对C段IP地址范围的高效扫描。

2.2.7" 漏洞扫描模块

此模块为Web漏洞扫描器中最重要的一个模块,其原理是向目标不断发送PoC,然后接受目标返回包,并判断返回包中是否存在对应漏洞数据,以证明其存在漏洞[10]。该程序首先调用一个Check_URL函数来检测输入的URL是否合法。如果不合法,程序就会输出错误信息并返回。如果URL合法,程序就会删除之前保存的vuln_scan.txt文件,然后调用Afrog开源组件来进行漏洞扫描。Afrog是一款采用Go语言编写的性能出色、高速稳定的漏洞扫描开源组件。其PoC涉及SQL注入、CNVD(国家信息安全漏洞共享平台)、默认密码、文件上传、任意文件删除、未授权访问、任意文件读取、命令执行等多种漏洞类型,集成的PoC较为广泛。扫描命令中的-t选项,指定要扫描的目标URL、-nf和-nt选项,指定不输出header和footer信息、-json选项,指定输出JSON 格式的扫描结果到vuln_scan _req.txt文件中。扫描完成后,程序打开vuln_scan_req.txt文件,读取其中的JSON格式数据并进行解析。它从每个扫描结果中提取漏洞名称、漏洞URL和漏洞等级信息,然后将它们存储在一个字典中。最后,程序输出漏洞扫描结果,并返回该字典对象。

2.2.8" 报告查阅模块

查阅报告是在生成报告之后进行查阅,这里使用的是Jinja网页模板,用于展示已经生成的漏洞扫描报告列表。具体解释如下:首先,定义一个网页布局,包括一个标题和一个用于展示漏洞扫描报告列表的容器。其次,使用Jinja2模板引擎,通过Python脚本将已经生成的漏洞扫描报告列表传递到模板中。这里使用Zip函数将报告名称和报告创建时间配对。使用for循环语句,遍历漏洞扫描报告列表,为每个报告生成一个卡片。

3" 系统功能测试

3.1" 系统功能

Web漏洞扫描系统的功能如表1所示。

3.2" 系统运行及测试

一个系统在正式上线前需要进行功能性、安全性、可靠性测试,以保证系统各方面的指标达到预期要求。在Web漏洞扫描系统中,系统测试主要涵盖功能测试、性能测试和安全测试等几个方面。功能测试在于验证系统是否能够实现稳定运行,满足设计要求;性能测试则评估系统的响应时间、并发处理能力和负载均衡等指标;安全测试则专注于评估系统的安全性能,包括漏洞检测能力、漏洞报告准确性等;兼容性测试的主要目的是验证Web漏洞扫描系统在各种操作系统、浏览器等环境下的适配性。进行系统测试时,必须进行全面的测试用例设计,以确保问题能够被及时发现并进行修复和优化。

本系统功能较多,主页如图3所示,选取端口扫描模块进行测试,该模块扫描是针对指定IP地址或者URL地址进行的端口扫描,扫描的目的是获取该IP地址上开放的端口情况以及端口所对应的服务。如图4所示,输入IP地址为43.136.96.103,扫描结果显示有多个开放的端口,包括21、22、80、111、3306、8888端口和显示的端口的服务类型,例如21端口对应的服务类型为ftp,22端口对应的服务类型为SSH,80端口对应的服务类型为HTTP等。通过端口扫描可以帮助用户了解目标主机上的服务类型和运行状态,以便进行后续的安全评估和漏洞扫描等操作,例如可以爆破22端口的SSH服务,直接获取服务器控制权限。

4" 结" 论

所设计的Web漏洞扫描系统立足于提供安全可靠的扫描,运用Python语言,采用Flask技术、多种库以及第三方模块,实现了快速、精准、有效的漏洞扫描。从安全从业者角度看,我们的Web漏洞扫描系统提供了便捷、强大、丰富的功能,集成了渗透测试过程中所需的大部分工具及技术,用户可以通过系统进行端口扫描、备份扫描、子域名扫描、Web指纹识别、查询备案信息、C段扫描和漏洞扫描等操作,同时系统还提供了漏洞扫描报告,让用户可以更好地了解漏洞扫描情况。Web漏洞扫描系统可以帮助他们全面了解目标网络的安全状况,并发现可能存在的安全隐患,从而提高渗透测试的效率和准确性。

参考文献:

[1] 廖微.智能微电网中具有可扩展性的Web漏洞扫描工具研究与实现 [J].信息安全研究,2022,8(12):1198-1208.

[2] 龙华秋,温强,余卓林,等.对于资产威胁评估系统的分析与研究 [J].网络空间安全,2021,12(Z4):25-32.

[3] 段鹏飞.基于Web应用安全扫描器的设计与实现 [D].兰州:西北师范大学,2021.

[4] 吕汝勋,龙华秋,容振邦.基于Python的渗透测试辅助系统开发 [J].网络安全技术与应用,2018(2):58-60.

[5] 陈俊华.网络漏洞扫描系统研究与设计 [J].信息网络安全,2013(5):64-66.

[6] 靳建宇.基于Web技术的漏洞扫描系统在企业安全中的应用 [J].现代信息科技,2021,5(13):136-138.

[7] 梁松林,林伟,王珏,等.面向后渗透攻击行为的网络恶意流量检测研究 [J].计算机工程,2024,50(5):128-138.

[8] 姚茗亮,鲁宁,白撰彦,等.面向网络资产漏洞评估的设备指纹搜索引擎构建方法 [J].电子学报,2019,47(11):2354-2358.

[9] 白波,冯云,刘宝旭,等.基于网络行为的攻击同源分析方法研究 [J].信息安全学报,2023,8(2):66-80.

[10] 常会鑫. Web安全漏洞检测系统设计及优化 [D].唐山:华北理工大学,2023.

作者简介:龙华秋(1988—),男,汉族,广东吴川人,中级工程师,硕士研究生,研究方向:信息安全、计算机系统管理;周皓健(2002—),男,汉族,广东潮州人,本科在读,研究方向:信息安全;燕紫君(1993—),男,汉族,湖北仙桃人,中级工程师,硕士研究生,研究方向:计算机系统管理。

猜你喜欢

安全漏洞网络安全
网络安全知多少?
基于大数据技术的软件安全漏洞自动挖掘方法研究
网络安全
网络安全人才培养应“实战化”
安全漏洞太大亚马逊、沃尔玛和Target紧急下架这种玩具
上网时如何注意网络安全?
基于安全漏洞扫描的校园网告警系统的开发与设计
小洞不补 大洞吃苦安全漏洞你有吗?
我国拟制定网络安全法
“4.29首都网络安全日”特别报道