被动式漏洞扫描系统
Switch branches/tags
Nothing to show
Clone or download
Latest commit 79bf4cb Nov 1, 2017
Permalink
Failed to load latest commit information.
conf Update conf.json Nov 1, 2017
lib debug May 24, 2017
proxy update whole thing May 9, 2017
web debug May 24, 2017
.gitattributes set linguist-language of css, js file to Python May 12, 2017
.gitignore 调整架构 Feb 24, 2017
Dockerfile update whole thing May 9, 2017
LICENSE Create LICENSE Oct 10, 2016
README.md Update README.md Sep 6, 2017
gourdscan.py debug May 12, 2017
requirements.txt debug May 15, 2017

README.md

Gourdscan v2.1 被动式漏洞扫描系统

Passive Vulnerability Scan

为避免 Gourdscan 被恶意利用,开源版本只放出了简单的探测规则,无法用作为黑客入侵工具。请使用者遵守《中华人民共和国网络安全法》,勿将 Gourdscan 用于未授权的测试,参与项目的社区成员/YSRC/同程安全应急响应中心/同程网络科技股份有限公司不负任何连带法律责任。

安装依赖:

Linux

  1. 安装 Redis

apt-get install redis-server

或从源码编译安装

wget http://download.redis.io/redis-stable.tar.gz && tar xzf redis-stable.tar.gz && cd redis-stable && make && make install

系统已有 Redis 的,运行 redis-server --version 查看自己的版本,需注意2.x版本的 Redis 会有问题

  1. 安转 python 类库

基础模块

安装pip

wget https://sec.ly.com/mirror/get-pip.py --no-check-certificate && python get-pip.py -i https://mirrors.aliyun.com/pypi/simple/

$ pip install -r requirements.txt -i https://mirrors.aliyun.com/pypi/simple/

其他事项

以下如果有报错便可以安装,一般不需要安装

镜像:
https://sec.ly.com/mirror/libdnet-libdnet-1.12.tar.gz
https://sec.ly.com/mirror/pylibpcap-0.6.4.tar.gz

$ wget https://github.com/dugsong/libdnet/archive/master.zip && unzip master.zip

$ wget http://dfn.dl.sourceforge.net/sourceforge/pylibpcap/pylibpcap-0.6.4.tar.gz && tar zxf pylibpcap-0.6.4.tar.gz

Windows

下载 Redis https://sec.ly.com/mirror/Redis-x64-3.2.100.zip

启动 Redis

redis-server.exe GourdScan路径\conf\redis.conf

如需使用网卡抓包方式,同程src已有各依赖镜像,可以把exe文件都装上

https://sec.ly.com/mirror/dnet-1.12.win32-py2.7.exe
https://sec.ly.com/mirror/dpkt-1.7.win32.exe
https://sec.ly.com/mirror/pcap-1.1.win32-py2.7.exe
https://sec.ly.com/mirror/WinPcap_4_1_3.exe

OSX

安装 homebrew

/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

安装 redis

brew install redis

启动 redis

redis-server conf/redis.conf

安装依赖

pip install pcapy -i https://pypi.doubanio.com/simple/

git clone https://github.com/dugsong/libdnet.git && cd libdnet && ./configure && make && cd python && python setup.py install

使用方法:

redis-server conf/redis.conf
python gourdscan.py

conf.json

默认平台用户名密码为:admin:Y3rc_admin
默认redis密码为:Y3rc_Alw4ys_B3_W1th_Y0u
如果有勾选sqlmap api scan选项,请在服务器上开启sqlmap api。

一切正常的话你就可以在8000端口上访问到 GourdScanV2 的 web 界面了

Start Monitor 中提供了三种代理方式,区别的话在下方文档有写。 选择一个代理方式 Start Proxy就可以启动代理,注意如果不是在本机测试的话 mix_addr 需要修改为 0.0.0.0

在 Scan Config 中可以配置扫描规则, Start Gourdscan Scanner 之后就启动了扫描功能可以开始测试了。

Happy Bug Hunting ~ 微信搜索“同程安全”关注 YSRC 公众号后,发送 gourd,会有人拉你进 gourdscan 讨论群。

关于扫描规则:

1.每一个rule文件(除了sqlmap rule)都是由1个到N个level的rule构成,在config中的Scan_level可以设置,如果level小于等于Scan_level,即会调用该rule,请将误报率较高的rule之等级相应提高,Scan_level的设 置可以设置到适合的等级,其中正则型模块的规则中,敏感字符必须转义,比如:, [], ()等字符!

