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

这是我去年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.exewtSetUp = "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')


推荐阅读