LANGZI_SRC_安全巡航 是一款集成漏扫,验证,资产监控,自动复现并且生成结果表报的工具,实现初衷是为了帮助白帽子在SRC中节约时间成本的自动化工具。
阅读完此文并配置环境大约需要20分钟,为了避免非零基础人群感到身体不适、头晕恶心、易怒及粗口,请不要查看以下内容。
本软件只做初步探测,无攻击性行为。请使用者遵守《中华人民共和国网络安全法》,勿用于非授权的测试,检测目标仅限于各大SRC,补天SRC,公益SRC进行测试。
最后更新时间:2019-6-26 22:24
- 安装 Microsoft Office
- 安装Firefox浏览器
- 安装vc++2015相关库
- 安装python2,并添加到系统环境变量//即cmd下输入python进入python2交互界面
- 安装Mysql数据库
- 运行目录不要存在中文
- 指向目录下的 数据库安装文件.sql,安装数据库
- 配置Config.ini配置文件
- 准备好采集的SRC_URL文本(此步骤可不做)
对主机配置略高,最好是SSD硬盘[启动Firefox]
使用的线程数基于CPU处理核心数
实验使用16个线程,在全部启动并发情况下资源消耗
可以看到还是比较吃资源,所以尽量不要直接开启全部扫描模块,可以先开启部分模块做资产收集,然后开始检测。
即花一天的时间跑子域名监控功能和超链接爬行功能,等到数据库资产差不多了就关闭资产监控功能,开启漏扫功能。
当退出关闭扫描器后,其下活动进程会在3分钟内自行关闭,可以通过任务管理器查看进程是否销毁。
再开启子域名监控的条件下,通过爆破,搜索引擎获取,以及网页爬行。三种方式不间断的获取domains.txt其下受监控的子域名,保存在主扫描表
sec_index主表保存大量受监控的子域名
SELECT * from sec_index where url like '%.qq.%'
在保存网址表中,保存着通过爬行获取到所有的友链数据,包括网址,标题,使用语言,服务器类型,网页内容。
等到数据量庞大起来后,可以做批量的数据采集调用,比如
select * from sec_urls where title like '%腾讯%',
select * from sec_urls where url like '%.qq.%',
select * from sec_urls where content like '%后台管理系统%',
在超链接表保存着网址的超链接和静态链接,其中静态链接可以使用sqlmap尝试伪静态注入,其他的可以尝试进行不同漏洞检测
在漏扫中填写报告也是个体力活,于是尝试实现了自动化实现,虽然被人骂懒死,但是确实挺方便的。
目录下的Config.ini是核心启动控制台,预读大约需要5分钟。
注意,Config.ini 文件编码为 ANSI,如果不一致则会报错
[Server]
# 数据库配置项
# 可以做分布式
host = 127.0.0.1
username = root
password = root
db = langzi_scan
port = 3306
[Common_Config]
threads = 16
# 线程数
# 建议4-32之间
check_env = 1
# 每次启动前是否检测运行环境是否完整
# 可选 0/关闭 1/开启
key = l95-la4-zh3-li0
[Start_Console]
start_on = 0
# 选择批量扫描的URL文本,如果数据库有数据的话,也可以选择不导入文本,直接从数据库继续扫描
# 可选 0/不提示导入URL文本,直接从数据库提取数据
# 可选 1/提示导入URL文本
check_alive = 0
# 检测导入文本的URL存活性检测,只有在设置START_ON=1情况下有效
# 可选 0/关闭 1/开启
[Scan_Modules]
ExtrUrs = 1
# 提取URL的超链接
# 可选 0/关闭 1/开启
ExtrUrr = 1
# 提取URL的超链接,不过有些臃肿,暂时移除
# 可选 0/关闭 1/开启
ExtrSql = 1
# 扫描SQL注入漏洞
# 可选 0/关闭 1/开启
ExtrXss = 1
# 扫描XSS漏洞
# 可选 0/关闭 1/开启
ExtrUrl = 1
# 扫描URL跳转漏洞
# 可选 0/关闭 1/开启
ExtrBac = 1
# 扫描备份文件源码泄露漏洞
# 可选 0/关闭 1/开启
ExtrRce = 1
# 扫描命令执行漏洞,不过效率太低,目前版本移除该功能
# 可选 0/关闭 1/开启
ExtrLfi = 1
# 扫描任意文件读取漏洞
# 可选 0/关闭 1/开启
ExtrSsf = 1
# 扫描SSRF漏洞,效率和误报不算理想,目前版本移除该功能
# 可选 0/关闭 1/开启
ExtrAut = 1
# 扫描未授权访问漏洞
# 可选 0/关闭 1/开启
ExtrInf = 1
# 扫描信息泄露,包括url开发的敏感端口,敏感路径,后台登陆,搜索引擎寻找漏洞
# 生成HTML信息报表,和漏扫的结果不一致,显得臃肿,目前版本移除该功能
# 可选 0/关闭 1/开启
ExtrGis = 1
# git svn 源码泄露扫描
# 可选 0/关闭 1/开启
ExtrCor = 1
# 扫描CORS劫持漏洞,一些大厂比较多,但是危害性比较小,所以一般都不扫描,设置为0
# 可选 0/关闭 1/开启
ExtrSub_Brute = 1
# 子域名监控功能 之 子域名爆破
# 可选 0/关闭 1/开启
ExtrSub_Baidu = 1
# 子域名监控功能 之 搜索引擎获取子域名
# 可选 0/关闭 1/开启
ExtrSub_Web = 1
# 子域名监控功能 之 通过网址爬行获取子域名
# 可选 0/关闭 1/开启
Keep_Scan = 0
# 获取网址中所有的友链,并且把获取到的友链保存到扫描表,基本上可以实现见谁日谁,实现无限挂机扫描
# 扫描机制来源于Yolanda_Scan,但是这一点也是被人诟病的一点,不建议开启
# 必须在 ExtrSub_Web = 1 的情况下才有效
# 可选 0/关闭 1/开启
[Scan_Levels]
Scan_Level = 1
# 扫描等级
# 可选 1/低级 2/中级 3/高级
# 默认开1就够了,当然也可选择2或者3
Xss_Level = 1
# XSS扫描等级
# 可选 1/低级 2/中级 3/高级 4/特级
# 默认开1就够了
Back_Level = 1
# 备份文件扫描等级
# 可选 1/低级 2/中级 3/高级
# 不同等级对应的扫描字典规则都不一样,越高代表字典数量越多
# 默认开1就够了
明确每张表的功能和包含数据,方便做调试与资产监控,以及自定义的重复性扫描验证。
功能详见注释
create database if not exists Langzi_Scan;
use Langzi_Scan;
create table if not exists Sec_Index(
id int primary key auto_increment,
url varchar(80),
extrurs int(1) default 0 comment '爬行获取静态链接和动态参数,状态:0/1',
extrurr int(1) default 0 comment '爬行获取命令执行需要的url,状态:0/1',
unauth int(1) default 0 comment '(获取未授权需要的url,状态:0/1)',
subdomain int(1) default 0 comment '获取子域名,既需要爬行页面相关内容,状态:0/1)',
gitsvn int(1) default 0 comment '扫描gitsvn源码泄露,状态:0/1)',
backup int(1) default 0 comment '扫描源码泄露,状态:0/1)',
info int(1) default 0 comment '(扫描敏感信息路径泄露与开放端口服务,状态:0/1)',
cors int(1) default 0 comment '(扫描sors劫持,状态:0/1)',
other_vlun int(1) default 0 comment '获取其他类型漏洞,状态:0/1)',
create_time timestamp DEFAULT CURRENT_TIMESTAMP
)charset =utf8mb4;
alter table Sec_Index add unique(url);
create table if not exists Sec_Links_0(
id int primary key auto_increment,
url varchar(100),
links longtext comment '静态链接,类型是一个列表',
sqls int(1) default 0 comment '获取sql注入',
create_time timestamp DEFAULT CURRENT_TIMESTAMP
)charset =utf8mb4;
alter table Sec_Links_0 add unique(url);
create table if not exists Sec_Links_1(
id int primary key auto_increment,
url varchar(100) comment '记住,这里是按照深度分类,数量较小',
links longtext comment '(一个列表,其中保存动态超链接)',
sqls int(1) default 0 comment '(扫描SQL注入,状态:0/1)',
xss int(1) default 0 comment '(扫描xss,状态:0/1)',
urls int(1) default 0 comment '(扫描url跳转,状态:0/1)',
lfi int(1) default 0 comment '(扫描文件包含,文件读取,状态:0/1)',
rce int(1) default 0 comment '(扫描命令执行,状态:0/1)',
create_time timestamp DEFAULT CURRENT_TIMESTAMP
)charset =utf8mb4;
alter table Sec_Links_1 add unique(url);
create table if not exists Sec_Links_2(
id int primary key auto_increment,
url varchar(100)comment '记住,这里是按照路径相似度分类,数量较大',
links longtext comment '(一个列表,其中保存动态超链接)',
sqls int(1) default 0 comment '(扫描SQL注入,状态:0/1)',
xss int(1) default 0 comment '(扫描xss,状态:0/1)',
urls int(1) default 0 comment '(扫描url跳转,状态:0/1)',
lfi int(1) default 0 comment '(扫描文件包含,文件读取,状态:0/1)',
rce int(1) default 0 comment '(扫描命令执行,状态:0/1)',
create_time timestamp DEFAULT CURRENT_TIMESTAMP
)charset =utf8mb4;
alter table Sec_Links_2 add unique(url);
create table if not exists Sec_R_links(
id int primary key auto_increment,
url varchar(100),
links longtext comment '(一个字典,其中保存按照命令执行漏洞类型的url链接,比如action,do,jsp,php等)',
rce int(1) default 0 comment '(扫描命令执行,状态:0/1)',
ssf int(1) default 0 comment '(扫描ssrf,状态:0/1)',
create_time timestamp DEFAULT CURRENT_TIMESTAMP
)charset =utf8mb4;
alter table Sec_R_links add unique(url);
create table if not exists Sec_success(
id int primary key auto_increment,
url varchar(100),
vlun_type longtext comment '保存成功状态',
create_time timestamp DEFAULT CURRENT_TIMESTAMP
)charset =utf8mb4;
create table if not exists Sec_Ip_Vluns(
id int primary key auto_increment,
url varchar(100),
ip varchar(16),
unau_get int(1) default 0 comment '获取未授权访问',
wpas_get int(1) default 0 comment '获取弱口令',
port_get int(1) default 0 comment '获取开放端口的信息',
other_vlun int(1) default 0 comment '获取其他类型漏洞',
create_time timestamp DEFAULT CURRENT_TIMESTAMP
)charset =utf8mb4;
alter table Sec_Ip_Vluns add unique(ip);
create table if not exists Sec_Urls(
id int primary key auto_increment,
url varchar(80) COMMENT '所有爬行的网页中的链接保存一下,这个功能由子域名爆破的web模块实现',
title varchar (80) comment '网页标题',
power varchar (80) comment '网址使用脚本语言',
server varchar (80) comment '网址服务器类型',
content longtext comment '网页内容,到时候可以做URL采集判断',
create_time timestamp DEFAULT CURRENT_TIMESTAMP
)charset =utf8mb4;
alter table Sec_Urls add unique(url);
create table if not exists Sec_Fail_Links(
id int primary key auto_increment,
url varchar(80) COMMENT '所有爬行的网页中的链接访问失败的保存一下',
get_links int(1) default 0 comment '如果需要再次使用,可以做判断',
create_time timestamp DEFAULT CURRENT_TIMESTAMP
)charset =utf8mb4;
alter table Sec_Fail_Links add unique(url);
注:勿删文件夹或者修改文件名
在 Modules 文件夹下的不同文本文件功能:
domains.txt
保存需要监控的子域名资产,格式如下:
jd.com
baidu.com
qq.com
iqiyi.com
....
rar.txt
保存的扫描备份文件字典
Sub_Big_Dict.txt
爆破二级域名字典
Sub_Sma_Dict.txt
爆破三级域名字典
default.docx
自动化生成报表模板
geckodriver.exe
FireFox驱动
result
存储扫描结果报表文件夹,勿删
_py2.py
检测Python2环境
black_list
存储网址爬行黑名单,其下的网址不会保存到数据库中
- 当扫描目标数量低于线程数*2时,不会开启扫描,所以尽量多导入网址
- SQL注入使用SQLMAP提供sql注入检测功能,但是也存在误报,误报率在20%
- XSS检测误报率在10%左右
- COSR劫持危害性比较小,基本上都不开启扫描功能
- 关于文件读取基本上都存在误报,不要开启
- 总的来说,能玩的地方只有子域名监控,git/svn源码泄露扫描,备份文件泄露扫描,xss,sql,url跳转。
一共实现了三种方案:
- 使用requests简单模拟爬虫方式,获取网页下所有的目录和链接,许多通过js生成的数据是获取不到。但是节省资源。
- 使用selenium操作浏览器,实现自动网页滑动,点击,随后通过mitmproxy中间件获取到所有的URL请求,优点是几乎能抓所有链接和ajax请求,但是消耗资源太大,故本版本移除该功能。
- 使用pyppeteer对网页自动化操作,然后获取所有的数据请求,和第二点一样,消耗资源太大,故本版本移除该功能。
考虑到以后,提供配置功能,可以选择超链接爬行方式。
- 在运行环境检测中,使用selenium驱动打开网页,但是网页可能有时候不能打开。这一点可以通过修改host文件破解
- URL跳转漏洞,跳转到的目标网站有时候可能会宕机,无法正确检测到结果。
- 其他2020年可用性未知。
- 无法提供对GOV&EDU扫描功能
- 低配主机可能无法正常运行,解决方案也很简单,降低线程数,关闭不必要不需要的扫描功能即可。
- 在CPU使用率到达100%,可能会导致部分扫描功能子模块无法启动,弹窗警告。
虽然不能让你在SRC称王称霸,但是在补天一个礼拜换一换桶泡面还是可以的。
试验注册一个新的账号,挂了5天,补天刷到1200名,虽然都是体力活,但是kb还是很香的。当然电费和物理机的负载也是很香的。
任何用扫描器,自动化漏洞挖掘工具找到的漏洞,质量都不会太高,对技术提升也没有太大的作用。但是如果能根据现有的漏洞基础上,加大漏洞的威胁性,对已知漏洞进行组合进一步拓展漏洞的危害,才是SRC中漏扫的意义。
目前版本为0.97版本,还有许多主机,数据库,服务类的漏洞都没有补充完善,漏扫的规则也不是特别满意。完整的后台管理可数据可视化虽然提上日程,但是还在设计阶段。对应漏扫报表的地方,还需要进一步的美化完善。
最后希望大家不要执着于排名与漏洞的数量,应该花费更多的时间去提升漏洞的质量水平,提高自己的技术水准。
本软件只做初步探测,无攻击性行为。请使用者遵守《中华人民共和国网络安全法》,勿用于非授权的测试,检测目标仅限于各大SRC,补天SRC,公益SRC进行测试。