从前依赖大数据只要熟练掌握burp、sqlmap、nmap、awvs就可以针对性的进行漏洞检测。当换一个场景遇到成百上千个目标需要测试时。人工这套手段好像不太够用。

0x1 什么是漏洞扫描

漏洞扫描是完成风险评估的一种手段。很多专业者都搞出了很自动化、工程化的系统出来,从子域收集,ip 提取,字典定制化生成,新业务监控,威胁情报收集,漏洞扫描、告警,甚至自动生成报告,提交至 zdi、hackerOne 及各大 SRC 平台,实现技术套现……

0x2 为什么要做网段的探测

针对某些特定网段做同源确实会有威胁情报挖掘的价值。参考《那些和185.244.25.0/24网段有关的Botnet

通过收集特定网段的端口信息结合当前掌握C2主机信息。资产收集的作用如下:

  • 情报搜集:ip段搜索存活主机,域名、ip是否与apt组织活动有关联

  • 情报关联:通过关联的ip、域名开放的端口与掌握的数据进行匹配判断C2主机实际作用

  • 数据挖掘:通过内部威胁情报数据挖掘受控主机范围、样本数据

  • 数据关联:分析样本,关联样本与主机的关系。入库主机的远程端口开放规则、已经掌握的远控端口、端口banner、SSL证书。

0x3 资产收集

很多扫描器都可以做资产收集,通过大数据做收集的平台也开始增加起来。

大数据做安全的网站

但是这些平台多少会有查询数量的限制。如果可以仿照一个技术信息库,把资产按照标签收集起来,每当出现一个漏洞就可以很容易检索出特定标签的网站了。

2.1 数据库设计

目标最初从几个地方收集而来,中文网站总排名、补天、hackerone。从排名顶端的src大神常挖的目标抠出来关键字去百度搜索。最初觉得目标收集越多越好,还尝试从被黑统计zone-h收集被黑过的站点。后来发现范围太广反而容易把自己淹没。

数据库表设计头疼了一段时间,以下是数据库表设计的最初版。分别为目标站点表、二级域名搜集、IP、端口。

  • 目标存储表 target

存储目标的数据,id主键,type标签类型,domain或ip;创建时间和修改时间是为了关注目标状态改变的时间。

id          int        // 主键自增长ID
source      varchar    // 资产来源
yys         varchar    // 运营商
domain      varchar    // 运营商域名
ioc_domain  varchar    // ioc域名
ioc_ip      varchar    // ioc ip
dq          varchar    // 地区
type        varchar    // 保存的是IP还是domain
target      varchar    // 目标组织
create_time datetime   // 创建时间
update_time datetime   // 更新时间
  • 子域名收集 result_siblings

存储子域名数据

id              int        // 主键自增长ID
host            varchar    // ip做主要索引
title           varchar    // 网站标题
ip              varchar    // ip
domain          varchar    // 运营商域名
port            varchar    // 当前域名访问的端口
country         varchar    // 国家代码
province        varchar    // 省份
city            varchar    // 城市
country_name    varchar    // 国家名字
header          varchar    // 网络回显
cert            varchar    // 证书信息
isp             varchar    // ISP信息
as_number       varchar
as_organization varchar
data_source     varchar    // 数据来源
app_name        varchar    // app指纹识别
create_time     datetime   // 创建时间
update_time     datetime   // 更新时间
  • IP收集 result_ip

把域名中的IP提炼出来,批量扫描ip。

id             int        // 主键自增长ID
taskid         int        // 任务ID
create_time    datetime   // 创建时间
update_time    datetime   // 更新时间
domain         varchar    // 域名
address        varchar    // IP地址
is_up          varchar    // 存活状态
os             varchar    // 操作系统版本
  • 端口收集 result_ports

采用libnmap多线程扫描

id              int        // 主键自增长ID
taskid          int        // 任务ID
create_time     datetime   // 创建时间
update_time     datetime   // 更新时间
address         varchar    // IP地址
port            int        // IP开放的端口
service         varchar    // 服务
state           varchar    // 状态
protocol        varchar    // 协议
scripts_results varchar    // 脚本扫描结果

2.2 入库整理

最开始收集域名,只是用mysqldb。Python3只能使用pymysql。从原始版本的EXCEL导入数据到mysql里。

01-15 05:06