您当前的位置:首页 > 电脑百科 > 安全防护 > 黑客技术

如何自己开发漏洞扫描工具

时间:2022-08-31 13:34:23  来源:  作者:smooth00

这是我去年2021年写的文章,如今这款开源安全测试工具已经更新了很多新功能,但漏洞扫描这块基本上还可以参考我这篇文章:

漏洞扫描工具,核心就是扫描器,而扫描器的设计思想是:灵活,易扩展,易修改,灵活的意思就是可单独执行专项漏洞的扫描,也可以批量执行集成的所有漏洞探测模块;易扩展的意思就是,新的漏洞检测模块可清晰简单地集成进扫描器;易修改,对各个漏洞扫描模块可根据特殊情况修改探测逻辑。以下我们以网上一款开源的扫描工具来讲解,当然部署过程和使用中可能会处处是坑,只要一一解决就是:

扫描器的源码

开源工具源码地址:

https://gitee.com/samllpig/SafeTool-51testing

工具的详细安装教程:

http://quan.51testing.com/pcQuan/lecture/117

软件架构

安装部署

  • 安装 Python/ target=_blank class=infotextkey>Python 3.6 以上环境(如果怕麻烦,就安装3.6,因为安装3.8等高版本还需要调整一点代码兼容性问题,但问题不多)
  • 安装 redis
  • 安装 wxPython==4.0.7
pip install wxPython==4.0.7

#如果安装失败,多执行几编,主要是因为网络超时导致安装失败
#也可以直接去下载相关模块包,如下载

wxPython-4.0.7-cp36-cp36m-win_amd64.whl,到官网下载,一定要下载和python版本匹配的包
#通过安装包来安装指定模块

pip install wxPython-4.0.7-cp36-cp36m-win_amd64.whl

#安装过程如果提示缺什么包,就继续去下载什么包

也可以安装更高版本的,比如wxPython==4.1.1

  • 安装openssl

一般安装会有问题,可以直接到官网下载 Win32/Win64 OpenSSL Installer for windows - Shining Light Productions

在本地安装后,还需要将库文件拷贝到python目录下,这样才能识别,如:

1、将openssl安装目录下的:C:Program FilesOpenSSL-Win64lib 拷贝到 D:Pythonlibs

2、将openssl安装目录下的:C:Program FilesOpenSSL-Win64include 拷贝到 d:Pythoninclude

  • 检查requirements.txt

这个文件源代码根目录下,配置了需要安装的模块及版本,我们需要确认自己的python版本是否以其匹配,比如Python3.8就要求改lxml为 lxml==4.6.3

  • pip安装模块包
pip install -r requirements.txt

# 如果安装失败,多执行几编,主要是因为网络超时导致安装失败,也可以到官网找模块包下载后来安装
# 如果安装提示版本问题,就需要替换版本,一般Python3.8会遇到
  • 按以下顺序启动服务

启动redis数据库
启动服务端 myproxy.bat
启动客户端 python consoleMain.py

异常修改

安装部署完后,我们可能还会遇到一些问题,这和代码当初的开发环境不一致有关。

1、关于Python3.8和3.6的兼容

Python3.8已经移出了time.clock()方法,但这份源码里还是用到了,所以如果遇到相关报错,需要自己手动修改,比如获取系统时间,可以改为使用time.perf_counter()

2、路径带空格的问题

这份代码这方面没考虑周全,如果部署的路径带空格,就会报路径错误,比如“D:Program Files”路径,我们要么就不要部署在带空格的路径下,要么直接改他的代码,比如:

setUp = "python " + path
#可以将path路径用引号全圈起来
setUp = "python '" + path + "'"

3、启动时报wt.exe找不到错误

我也不知道wt.exe的由来,这个错识有时候不影响启动,因为启动文件consoleMain.py做了相关判断处理,但为了彻底不调用wt.exe,我们也可把consoleMain.py当中的相关代码直接改了:

# wtSetUp = "wt.exe python " + path
# 把以上调用改为直接调PowerShell.exe
wtSetUp = "start cmd /k PowerShell.exe python '" + path + "'"

