利用Splunk 完成渗透测试前期的情报分析
字数 1239 2025-08-29 08:32:18
Splunk在渗透测试情报分析中的应用
1. Splunk简介与优势
Splunk是一款强大的日志分析平台,在渗透测试前期情报收集中相比传统工具具有显著优势:
- 易用性:通过Web UI直接上传CSV文件,无需预先配置数据格式
- 高效性:相比grep等传统工具,搜索速度快13倍以上
- 可视化:内置丰富的数据可视化功能
- 扩展性:支持大规模数据处理和分析
与ELK相比,Splunk更适合"快餐式"PoC环境,能够快速实现数据的可视化和搜索。
2. 安装与配置
2.1 系统要求
- 推荐配置:20GB RAM + 300GB SSD
- 最低配置:较低内存也可运行
2.2 安装步骤
- 访问Splunk官网下载对应操作系统的安装包
- 使用开发者许可证(6个月试用期)
- 完成基本配置
3. 数据导入方法
3.1 小文件上传
- 通过Web UI直接上传小于500MB的文件
- 支持格式:CSV、JSON等
3.2 大文件导入
使用命令行工具导入大文件:
splunk add oneshot sonar.json.gz
4. 渗透测试情报分析应用
4.1 域名情报分析
4.1.1 查找特定CDN域名
value = "*.cloudfront.net"
执行时间:47.63秒(比grep快13倍)
4.1.2 获取子域名
- 基本查询:
name = "*.example.com" - 统计共享主机的域名:
name = "*.example.com" | stats values(name) by value
4.1.3 地理位置分析
name = "*.uber.com" | stats values(name) by value | iplocation value | geostats count by City
4.1.4 按国家过滤
name = "*.uber.com" | stats values(name) by value | iplocation value | search Country = "United States"
4.2 密码泄露数据分析
4.2.1 数据准备
- 使用LeakBase BreachCompilation数据
- 转换为CSV格式后导入:
splunk add oneshot input.csv -index passwords -sourcetype csv -hostname passwords -auth "admin:changeme"
4.2.2 常用密码分析
index = passwords | stats count by password | sort 100 -count
4.2.3 模糊匹配
index = passwords | table password | fuzzy wordlist="password" type="simple" compare_field="password" output_prefix="fuzz" | where fuzzmax_match_ratio >= 67 | stats count by password | sort 100 -count
4.2.4 特定域名密码查询
index = passwords [ inputlookup uber.csv ] | table email, password
4.3 员工OSINT分析
4.3.1 基本查询
- 按姓名搜索:
index = employees | search "FirstName=John" "LastName=Doe" - 按职位统计:
index = employees | stats count by JobTitle
4.3.2 角色分布分析
index = employees | stats count by Role | sort -count
4.3.3 结合密码数据
index = passwords [ search index = employees | eval email = $Email$ | table email ]
4.4 Nmap扫描分析
4.4.1 数据导入
上传.gnmap文件,时间戳设置为none
4.4.2 解析查询
source = "uber.gnmap" host = "uber" sourcetype = "Uber" Host Ports
| rex field = _raw max_match = 50 "Host:\s(?<dest_ip>\S+)"
| rex field = _raw max_match = 50 "[Ports:|,]\s?(?<port>\d+)\/+(?<status>\w+)\/+(?<proto>\w+)\/+(?<desc>\w+|\/)"
| rex field = _raw "OS:\s(?<os>\w+)"
| eval os = if(isnull(os), "unknown", os)
| eval mv = mvzip(port, status)
| eval mv = mvzip(mv, proto)
| eval mv = mvzip(mv, desc)
| mvexpand mv
| makemv mv delim = ","
| eval ports = mvindex(mv, 0)
| eval status = mvindex(mv, 1)
| eval proto = mvindex(mv, 2)
| eval desc = if(mvindex(mv, 3) == "/", "null", mvindex(mv,3))
| table dest_ip ports status proto desc os
| sort dest_ip
4.4.3 特定端口地理位置分析
source = "uber.gnmap" host = "uber" sourcetype = "Uber" Host Ports
| rex field = _raw max_match = 50 "Host:\s(?<dest_ip>\S+)"
| rex field = _raw max_match = 50 "[Ports:|,]\s?(?<port>\d+)\/+(?<status>\w+)\/+(?<proto>\w+)\/+(?<desc>\w+|\/)"
| rex field = _raw "OS:\s(?<os>\w+)"
| eval os = if(isnull(os), "unknown", os)
| eval mv = mvzip(port, status)
| eval mv = mvzip(mv, proto)
| eval mv = mvzip(mv, desc)
| mvexpand mv
| makemv mv delim = ","
| eval ports = mvindex(mv, 0)
| eval status = mvindex(mv, 1)
| eval proto = mvindex(mv, 2)
| eval desc = if(mvindex(mv, 3) == "/", "null", mvindex(mv,3))
| table dest_ip ports status proto desc os
| sort dest_ip
| table dest_ip,ports
| search ports = 443
| iplocation dest_ip
| geostats count by City
5. 工具整合
5.1 与DomLink整合
- 运行DomLink工具生成域名列表
- 处理输出文件格式:
name = *.example1.com name = *.example2.com - 保存到Splunk查找目录:
C:\Program Files\Splunk\etc\system\lookups\Book1.csv - 执行查询:
index = main [ inputlookup Book1.csv ] | table name
6. 最佳实践
- 数据分类:为不同类型数据创建不同索引(如passwords、employees等)
- 定期更新:保持数据新鲜度,特别是密码泄露数据
- 查询优化:使用stats、eval等命令优化复杂查询
- 结果导出:将分析结果导出为CSV供其他工具使用
- 自动化:对重复性任务创建保存的搜索和报表
7. 总结
Splunk在渗透测试情报分析中提供了强大的数据处理和分析能力,能够显著提高工作效率。通过合理利用其搜索、统计和可视化功能,可以快速获取有价值的目标情报,为后续渗透测试活动提供有力支持。