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


 
输入 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 resultJsonif 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 resultJsonif 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'] = resultJsonelse:warn("模块不存在!")这么一改,再执行以上的扫描步骤,报告模板显得更准确,而且就算执行同一模块的attacks.xss和attacks.blindsqli,后面的也不会覆盖前面的,如下:
如何自己开发漏洞扫描工具

文章插图
 
当然这样也不能保证完全没有问题,具体以后我还会去细致考虑这方面的优化!
插件的编写大家按章节一的下载地址,下载工具后,用PyCharm或vscode或你顺手的工具打开,插件扫描器就在scan目录下
如何自己开发漏洞扫描工具

文章插图
 
我们的插件编写,先从scanlibutilssettings.py 全局配置文件开始
第一步:先看基础路径配置,整个项目的目录结构就在这里
如何自己开发漏洞扫描工具

文章插图
 
第二步,配置字典路径,漏洞检测模块需要用到的字典,统一放在这个路径下
如何自己开发漏洞扫描工具

文章插图
 
第三步:配置插件路径,新增的插件统一按下面的格式配置
如何自己开发漏洞扫描工具

文章插图
 
第四步:配置插件描述信息,和第三步的插件路径是对应的
如何自己开发漏洞扫描工具

文章插图
 
第五步:配置漏洞模块描述信息,和第四步的插件描述是对应的
如何自己开发漏洞扫描工具

文章插图
 
第六步:配置漏洞模块路径信息,和第四步的插件描述是对应的
如何自己开发漏洞扫描工具

文章插图
 
第七步:编写插件的加载模块方法
统一命名规则 插件名成_plugins()[全部模块执行方法];spec_插件名称_plugins(key:str)
如何自己开发漏洞扫描工具


推荐阅读