基于Python的自动代理Web漏洞扫描器的设计与实现

2020-07-30 14:03孟清路贺俊刘对高雨
科技视界 2020年17期
关键词:扫描器爬虫漏洞

孟清 路贺俊 刘对 高雨

摘 要

Web扫描器是提高网站安全性,让渗透效率快速提升不可或缺的一部分,现有的优秀扫描器的扫描功能都很强大,但是代理功能却并不强。本文开发了一款基于Python的自动代理Web漏洞扫描器,利用爬虫和asyncio技术维护一个动态的免费代理池,通过随机调用代理池里的有效代理进行Web扫描。因为测试全程可以使用随机代理,所以即使出现多个代理被安全设备发现的情况下也能继续进行有效的测试,这将大大提高授权情况下的黑盒测试下的效率。同时爬虫还使用了多进程,布尔去重,广度优先爬取等技术进一步减少测试所需要的时间。

关键词

代理扫描;渗透测试;Web安全;爬虫

中图分类号: TP393.08                 文献标识码: A

DOI:10.19694/j.cnki.issn2095-2457 . 2020 . 17 . 14

Abstract

Web scanners are an integral part of Web site security and penetration efficiency, and the best existing scanners have powerful scanning capabilities, but not as powerful proxies.This paper develops a python-based automated proxy Web vulnerability scanner, which USES crawler and asyncio technology to maintain a dynamic free proxy pool, and randomly invokes effective proxies in the proxy pool for Web scanning.Because random agents can be used throughout the testing process, effective testing can continue even if multiple agents are discovered by security devices, which will greatly improve the efficiency of black box testing under authorization.The crawler also USES multi-process, Boolean de-weighting, breadth-first crawling and other techniques to further reduce the time required for testing.

Key Words

Proxy scanner; Penetration testing; Crawler

0 引言

互联网的不断发展,日新月异的计算机技术使得Web产品的不断发展,各个领域对于互联网的需求也突显了出来。自十八大以来,习总书记对我国的网络安全问题十分看重[1]随着在2016年《中华人民共和国网络安全法》法案正式通过,并且该法案将于次年6月起开始施行[2],社会各界对于网络安全也重视了起来,可如何保障Web产品的安全已经成了一大难题。

在网络安全测试中渗透测试是一个十分重要的测试方法,这项技术已经存在数十年[3]。现如今虽然市面上有了几款较为成熟的漏洞扫描检查工具可以帮助开发人员和网站维护人员完成大部分的安全防护工作,但是几乎所有的工具的Web代理功能都非常的弱,甚至有些都没有代理功能。这就导致大部分扫描器对于防护弱的网站时可以肆无忌惮的乱扫,但是面对安全防护不错的网站就無能为力了,为了保护好测试者,降低测试者在授权的黑盒测试中被现有的安全防护措施和设备所发现的概率,一款可以自动代理的Web扫描器就非常重要了。

1 软件设计

1.1 软件需求分析

此次要设计的漏洞扫描器是一个可以自动代理的Web扫描器,扫描器要实现自动代理功能一个可自行维护的Web代理池就非常重要,其次作为一款扫描器基本的Web扫描功能是产品的核心,最后要实现对扫描的信息进行有效的存储和输出。需求分析流程图如图1。

1.1.1 代理池模块需求分析

在互联网高度发达的今天,网络爬虫已经成为在重复采集数据中不可或缺的一部分[4]。代理池的作用也就越来越大了,为了维护一个可用的高质量的代理池一般需要大量的时间和金钱,如果把钱花在维护代理池,这对于大部分的渗透测试来说可谓是本末倒置,所以本软件所设想的是一个可积累,免费,实用的代理池模。要实现这些功能就需要从互联网上的免费代理网站爬取代理并进行测试、打分,最后存储起来,下一次使用时可以在原来的基础上进行再次的测试从而提高代理池的效率,当然为了使用这一模块用户在渗透测试之前都必须花一定的时间进行代理池的维护。

1.1.2 自动爬取需求分析

有了一个可用的代理池之后自动爬取功能的实现也就非常简单了,只需要在每次爬取时获取一个随机的代理并在爬取时使用即可。爬虫爬取目标网站时使用的是广度优先爬取,这样在爬取网站时就可以设置要爬取的网站最大深度。当然为了提高爬取的效率,多进程是必不可少的,爬取时要对爬取出来的url进行规范化和去重处理这样就可以减少大量非必要的测试。

1.1.3 漏洞检测功能需求分析

Web漏洞种类繁多,本扫描器暂时只支持最常见的漏洞:Sql注入漏洞和Xss注入漏洞。Sql注入是在Web前端同后台数据库之间发生数据交互时产生的安全漏洞[5]。Xss攻击指攻击者将恶意脚本写入到Web网页当中,通常这些脚本能够利用用户的浏览器中的Javascript来执行恶意代码,来获取用户的隐私信息以及其他一-些恶意操作[6]。不同的漏洞通过调用不同的漏洞检测模块,模块之间不存在相互调度关系,在检测过程中Sql和Xss注入漏洞都是通过自动填充表单并提交的方法获取对应的含注入点的url。