这么改后,还有个好处,就是遇到代码异常,不会立即关闭cmd窗口,这样就能看到以下具体的报错,对于调试和分析代码错误是有帮助的。

4、中文报utf-8编码错误

比如在web扫描时执行exec audit,报错:

 

通过报错,我们可以看到utf-8编码错误,而且报错的是request.py的resp.read().decode方法,我们把编码改为如下(具体改成什么编码,自己可以试试):

self.content = resp.read().decode('gbk')

编码改成功后,再通过 python consoleMain.py 入口调用就没有这个错误了。

5、报list index out of range错误

这个低级错误,一般是使用不当引起,但也看出了代码的健壮性不足,比如执行exec attacks.xss报错如下:

 

我们可以看到报错的params.py文件具体那一行,就是self.url.split("?"),问题出在这个问号,因为我开始设置扫描路径是:set url http://172.16.1.63,这是错误的,应该如下设置:

set url http://172.16.1.63/?u=admin

一眼就看出来了,得加个?问号,表示带参数,这个问题可以直接改他的代码,加个判断,如果不带参数,就提示重新设置,而不是报错。另外这块也说明还需要进一步扩展开发,正常应该由扫描工具主动去扫描和捕获可以进行xss跨站脚本攻击的链接和地方,而不是手动设置url来模拟攻击。

6、执行myproxy.bat找不到mitmdump

明明我们都装了mitmdump,为什么还可能找不到,这是因为pip安装时,是局部还是全局安装,正常mitmdump是安装在python目录下的Scripts中,如D:ToolsPythonScripts,假如你没找到,那就需要在代码路径下搜索,是否装在代码目录下了,比如在:SafeTool-51testingvenvScripts

这是因为我们用PyCharm Community Edition开发工具来安装部署可能遇到的问题,我们要么挪一下mitmdump,要么直接改myproxy.bat,改一下调用路径:

"D:Program FilesProjectSafeTool-51testingvenvScriptsmitmdump" -q -s myproxy.py -p 8000

7、生成报告的问题

开源的代码里关于这块也是有问题的,具体下面也会提到简单的修改方式 。

简单使用

先打开我们的扫描器看下界面:

 

扫描器界面:

 

好了,上面就是我们的扫描器,全部使用命令操作,简单易记,大家跟着敲就可以了。

  • help命令使用

help: 列出集成的插件命令和描述。

 

我们开始扫描之前要做些基本的设置,输入help set命令,查看我们需要设置那些参数,带*号的是必选项.

 

  • info 命令

info :显示详细的漏洞检测模块

info 命令的使用格式是: info [插件名称],插件名称就是上图中输入help命令得到的。

输入info attacks:

 

输入info audit命令:

 

可以看到audit插件下的检测模块太少了,后期我们需要加入TomcatNginx、weblogic等等的扫描模块 。

输入info brute命令:

 

输入 info disclosure:

 

  • set命令:

在进行扫描之前需要进行基本的设置工作,通过help set命令查看可以设置的选项,在通过set命令设置,在help set显示的选项中带*号的是必选项,其他的根据需要进行设置。

set 命令格式: set [选项] [参数]

举例: set url

http://192.168.16.132/wordPress/ target=_blank class=infotextkey>WordPress/?s=11

 

  • check 命令:

输入check argv 显示set中设置的参数值

 

其中agent参数,即版本信息默认会随机获取。

  • exec 命令

执行检测命令,命令格式:exec 插件名称[.模块名称]

如果只输入插件名称[attacks,audit,brute,disclosure],则会执行当前插件下所有漏洞检测模块,如果输入 插件名称.模块名称,例如:attacks.xss,则仅会执行当前插件下指定的模块名称。

输入 exec audit : 执行检测中间件插件下的所有模块

 

输入 exec attacks.xss :使用注入插件中的检测xss漏洞模块:

 

输入 exec attacks.blindsqli :检测sql盲注漏洞

 

  • report 命令:

生成测试报告命令

命令参数: report [报告名称]

注:只有执行过起码一次完整的插件检测才能生成报告,而不是专项漏洞检测,即 exec 插件名称,而不是 exec 插件名称.模块名称