2.sqlireflect rule: 正则型模块,所有规则中的正则敏感字符都要转义,可以通过re模块搜索出来的sql注入,包括报错注入和union注入 (union注入一般不需要检测,而且检测比较麻烦,规则中是作为语法放在10级,存在一定的不准确性,一般不建议使 用,或者请修改后使用),requests中是payload,responses中是使用re模块搜索的关键字,每个requests 的结果都会在该couple的responses中匹配每一行关键字,由于requests中可能存在空格,而且需要保持合适 的格式(每条规则会通过String.strip()函数去掉空格和换行),所以可以使用%20代替空格,xml中使用<> 代替<>。

3.sqlitime rule: 时间盲注规则,所有跟延时数字有关的用TIME_VAR代替,只需要写入规则,时间判断则由系统控制,首先延时5秒, 如果发现延时大于4.5秒,再延时10秒,如果延时大于9.5秒而且第二次延时大约是第一次延时的两倍,则判断存在注入。

4.sqlibool rule: 布尔型盲注规则,前两个规则都是True判断,后两个规则都是False判断,在扫描时,如果发现第一个和第三个判断出 现了不同的结果后,会引入第二个和第四个判断进行深度判断,防止误报,规则无需转义,无需编码。

5.xss rule: 非正则型模块,通过"string in string"方式探测,无需转义,该规则为反射型xss规则,将参数用规则替代,并且 不会测试post的参数,如果在response里面发现了一模一样的字符串,则判断为存在漏洞,第四级的rule误报可能比 较高,请谨慎使用,注意!在XSS扫描时,我们同时也会检测POST的结果,因为有些应用中post结果和get结果是同样 有效的,这样可能会造成误报,但是也会增加检测的广度。

6.xpath rule: xpath注入规则,默认只有一个等级,加上payload,如果在response里面发现了任意一条指定的匹配,则触发警告。

7.ldap rule: ldap注入规则,默认只有一个等级,同上,ldap的规则中"#"被替换成了"%23",因为在requests请求 中#将注释掉后面的url。

8.lfi rule: 正则型模块,该规则为lfi规则,默认只有一个等级,同上。

9.sqlmap rule: sqlmap规则,目前gourdscan默认规则是sqlmap默认规则,其中有很多常见的选择,比如risk, level,tamper,可以自行设置,url,database,data,taskid等参数不允许设置,在每次添加规则后,会将所有 设置update到每个任务上去, 但是最后无论多少个类型的漏洞,只会显示一个payload。

10.默认在每种类型规则中一旦发现匹配就返回,所以只会有一个message,特别是遇到时间盲注,速度会更快点,如果 想更改,可以把设置中的“Only_get_one_rule_match”改为False

关于测试及数据:

1.线程默认5个,扫描线程比较消耗资源。如果是跑在服务器上,建议把 Thread_num 调高以提升速度。 从速度和资源占用的角度出发,我们更建议使用sqlmap api,而停掉内置的sql扫描 :) ,当然,非 常欢迎各位向我们贡献代码和以及更加科学的扫描规则。

2.数据包扫描独立于扫描器设置中的线程,所以可能会出现实际扫描线程多于设置的情况,如果某packet没有query也没 有post data,则扫描直接跳过。

3.经过测试,除sqlmap api以外规则全部开启的情况下,scan_level设置为3,如果没有任何漏洞,每个参数测试完成 时间在4-5分钟左右,如果使用sqlmap api而不使用内置规则,每个参数测试时间在2-3分钟左右。

4.redis中存储的数据包结构:request={'headers':headers,'host':host,'url':url,'method':method, 'postdata':postdata,'hash':url_hash,'uri':uri} json格式存储全数据包和uri(是否https),以及其漏 洞等级,漏洞警示。最后整体base64编码。

5.代理黑名单、代理白名单、后缀名黑名单均可在config中设置,注意:每个域名、后缀用英文逗号隔开,不可以有空格。 由于proxy中是通过str.endswith()判断,所以可以写入一级域名表示所有二级域名。

