{"id":19274272,"url":"https://github.com/ysrc/gourdscanv2","last_synced_at":"2025-04-12T23:32:49.961Z","repository":{"id":46886986,"uuid":"70475237","full_name":"ysrc/GourdScanV2","owner":"ysrc","description":"被动式漏洞扫描系统","archived":false,"fork":false,"pushed_at":"2017-11-01T06:20:46.000Z","size":12968,"stargazers_count":874,"open_issues_count":9,"forks_count":313,"subscribers_count":49,"default_branch":"github","last_synced_at":"2025-04-04T02:09:52.977Z","etag":null,"topics":["infosec","passive-vulnerability-scanner","pentesting","scanner","security","security-audit"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/ysrc.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2016-10-10T09:56:13.000Z","updated_at":"2025-03-31T04:54:53.000Z","dependencies_parsed_at":"2022-09-23T07:51:49.604Z","dependency_job_id":null,"html_url":"https://github.com/ysrc/GourdScanV2","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ysrc%2FGourdScanV2","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ysrc%2FGourdScanV2/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ysrc%2FGourdScanV2/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ysrc%2FGourdScanV2/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ysrc","download_url":"https://codeload.github.com/ysrc/GourdScanV2/tar.gz/refs/heads/github","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248647257,"owners_count":21139081,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["infosec","passive-vulnerability-scanner","pentesting","scanner","security","security-audit"],"created_at":"2024-11-09T20:45:42.466Z","updated_at":"2025-04-12T23:32:49.939Z","avatar_url":"https://github.com/ysrc.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Gourdscan v2.1 被动式漏洞扫描系统\n\n### Passive Vulnerability Scan\n\n**为避免 Gourdscan 被恶意利用，开源版本只放出了简单的探测规则，无法用作为黑客入侵工具。请使用者遵守《[中华人民共和国网络安全法](http://www.npc.gov.cn/npc/xinwen/2016-11/07/content_2001605.htm)》，勿将 Gourdscan 用于未授权的测试，参与项目的社区成员/YSRC/同程安全应急响应中心/同程网络科技股份有限公司不负任何连带法律责任。**\n\n## 安装依赖：\n\n### Linux\n\n1. 安装 Redis\n\n`\napt-get install redis-server\n`\n\n或从源码编译安装\n\n`\nwget http://download.redis.io/redis-stable.tar.gz \u0026\u0026 tar xzf redis-stable.tar.gz \u0026\u0026 cd redis-stable \u0026\u0026 make \u0026\u0026 make install\n`\n\n系统已有 Redis 的，运行 ` redis-server --version ` 查看自己的版本，需注意2.x版本的 Redis 会有问题\n\n2. 安转 python 类库\n\n**基础模块**\n\n安装pip\n\n`\nwget https://sec.ly.com/mirror/get-pip.py --no-check-certificate \u0026\u0026 python get-pip.py -i https://mirrors.aliyun.com/pypi/simple/\n`\n\n`\n$ pip install -r requirements.txt -i https://mirrors.aliyun.com/pypi/simple/\n`\n\n**其他事项**\n\n以下如果有报错便可以安装，一般不需要安装   \n\n镜像：   \nhttps://sec.ly.com/mirror/libdnet-libdnet-1.12.tar.gz   \nhttps://sec.ly.com/mirror/pylibpcap-0.6.4.tar.gz   \n\n`\n$ wget https://github.com/dugsong/libdnet/archive/master.zip \u0026\u0026 unzip master.zip \n`\n\n`\n$ wget http://dfn.dl.sourceforge.net/sourceforge/pylibpcap/pylibpcap-0.6.4.tar.gz \u0026\u0026 tar zxf pylibpcap-0.6.4.tar.gz\n`\n\n### Windows\n\n下载 Redis\nhttps://sec.ly.com/mirror/Redis-x64-3.2.100.zip\n\n启动 Redis\n\n`\nredis-server.exe GourdScan路径\\conf\\redis.conf\n`\n\n如需使用网卡抓包方式，同程src已有各依赖镜像，可以把exe文件都装上 \n\nhttps://sec.ly.com/mirror/dnet-1.12.win32-py2.7.exe   \nhttps://sec.ly.com/mirror/dpkt-1.7.win32.exe   \nhttps://sec.ly.com/mirror/pcap-1.1.win32-py2.7.exe   \nhttps://sec.ly.com/mirror/WinPcap_4_1_3.exe   \n\n### OSX\n\n安装 homebrew\n\n`\n/usr/bin/ruby -e \"$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)\"\n`\n\n安装 redis\n\n`\nbrew install redis\n`\n\n启动 redis\n\n`\nredis-server conf/redis.conf\n`\n\n安装依赖\n\n`\npip install pcapy -i https://pypi.doubanio.com/simple/\n`\n\n`\ngit clone https://github.com/dugsong/libdnet.git \u0026\u0026 cd libdnet \u0026\u0026 ./configure \u0026\u0026 make \u0026\u0026 cd python \u0026\u0026 python setup.py install\n`\n\n## 使用方法：\n\n```\nredis-server conf/redis.conf\npython gourdscan.py\n```\n\n**conf.json**\n\n\u003e 默认平台用户名密码为：admin:Y3rc_admin   \n\u003e 默认redis密码为：Y3rc_Alw4ys_B3_W1th_Y0u   \n\u003e 如果有勾选sqlmap api scan选项，请在服务器上开启sqlmap api。   \n\n一切正常的话你就可以在8000端口上访问到 GourdScanV2 的 web 界面了\n![](https://sec.ly.com/pic/20170512175531.png)\n\nStart Monitor 中提供了三种代理方式，区别的话在下方文档有写。\n选择一个代理方式 Start Proxy就可以启动代理，注意如果不是在本机测试的话 mix_addr 需要修改为 0.0.0.0\n\n在 Scan Config 中可以配置扫描规则， Start Gourdscan Scanner 之后就启动了扫描功能可以开始测试了。\n\nHappy Bug Hunting ~\n微信搜索“同程安全”关注 YSRC 公众号后，发送 gourd，会有人拉你进 gourdscan 讨论群。\n\n## 关于扫描规则：\n\n1.每一个rule文件(除了sqlmap rule)都是由1个到N个level的rule构成，在config中的Scan_level可以设置，如果level小于等于Scan_level，即会调用该rule，请将误报率较高的rule之等级相应提高，Scan_level的设\n    置可以设置到适合的等级，其中正则型模块的规则中，敏感字符必须转义，比如:, [], ()等字符！\n\n2.sqlireflect rule: \n    正则型模块，所有规则中的正则敏感字符都要转义，可以通过re模块搜索出来的sql注入，包括报错注入和union注入\n    (union注入一般不需要检测，而且检测比较麻烦，规则中是作为语法放在10级，存在一定的不准确性，一般不建议使\n    用，或者请修改后使用)，requests中是payload，responses中是使用re模块搜索的关键字，每个requests\n    的结果都会在该couple的responses中匹配每一行关键字，由于requests中可能存在空格，而且需要保持合适\n    的格式(每条规则会通过String.strip()函数去掉空格和换行)，所以可以使用%20代替空格，xml中使用\u0026lt;\u0026gt;\n    代替\u003c\u003e。\n\n3.sqlitime rule: \n    时间盲注规则，所有跟延时数字有关的用TIME_VAR代替，只需要写入规则，时间判断则由系统控制，首先延时5秒，\n    如果发现延时大于4.5秒，再延时10秒，如果延时大于9.5秒而且第二次延时大约是第一次延时的两倍，则判断存在注入。\n\n4.sqlibool rule: \n    布尔型盲注规则，前两个规则都是True判断，后两个规则都是False判断，在扫描时，如果发现第一个和第三个判断出\n    现了不同的结果后，会引入第二个和第四个判断进行深度判断，防止误报，规则无需转义，无需编码。\n\n5.xss rule: \n    非正则型模块，通过\"string in string\"方式探测，无需转义，该规则为反射型xss规则，将参数用规则替代，并且\n    不会测试post的参数，如果在response里面发现了一模一样的字符串，则判断为存在漏洞，第四级的rule误报可能比\n    较高，请谨慎使用，注意！在XSS扫描时，我们同时也会检测POST的结果，因为有些应用中post结果和get结果是同样\n    有效的，这样可能会造成误报，但是也会增加检测的广度。\n\n6.xpath rule: \n    xpath注入规则，默认只有一个等级，加上payload，如果在response里面发现了任意一条指定的匹配，则触发警告。\n\n7.ldap rule: ldap注入规则，默认只有一个等级，同上，ldap的规则中\"#\"被替换成了\"%23\"，因为在requests请求\n    中#将注释掉后面的url。\n\n8.lfi rule: 正则型模块，该规则为lfi规则，默认只有一个等级，同上。\n\n9.sqlmap rule: sqlmap规则，目前gourdscan默认规则是sqlmap默认规则，其中有很多常见的选择，比如risk,\n    level，tamper，可以自行设置，url，database，data，taskid等参数不允许设置，在每次添加规则后，会将所有\n    设置update到每个任务上去, 但是最后无论多少个类型的漏洞，只会显示一个payload。\n\n10.默认在每种类型规则中一旦发现匹配就返回，所以只会有一个message，特别是遇到时间盲注，速度会更快点，如果\n    想更改，可以把设置中的“Only_get_one_rule_match”改为False\n\n\n## 关于测试及数据：\n\n1.线程默认5个，扫描线程比较消耗资源。如果是跑在服务器上，建议把 Thread_num 调高以提升速度。\n从速度和资源占用的角度出发，我们更建议使用sqlmap api，而停掉内置的sql扫描 :) ，当然，非\n常欢迎各位向我们贡献代码和以及更加科学的扫描规则。\n\n2.数据包扫描独立于扫描器设置中的线程，所以可能会出现实际扫描线程多于设置的情况，如果某packet没有query也没\n    有post data，则扫描直接跳过。\n\n3.经过测试，除sqlmap api以外规则全部开启的情况下，scan_level设置为3，如果没有任何漏洞，每个参数测试完成\n    时间在4-5分钟左右，如果使用sqlmap api而不使用内置规则，每个参数测试时间在2-3分钟左右。\n\n4.redis中存储的数据包结构：request={'headers':headers,'host':host,'url':url,'method':method,\n    'postdata':postdata,'hash':url_hash,'uri':uri} json格式存储全数据包和uri(是否https)，以及其漏\n    洞等级，漏洞警示。最后整体base64编码。\n\n5.代理黑名单、代理白名单、后缀名黑名单均可在config中设置，注意：每个域名、后缀用英文逗号隔开，不可以有空格。\n    由于proxy中是通过str.endswith()判断，所以可以写入一级域名表示所有二级域名。\n\n6.proxy_io.py相对于mix_proxy来说，更加稳定，所以是stable proxy，同时在对于http请求上速度也快得多，\n    但是由于调用了tornado web模块，在多线程模式下无法stop(除非将web平台也同时stop)，多进程模式下无法执行，所以\n    目前只能实现伪关闭，关闭后无法执行代理的功能，这种状态下也占用不了多少资源，如果想真正关闭，请重启平台。多线\n    程模式下，ctrl+c可能无法关闭平台，需要ctrl+z，然后ps -a|grep python ，关闭start.py的pid。\n\n\n## 注意选项：\n\n1.登录后请立即修改用户名密码，并且请严格按照格式定义config中的选项，后台只对输入做了安全过滤，没有检查\n    number是否合法，如果非要把number改成string造成扫描出错等情况，就不是平台的问题了。\n\n2.如果同时开启扫描及抓包模块，确实抓包界面会刷新很快，由于其参数名未变，会被各个抓包模块过滤掉，所以如果使用自带扫描基本不会被记录入redis，但是，sqlmap在扫描的中会自己添加一个参数测试，这样就被抓包模块捕捉到了，形成恶性循环，故sqlmap和scapy抓包不能同时使用！！！\n\n3.如果发现你的包输出了但是没有push到waiting或者running队列中，基本说明你的包重复了，此时如果没有什么特别重\n    要的事情，可以点击任何一个抓包模块中的flush db按钮，删除整个redis中的队列，之后就会重新记录到redis中。\n\n4.建议使用sqlmap的同时不要使用内置sql注入扫描模块！\n\n5.如果出现了配置文件的问题，一般都是输入了非法字符等，这种错误对安全没有影响，只是会导致平台出错关闭。出现该\n    错误后可以到github上重新wget一个下来改改使用，或者做个备份。\n\n\n## Docker\n\n**创建镜像** \n\n`\n$ sudo docker build -t gourdscan:2.1 .  \n`\n\n**创建容器**\n\n`\n$ docker run -d -p 10000:22 -p 8000:8000 -p 10086:10086 -p 10806:10806 gourdscan:2.1 /usr/sbin/sshd -D\n`\n\n**登录服务器**\n\n`\n$ ssh root@localhost -p 10000\n`\n\n_用户名: `root`，密码: `Y3rc_admin`_\n\n**操作**\n\n`\nredis-server ~/gourdscan/conf/redis.conf\n`\n\n`\ngourdscan\n`\n\n## QA\n\n* 问：测试https的时候，即使信任了站点，只能出来首页的文字 \n\u003e 即使信任了某个站点，也不意味着信任了其子域名或其他域名，如果该站点从其他站点加载https数据，则需要将\n\u003e 其一样信任，chrome下具体方式是打开浏览器开发者选项(f12或command+i)，点击\"network\"，重新刷新页面，\n\u003e 双击红色的url，并信任该域，再次刷新重复上述步骤，直到可以完全加载出来。\n\n\u003e 此外这边有个 trick，在 chrome 的快捷方式目标中加入 --ignore-certificate-errors 参数，可以让 chrome 忽略证书错误继续加载网页。\n\n ![](https://sec.ly.com/pic/20170512192413.jpg)\n \n mac 下可以在终端输入 `open -a /Applications/Google\\ Chrome.app --args --ignore-certificate-errors` 来忽略证书错误。\n\n* 问：引入scapy module的时候显示缺少libdnet \n\u003e 在所需环境中有libdnet及其依赖的安装方式\n\n* 问: Windows安装模块的时候提示“python version 2.7 is required, but not found”  \n\u003e python 64位版本在注册表中的信息与32位版本的不一样，所以在注册表里面找不到python的位置，谷歌搜\n\u003e 索下”python version 2.7 is required“就出来了。\n\n* 问：Linux下启动redis提示“Bad directive or wrong number of arguments” \n\u003e redis版本太低，建议官网下载3.2以上版本再使用本conf文件，或者不使用提供这里的conf文件。\n\n* 问：扫描线程不稳定down掉了怎么办。\n\u003e 答：扫描线程不稳定很可能是网络问题，导致数个扫描线程全部down掉，目前可以通过/scan_config页面中的reset\n\u003e 按钮重置waiting和running。\n\n\n## 其他选项：\n\n1.只允许同时有200个session(session_size=6600)存在，为了方便，session过期时间为300天。不过以上设置均可以在config里面自行设置。   \n\n2.默认数据页中每页100个结果，可以在config中修改。   \n\n3.本系统开放源代码，尚有各种不足，欢迎各位提交代码。  \n\n## Changelog \n\n### v2.1\n   \n* Web界面改进，统一控制所有代理和扫描线程，统一管理各种参数，首页刷新时间自定义。   \n* 新增登录页以及session控制。   \n* 线程控制，sqlmap选项，及各种扫描方式自定义。   \n* waiting, finished, vulnerable, running等列表的展示及一键清空。   \n* 各种代理模块自定义设置，并且可以直接在web界面启动，无需另开窗口。   \n* redis.conf中加入了Daemon为True，可后台运行，无需另开窗口，提供redis中的各个删除接口，无需再连接redis操作。   \n* 可以查看每个数据包及其详细漏洞payload，config中可以自定义后缀黑名单。   \n* 所有规则重定义，并且支持自定义规则。  \n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fysrc%2Fgourdscanv2","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fysrc%2Fgourdscanv2","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fysrc%2Fgourdscanv2/lists"}