-
Notifications
You must be signed in to change notification settings - Fork 80
代理模式扫描
在scalpel的代理模式下,扫描器是作为中间人存在的,首先scalpel会原样转发您的流量,并返回服务器响应给客户端。同时scalpel会记录该流量,然后根据poc修改参数并重新发送请求进行扫描。这就是scalpel的基本原理。
当客户端和服务器使用https协议进行通信的时候,scalpel作为中间人必须要得到客户端的信任,才能建立与客户端的通信。因此scalpel需要通过自定义的CA证书签发伪造的服务器证书,从而使客户端信任scalpel。这样scalpel才能和客户端建立连接,从而获取到流量内容。scalpel提供了genca命令来方便生成CA证书。
生成CA证书
当客户端和服务器使用https协议进行通信的时候,scalpel作为中间人必须要得到客户端的信任,才能建立与客户端的通信。因此scalpel需要通过自定义的CA证书签发伪造的服务器证书,从而使客户端信任scalpel。这样scalpel才能和客户端建立连接,从而获取到流量内容。scalpel提供了genca命令来方便生成CA证书。
Windows
./scalpel-windows-amd64 genca
Linux
./scalpel-linux-amd64 genca
MacOS
./scalpel-drawin-amd64 genca
运行命令之后,将在当前文件夹生成 ca.crt 和 ca.key 两个文件。genca命令只需要第一次使用的时候运行即可,如果文件已经存在再次运行会报错,需要先删除本地的 ca.crt 和 ca.key 文件
我们推荐将ca证书安装在操作系统上。当然您也可以根据不同的浏览器客户端自行进行ca证书的设置。下面是在不同的操作系统上进行安装的教程。如果您使用的是 FireFox 浏览器,请参照https://wiki.wmtransfer.com/projects/webmoney/wiki/Installing_root_certificate_in_Mozilla_Firefox进行配置。
Linux
将生成的ca.crt文件复制到/usr/local/share/ca-certificates/目录下,然后执行update-ca-certificates命令即可。注意,这需要超级管理员权限。以Debian系列为例。
sudo cp ca.crt /usr/local/share/ca-certificates/scalpel.crt
sudo update-ca-certificates
Windows
在Windows下安装ca证书比较简单,双击ca.crt即可弹出安装证书的窗口,按照提示一步一步进行即可安装成功。
MacOS
在finder(访达)里打开ca.crt文件所在的目录,点击ca.crt即可进入到钥匙串访问页面。如下所示:
点击左侧的登录菜单,将要安装的证书拖入到右侧证书列表的空白区域。刚拖入的证书logo右下角会有个❌,如下所示:
右键点击证书,然后进入“显示简介”弹窗,点击信任折叠列表,设置使用此证书时 为“始终信任”。
然后在关闭“显示简介”弹窗时会要求输入电脑登录密码,输入密码即可。至此,CA证书安装完毕。安装成功的CA证书会在证书logo右下角出现➕。如下所示:
当安装完ca证书以后,就需要配置代理。通常大多数浏览器的设置功能中都提供了配置代理的功能。以Firefox浏览器为例,使用系统代理即可。
在安装完ca证书和配置好代理以后,就可以使用被动扫描模式进行扫描了。例如:
./scalpel-linux-amd64 poc -l 127.0.0.1:8000 -f poc/test1.yaml -o 1.html
poc命令的参数如下所示:
标志 | 含义 |
---|---|
d | 指定poc目录进行扫描,可以是多级目录 |
f | 指定poc文件进行扫描,可以指定多个文件 |
l | 指定监听的地址 |
o | 指定扫描结果的输出文件 |
# 被动代理配置
mitm:
ca_cert: ./ca.crt # CA 根证书路径
ca_key: ./ca.key # CA 私钥路径
restriction: # 代理能够访问的资源限制, 以下各项为空表示不限制
hostname_allowed: [] # 允许访问的 Hostname,支持格式如 t.com、*.t.com
hostname_disallowed: # 不允许访问的 Hostname,支持格式如 t.com、*.t.com
- '*google*'
- '*baidu*'
- '*.gov.cn'
- '*.edu.cn'
port_allowed: [] # 允许访问的端口, 支持的格式如: 80、80-85
port_disallowed: [] # 不允许访问的端口, 支持的格式如: 80、80-85
path_allowed: [] # 允许访问的路径,支持的格式如: test、*test*
path_disallowed: [] # 不允许访问的路径, 支持的格式如: test、*test*
queue_max_length: 3000 # 队列长度限制, 也可以理解为最大允许多少等待扫描的请求, 请根据内存大小自行调整
注意,队列长度的大小需要根据您的机器内存来进行调整,默认是3000,一般情况下都是可以的。