6.proxy_io.py相对于mix_proxy来说,更加稳定,所以是stable proxy,同时在对于http请求上速度也快得多, 但是由于调用了tornado web模块,在多线程模式下无法stop(除非将web平台也同时stop),多进程模式下无法执行,所以 目前只能实现伪关闭,关闭后无法执行代理的功能,这种状态下也占用不了多少资源,如果想真正关闭,请重启平台。多线 程模式下,ctrl+c可能无法关闭平台,需要ctrl+z,然后ps -a|grep python ,关闭start.py的pid。

注意选项:

1.登录后请立即修改用户名密码,并且请严格按照格式定义config中的选项,后台只对输入做了安全过滤,没有检查 number是否合法,如果非要把number改成string造成扫描出错等情况,就不是平台的问题了。

2.如果同时开启扫描及抓包模块,确实抓包界面会刷新很快,由于其参数名未变,会被各个抓包模块过滤掉,所以如果使用自带扫描基本不会被记录入redis,但是,sqlmap在扫描的中会自己添加一个参数测试,这样就被抓包模块捕捉到了,形成恶性循环,故sqlmap和scapy抓包不能同时使用!!!

3.如果发现你的包输出了但是没有push到waiting或者running队列中,基本说明你的包重复了,此时如果没有什么特别重 要的事情,可以点击任何一个抓包模块中的flush db按钮,删除整个redis中的队列,之后就会重新记录到redis中。

4.建议使用sqlmap的同时不要使用内置sql注入扫描模块!

5.如果出现了配置文件的问题,一般都是输入了非法字符等,这种错误对安全没有影响,只是会导致平台出错关闭。出现该 错误后可以到github上重新wget一个下来改改使用,或者做个备份。

Docker

创建镜像

$ sudo docker build -t gourdscan:2.1 .

创建容器

$ docker run -d -p 10000:22 -p 8000:8000 -p 10086:10086 -p 10806:10806 gourdscan:2.1 /usr/sbin/sshd -D

登录服务器

$ ssh root@localhost -p 10000

用户名: root,密码: Y3rc_admin

操作

redis-server ~/gourdscan/conf/redis.conf

gourdscan

QA

  • 问:测试https的时候,即使信任了站点,只能出来首页的文字

即使信任了某个站点,也不意味着信任了其子域名或其他域名,如果该站点从其他站点加载https数据,则需要将 其一样信任,chrome下具体方式是打开浏览器开发者选项(f12或command+i),点击"network",重新刷新页面, 双击红色的url,并信任该域,再次刷新重复上述步骤,直到可以完全加载出来。

此外这边有个 trick,在 chrome 的快捷方式目标中加入 --ignore-certificate-errors 参数,可以让 chrome 忽略证书错误继续加载网页。

mac 下可以在终端输入 open -a /Applications/Google\ Chrome.app --args --ignore-certificate-errors 来忽略证书错误。

  • 问:引入scapy module的时候显示缺少libdnet

在所需环境中有libdnet及其依赖的安装方式

  • 问: Windows安装模块的时候提示“python version 2.7 is required, but not found”

python 64位版本在注册表中的信息与32位版本的不一样,所以在注册表里面找不到python的位置,谷歌搜 索下”python version 2.7 is required“就出来了。

  • 问:Linux下启动redis提示“Bad directive or wrong number of arguments”

redis版本太低,建议官网下载3.2以上版本再使用本conf文件,或者不使用提供这里的conf文件。

  • 问:扫描线程不稳定down掉了怎么办。

答:扫描线程不稳定很可能是网络问题,导致数个扫描线程全部down掉,目前可以通过/scan_config页面中的reset 按钮重置waiting和running。

其他选项:

1.只允许同时有200个session(session_size=6600)存在,为了方便,session过期时间为300天。不过以上设置均可以在config里面自行设置。

2.默认数据页中每页100个结果,可以在config中修改。

3.本系统开放源代码,尚有各种不足,欢迎各位提交代码。

Changelog

v2.1

  • Web界面改进,统一控制所有代理和扫描线程,统一管理各种参数,首页刷新时间自定义。
  • 新增登录页以及session控制。
  • 线程控制,sqlmap选项,及各种扫描方式自定义。
  • waiting, finished, vulnerable, running等列表的展示及一键清空。
  • 各种代理模块自定义设置,并且可以直接在web界面启动,无需另开窗口。
  • redis.conf中加入了Daemon为True,可后台运行,无需另开窗口,提供redis中的各个删除接口,无需再连接redis操作。
  • 可以查看每个数据包及其详细漏洞payload,config中可以自定义后缀黑名单。
  • 所有规则重定义,并且支持自定义规则。