输入命令: report webscan

 

按照提示显示的目录,打开测试报告,报告格式是html的:

 

好了,以上就是使用扫描器的所有命令和完整的执行流程(这个报告执行了audit和attacks两个模块(插件),但结果都归为第一个插件模块了,原因如下)。

注意:关于生成报告,原来的代码应该是有问题的,如果只执行的是插件子模块,如 exec attacks.xss,再执行report webscan 生成报告是会失败的,这是因为代码里只有在执行插件总模块 exec attacks才会调用报告赋值(调用子模块的函数是startup_spec_attacks,没有重新赋报告值,所以导致exec子模块,报告数据就会并到前面的插件总模块),参见代码如下:

#执行attacks子模块函数,没有对REPORT进行再赋值
def startup_spec_attacks(attack:str):
    if attack in attacks_info.keys():
        plugins = spec_attacks_plugins(attack)
        startup_plugins(plugins)
    else:
        warn("模块不存在!")

def startup_full_attacks():
    global resultJson
    if not REPORT['startTime']:
        REPORT['startTime'] = strftime("%Y/%m/%d at %H:%M:%S")
    execmod.Append("attacks")
    plugins = attacks_plugins()
    if resultJson:
        resultJson = {}
    startup_plugins(plugins)
    REPORT['attacks'] = resultJson  #调用总的attacks模块,才对报告结果赋值

这个问题需要引起关注,如果想简单的改,直接在startup_spec_attacks函数里加上REPORT赋值(需要有重复判断)就行:

def startup_spec_attacks(attack:str):
    global resultJson
    if not REPORT['startTime']:
        REPORT['startTime'] = strftime("%Y/%m/%d at %H:%M:%S")
    if resultJson and not REPORT['attacks']:
        resultJson = {}
    if attack in attacks_info.keys():
        execmod.append("attacks")
        plugins = spec_attacks_plugins(attack)
        startup_plugins(plugins)
        REPORT['attacks'] = resultJson
    else:
        warn("模块不存在!")

这么一改,再执行以上的扫描步骤,报告模板显得更准确,而且就算执行同一模块的attacks.xss和attacks.blindsqli,后面的也不会覆盖前面的,如下:

 

当然这样也不能保证完全没有问题,具体以后我还会去细致考虑这方面的优化!

插件的编写

大家按章节一的下载地址,下载工具后,用PyCharm或vscode或你顺手的工具打开,插件扫描器就在scan目录下

 

我们的插件编写,先从scanlibutilssettings.py 全局配置文件开始

第一步:先看基础路径配置,整个项目的目录结构就在这里

 

第二步,配置字典路径,漏洞检测模块需要用到的字典,统一放在这个路径下

 

第三步:配置插件路径,新增的插件统一按下面的格式配置

 

第四步:配置插件描述信息,和第三步的插件路径是对应的

 

第五步:配置漏洞模块描述信息,和第四步的插件描述是对应的

 

第六步:配置漏洞模块路径信息,和第四步的插件描述是对应的

 

第七步:编写插件的加载模块方法

统一命名规则 插件名成_plugins()[全部模块执行方法];spec_插件名称_plugins(key:str)

 

第八步:编写检测漏洞模块,以attacks插件下的bshi(破壳漏洞检测)检测模块为例,

导入必须的核心库:

 

创建漏洞检测类,继承Request类,类名需与文件名一致

 

编写的漏洞检测方法,统一命名为check:

 

最后编写run方法,命名不建议修改,如果实在需要修改的话,还需要在第九步中修改对应的模块导入逻辑:

 

第九步:在localapi.py文件下编写本地API调用,为什么有本地API调用,因为我打算再写个远程API调用方法,结合安全工具的web服务使用(这一步不是必须的,只有在扩展新的插件才用到,如果在原有插件的基础上新增漏洞检测模块,则可以跳过这一步)

本地API函数的格式和基本路径,参考下图:

 

总结下扩展逻辑就是,命名插件便于统一管理模块,模块编写按固定格式,本地API编写用于按指定插件运行检测模块,该扫描器的检测模块还可以继续更新扩展。

