requests高级工程师之路--读GourdScanV2源码

1.概述

逼自己看源码学习系列,问题在于从来没写过python的项目,所以构思扫描器的时候,完全没有任何思路。所以找了两个开源的被动扫描系统,通过看别人的思路,学习一下,GourdScan和w13scan。(话说如果最后我整不出来,那我直接调w13scan不就好了吗。)

2.gourdscan.py

GourdScan是用tornado起了个web管理页面的,可以实时的查看扫描的进度和结果,我这里不太需要所以就不关注了,这个main函数就是起了这个web服务器,下一步起代理的地方在handlers里。

upload successful

3.handlers/main.py

加载conf文件,根据配置文件,启动代理服务器。

upload successful

4.mix_proxy.main

看了一下mix_porxy,用原生socket做的一个简单的代理服务器,跟我想看的关系不大。

upload successful

5.ScanConfigHandler

这里是个显示开启了那些规则的地方,算是学到了个如何根据配置文件动态加载规则的操作。

upload successful

6.ScanStatHandler

启动扫描的地方,这里调了scan.scan_start。

upload successful

7.scan.scan_start

这里就是开始扫描的函数了,这里从waiting的redis里拿hash,并压入running。然后根据hash查请求包,拿到请求包以后,加载扫描规则,格式化处理url和参数,把处理好的请求和规则,丢给new_scan

upload successful

8.scan.new_scan

这里其实就是再将请求丢入xx_scan函数去执行,用来获得扫描结果,然后保存结果。具体的扫描细节就在xx_scan中。

upload successful

9.scan.xx_scan

所有通过get请求去检测的xx_scan都是通过调用common_scan实现的。

upload successful

10.scan.common_scan

common_scan通过读取相应规则的配置文件,修改请求参数,然后根据预定义的响应进行对比,如果命中就会返回相应的message。

upload successful

11.scan.xss_scan

依然是通过配置文件,对请求的参数进行修改POST包,然后通过响应中是否返回了请求的payload来判断xss。

upload successful

12.scan.sql_scan

sql相关的scan有sqlireflect_scan,sqlibool_scan和sqlitime_scan。
这个sqlireflect_scan就是简单的sql报错识别,然后bool和time就很显然是布尔型注入和时间盲注,没什么好说的,都比较简单。

upload successful

13.总结

综合看上去,GourdScan这般开源的架构比较单一基础,个人认为配置文件+处理函数的方式不如w13scan的插件模式。