1.1.4 报告生成需求分析

对于扫描的结果一定要有一个清晰明确的输出,不然扫描等于没有扫描,对于不方便直接显示的数据也要指明文件输出的详细位置,提供多种输出格式。

2 系统实现

经过软件的需求分析我们可以得知Web扫描器应该分为四个大模块,分别是代理池模块,自动爬取模块,漏洞检测模块和生成报告模块。

2.1 代理池模块实现

代理池通过proxy_pool_run.py进行代理池的运行和控制包括获取要爬取的有效免费ip数量,并判断现有的IP数量是否满足,从而控制爬虫的爬取。爬取时通过crawalers文件下的daili66.py,ip3366.py,kuaidaili.py和xici.py爬取网站的免费代理,每次爬取时都会随即产生随机值填充到要爬取的网站url中防止重复爬取,对爬取的代理进行布尔去重后存储到指定的文件,存储初时默认代理的分数为0。在proxy_test.py中进行代理的检测,每次成功后代理分数加一,满9分后分数不再上升但是依然要检测,对于检测失败的代理将从代理池中删除。代理测试时为提高测试效率使用异步协程的方式,每次测试100个代理,当然本项目也支持你在代理池存储文件中按规范添加自己的代理。代理池模块流程图如图2。

2.2 爬虫模块实现

爬虫模块是本项目的核心,如何从用户提交的一个有效url中高效的爬取出url是最重要的。爬虫模块的文件在Scan目录下的,Craw.py将对爬取的url链接进行判断除去空链接,如果不是规范的url则会利用urllib库的parse模块获取绝对路径的地址,在使用pybloom_live库的BloomFilter模块对爬取的url进行布尔去重。

Queue_manager.py会获取和判断用户要求爬取的网站深度,再使用广度优先爬取的技术进行爬取。如果你要使用本项目的自动代理功能,则会调用crawlers目录下的proxy_pool_run.py文件中的getproxy_url()函数从代理池中随机选取一个代理进行使用,通过多进程的方式来大幅提高爬虫模块的执行效率。之所以选择多进程而不是多线程是因为“在多核下, 如果想做并行执行提升程序效率, 比较常用有效的方法是使用多进程[7]。”爬虫模块流程图如图3。

2.3 漏洞检测模块实现

漏洞检测模块在Attack目录下,每个模块之间功能分离不重复。

2.3.1 Sql注入检测模块实现

Sql注入的自动化判断难在如何获取注入点,本扫描器通过提炼网页中的form表单并进行自动填充提交在获取对应的url从而获得可能存在注入点的url。Url测试时craw_url()函数对爬取的页面进行form表单的自动填充并拼接上我们所测试的多个playload。 _craw()函数从队列中获取要测试的url,先提交一个含有单个单引号的playload的url看是否存在报错,如果不报错则说明可能使用了双引号,则进行双引号的字符型Sql注入测试和搜索型的Sql注入测试;如果报错则再提交一个含有单个双引号playload的url看是否报错,如果在报错则可能是数字型的Sql注入漏洞,则利用对应的playload进行测试,如果提交一个含有单个双引号playload的url不报错则可能是单引号的字符型Sql注入测试和搜索型的Sql注入;如果按对应的playload测试后不报错,则可能含有Sql注入漏洞,将对应的url存储起来然后判断是否测试完所有的url,有则取出下一个url,没有模块结束。Sql检测模块流程图如图4。

2.3.2 Xss漏洞检测模块实现

Xss和Sql注入一样注入点都是通过自动提交form表单的形式获取可能含有注入点的url,Xss漏洞检测时先检测是否存在dom型Xss,再检测是否存在反射型或存储型Xss注入。

Dom型的Xss检测时会根据正则表达式去掉含有playload的响应包中的内容,接着在剩余的内容中查找注入点,如果存在相吻合的数据,则可能存在dom型Xss注入。

反射型Xss和存储型Xss是通过九个核心的正则表达式(正则表达式常用来按用户所定义的规则来检索或替换符合的文本,从而达到用户所预期的一串特殊字符[8]。)检测时首先是发送一个设定好的特殊payload,在确定pladload在url中的输出点所对应的dom结点的位置,比如:注释内、双引号内、<>内……其次再看这个输出点对应核心正则表达式中所描述的哪个位置。找到pladload所在的位置后就需要查看在这个位置要利用成功有哪些字符不能被转义,然后在看响应中的payload,从此时显示payload的表现形式判断那些‘不可被转义的特殊字符前要被加上转义符重新发送修改后的playload,直到每个不可被转义的字符都成功的绕过一次才会认为存在Xss漏洞。当然不同的dom位置的攻击方法也不同。Xss注入漏洞检测模块流程图如5。