本人对安全测试其实了解的很少(对于软件测试人员来说,多少要了解一点),主要是因为当时学了几天Python语法和应用部署,想检验一下自己的掌握情况,就拿这个开源项目来研究,对于会JAVA的人来说,学Python应该也快,当然学精也不容易。这款开源工具的扩展性还不错,Python好像天生就有漏扫的天赋,对安全测试感兴趣的人可以了解一下这款工具。



Tags:漏洞扫描   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,如有任何标注错误或版权侵犯请与我们联系(Email:2595517585@qq.com),我们将及时更正、删除,谢谢。
▌相关推荐
nessus号称是漏洞评估领域的全球黄金标准、世界上最流行的漏洞扫描程序,广受 30000 家企业的信赖,全球下载量达 2 百万。Nessus不同于传统的漏洞扫描软件,它的每个功能的设计都...【详细内容】
2022-09-20  Tags: 漏洞扫描  点击:(69)  评论:(0)  加入收藏
这是我去年2021年写的文章,如今这款开源安全测试工具已经更新了很多新功能,但漏洞扫描这块基本上还可以参考我这篇文章:漏洞扫描工具,核心就是扫描器,而扫描器的设计思想是:灵活,易...【详细内容】
2022-08-31  Tags: 漏洞扫描  点击:(71)  评论:(0)  加入收藏
关于AutoPWN-SuiteAutoPWN-Suite是一款功能强大的自动化漏洞扫描和利用工具,在该工具的帮助下,广大研究人员可以轻松通过自动化的方式扫描和利用目标系统中潜在的安全漏洞。...【详细内容】
2022-07-20  Tags: 漏洞扫描  点击:(73)  评论:(0)  加入收藏
在本文中,我们将介绍市场上可用的十大最佳漏洞扫描工具。OpenVASTripwire IP360NessusComodo HackerProofNexpose communityVulnerability Manager PlusNiktoWiresharkAircra...【详细内容】
2022-06-14  Tags: 漏洞扫描  点击:(118)  评论:(0)  加入收藏
什么是Nessus?Nessus 是目前全世界最多人使用的系统漏洞扫描与分析软件。总共有超过75,000个机构使用Nessus 作为扫描该机构电脑系统的软件步骤如下:查看当前kali系统内核版本...【详细内容】
2021-09-09  Tags: 漏洞扫描  点击:(425)  评论:(0)  加入收藏
一、Nessus简单介绍Nessus是全球使用人数最多的系统漏洞扫描与分析软件,这是一个免费、威力强大、更新频繁并简易使用的远端系统安全扫描程序,功能十分强大。二、Nessus安装下...【详细内容】
2021-03-12  Tags: 漏洞扫描  点击:(1232)  评论:(0)  加入收藏
AWVS是Acunetix Web Vulnerability Scanner的缩写它是一个自动化的Web应用程序安全测试工具,审计检查漏洞。它可以扫描任何可通过Web浏览器访问的和遵循HTTP/HTTPS规则的Web...【详细内容】
2021-01-27  Tags: 漏洞扫描  点击:(1032)  评论:(0)  加入收藏
声明:禁止用作非法目的,谢绝一切形式的转载。在这里对OpenVas进行了简单的介绍。这篇文章着重介绍通过OpenVas扫描出来漏洞之后,如何利用这些漏洞达到获取被入侵机器"肉鸡"的sh...【详细内容】
2020-09-21  Tags: 漏洞扫描  点击:(356)  评论:(0)  加入收藏
前边的文章中,我们已经介绍过许多漏洞扫描的工具,今天我们就来介绍其中一款名叫AWVS漏洞扫描工具的使用。Acunetix Web Vulnerability Scanner(简称AWVS)是一款知名的网络漏洞扫...【详细内容】
2020-09-04  Tags: 漏洞扫描  点击:(594)  评论:(0)  加入收藏
网站漏洞想必有网站的人都比较了解,想要了解网站漏洞,最好的办法就是给网站做一次漏洞扫描,网站漏扫产品比较多,费用也从几十/次到几千/次不等,但是对于我这种小企业来说,几千一次...【详细内容】
2020-08-07  Tags: 漏洞扫描  点击:(414)  评论:(0)  加入收藏
▌简易百科推荐
一、实验项目名称Windows网络服务渗透测试实战-跨网段攻击二、实验目的及要求掌握对跨网段攻击的方法。熟悉Metasploit终端的使用方法。熟悉通过meterpreter进行后渗透操作...【详细内容】
2022-11-01  懒笑翻  CSDN  Tags:跨网段   点击:(6)  评论:(0)  加入收藏
一个名为EvilProxy的反向代理网络钓鱼即服务(PaaS)平台近日兴风作浪,承诺可以窃取身份验证令牌,从而绕过苹果、谷歌、Facebook、微软、Twitter、GitHub、GoDaddy甚至PyPI上的多...【详细内容】
2022-10-27  嘶吼RoarTalk     Tags:EvilProxy   点击:(11)  评论:(0)  加入收藏
大家好,这期电脑小课堂教大家一个非常实用的小命令,网络监听命令。或许大家对这个命令不是很了解,这个命令有什么作用?这个命令其实,就是来查看你的电脑有没有中后台木马,如果中了...【详细内容】
2022-10-26  CG电脑说  今日头条  Tags:木马   点击:(21)  评论:(0)  加入收藏
区块链的去中心化性质和加密算法使其几乎不可能受到攻击。然而,以太经典(Ethereum Classic)区块链沦为了51%攻击(51% attack)的受害者,估计因此损失110万美元。那么,51%攻击是...【详细内容】
2022-10-21  淼一回收    Tags:51%   点击:(2)  评论:(0)  加入收藏
渗透测试是门技术,也是一门艺术。参考书籍《欺骗的艺术》《入侵的艺术》《社会工程学攻击1》《社会工程学攻击2》这门技术(艺术)一开始也不是每个人都会的,正所谓没有人一出生就...【详细内容】
2022-10-18  黑客花无涯  今日头条  Tags:渗透测试   点击:(4)  评论:(0)  加入收藏
1、 什么是CSRF:CSRF (Cross-site request forgery,跨站请求伪造)也被称为One Click Attack或者Session Riding,通常缩写为CSRF或者XSRF,是一种对网站的恶意利用。尽管听起来像...【详细内容】
2022-10-14  网盾网络安全培训  今日头条  Tags:CSRF   点击:(16)  评论:(0)  加入收藏
前言在打靶场的过程中使用Nmap时发现点小问题,借此机会详细分析下情况,于是有了这篇文章。本文包含以下内容: 1. Nmap抓包分析 2. 内网下绕过Windows防火墙扫描存活主机这里主...【详细内容】
2022-10-14  iHacking  今日头条  Tags:Nmap抓包   点击:(18)  评论:(0)  加入收藏
2010年,一段伊拉克战争的视频在全世界互联网上流传,视频内容是美国陆军航空部队在伊拉克的屠杀。 该事件发生于2007年夏天,美国陆军航空兵两架“阿帕奇”在巴格达“剿匪”,他们...【详细内容】
2022-10-11  WarOH协虎   网易号  Tags:阿桑奇   点击:(17)  评论:(0)  加入收藏
华舆讯 据中非新闻社报道(2021-01-28) 超过400万个IP地址被非法使用,这被称为非洲最大的互联网盗窃案。这起盗窃案早在2016年就引起了人们的警觉,现在已经完全暴露了其规模,揭露...【详细内容】
2022-09-28  成长点滴  今日头条  Tags:网络隐身   点击:(44)  评论:(0)  加入收藏
前言:在网络取证领域,网络攻击溯源一直是一个重要的追踪方式。近年来,网络安全事件层出不穷,各种网络攻击给国家、社会和个人带来了严重的危害,如分布式拒绝服务攻击(DDoS)、基于...【详细内容】
2022-09-28  埃文科技  网易号  Tags:真实IP   点击:(26)  评论:(0)  加入收藏
站内最新
站内热门
站内头条