Skip to content

代理模式扫描

zy010101 edited this page Nov 7, 2022 · 3 revisions

原理介绍

在scalpel的代理模式下,扫描器是作为中间人存在的,首先scalpel会原样转发您的流量,并返回服务器响应给客户端。同时scalpel会记录该流量,然后根据poc修改参数并重新发送请求进行扫描。这就是scalpel的基本原理。

生成CA证书

当客户端和服务器使用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证书安装在操作系统上。当然您也可以根据不同的浏览器客户端自行进行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 指定扫描结果的输出文件
需要注意的是,使用的时候必须要指定-o标志来指定扫描结果输出的html文档。 scalpel本身支持的每个交互都将包含在命令中。命令可以有子命令,并且可以选择运行操作。因此,你可以使用如下的命令来查看命令行帮助。 `./scalpel-linux-amd64 poc -h` ![](https://github.com/StarCrossPortal/scalpel/blob/master/picture/poc%E5%91%BD%E4%BB%A4%E5%B8%AE%E5%8A%A9.png) 当然了,在启动代理模式之前,你可以根据你的需要对配置文件就行配置。目前支持比较简单的一些配置,具体见配置文件config.yaml,后续可能会开放更多的配置。启动代理以后,就可以在浏览器中开始访问你想要测试网站了,如果发现漏洞,scalpel会在命令行有相关请求信息的输出。当你扫描完毕的时候,可以使用ctrl+c结束scalpel即可,如果有扫描结果,那么就会生成指定的html文件。否则不生成。 # 配置文件 下载的压缩包解压之后,会有一个config.yaml文件,此文件是scalpel的配置文件。可以根据您的环境进行具体的配置。 `# 全局 http 发包配置` `http:` `proxy: # 漏洞扫描时使用的代理,如: http://127.0.0.1:8080` `read_timeout: 10 # 等待 http 响应的超时时间,单位秒,默认10秒` `max_conns_per_host: 30 # 同一 host 最大允许的连接数,可以根据目标主机性能适当增大` `fail_retries: 0 # 请求失败的重试次数,0 则不重试` `max_redirect: 0 # 单个请求最大允许的重定向次数` `max_resp_body_size: 2097152 # 最大允许的响应大小, 单位byte,默认2Mb` `max_qps: 300 # 每秒最大请求数`

# 被动代理配置 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,一般情况下都是可以的。

Clone this wiki locally