2.4 报告生成模块实现

报告生成模块实现的脚本是Output文件下的out_web.py,此脚本有add_list()函数以列表的形式添加到对应的字典中,在通过build_html()函数进行输出,一般情况下add_list()函数所获取的列表全部来源于扫描出来的各类.txt文件,最后把这些数据全部整合起来输出为一个页面。

3 项目展示

3.1 项目主界面展示

本软件是使用的是pyhton3.7版本,启动时直接在命令行下运行主程序即可。程序启动的提示中会显示是否要使用免费代理功能,如果输入No,则会显示出本软件的命令行参数,如果选择Yes,则会先进行代理池的初始化,初始化結束后会显示本软件的命令行参数。

3.2 基础功能演示

3.2.1 代理池功能演示

在直接运行主程序Hugh.py,即输入“python Hugh.py”都会提醒是否使用免费代理功能如果需要在命令行中输入Yes即可。

3.2.2 网页爬取功能演示

假如我们仅需要爬取的网站是“http://192.168.111.141:8081/”在命令行输入命令“python Hugh.py -u http://192.168.111.141:8081/”就可以进行网页爬取,爬取时默认爬取深度为 3,如果需要更改爬取深度请在命令中加入depth选项,假设要修改的深度为4,则此时完整的的命令为“python Hugh.py -u http://192.168.111.141:8081/ --depth=4”。

3.2.3 漏洞检测模块功能演示

(1)Sql注入检测模块演示

如果我们要对爬取的网站进行Sql注入检测时,假设要爬取的网站是“http://192.168.111.141:8081/”,默认爬取深度,则爬取的命令是“python Hugh.py -u http://192.168.111.141:8081/--sql=1”,即可对整个网站进行Sql注入检测。

(2)Xss注入检测模块演示

如果我们要对爬取的网站进行Xss注入检测时,假设要爬取的网站是“http://192.168.111.141:8081/”,默認爬取深度,则爬取的命令是“python Hugh.py -u http://192.168.111.141:8081/--xss=1”,即可对整个网站进行Xss注入检检测。

(3)Sql注入和Xss注入同时检测模块演示

如果我们要对爬取的网站进行Xss和Sql注入检测时,假设要爬取的网站是“http://192.168.111.141:8081/”,默认爬取深度,则爬取的命令是“python Hugh.py -u http://192.168.111.141:8081/--xss=1  --sql=1”,即可对整个网站进行检测,如图6。

3.2.4 扫描报告结果展示

在爬取网站后打开扫描结果所在的文件夹即可看到各种扫描结果,其中.html文件就是所有扫描结果的汇总,如图7所示。如果要修改输出文件的位置,请在lib.config.py中更改。

4 结束语

本项目实现了一个基于Python的自动代理Web漏洞扫描器,成功维护了一个简易的代理池,让自动化代理功能成功地加入到了Web扫描器中,而且能成功检测出网站的安全漏洞,让黑盒测试有了更大的隐蔽性,具有一定的实用价值。当然本扫描器还是有许多不足之处,比如支持检测的漏洞不够多,支持的代理协议不够多,扫描报告页面相对简陋等,需要继续改进。

参考文献

[1]张蕴昭.中国特色治网之道: 理念与成就——十八大以来我国网络空间治理的回顾与思考[J].中国行政管理,2019,1:28.

[2]邓若伊.以法制保障网络空间安全构筑网络强国—— 《网络安全法》和《国家网络空间安全战略》解读[J].电子政务,2017,2:2-35.

[3]牛咏梅.面向Web应用的漏洞扫描器的设计与实现[J].南阳理工学院学报,2018,10(06):66-69.

[4]王佳鹏,徐海蛟,许培宇,何佳蕾,林冠成.面向网络爬虫的高可用动态池系统设计与实现[J].福建电脑,2019,35(06):8-11.

[5]李鑫.基于Web渗透测试的SQL注入研究[J].信息与电脑(理论版),2020,32(03):164-166.

[6]谷家腾. 基于动态分析的XSS漏洞检测方法研究[D].北京邮电大学,2019.

[7]唐琳,董依萌,何天宇.基于Python的网络爬虫技术的关键性问题探索[J].电子世界,2018(14):32-33.

[8]苻玲美.正则表达式在python爬虫中的应用[J].电脑知识与技术,2019,15(25):253-254.

猜你喜欢
扫描器爬虫漏洞
利用网络爬虫技术验证房地产灰犀牛之说
漏洞
基于Python的网络爬虫和反爬虫技术研究
利用爬虫技术的Geo-Gnutel la VANET流量采集
大数据环境下基于python的网络爬虫技术
三明:“两票制”堵住加价漏洞
高铁急救应补齐三漏洞
SICK TIM351迷你型激光扫描器
利用彩色扫描器对有色污布测色及对洗净性进行评价