从前依赖大数据只要熟练掌握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里。