信息收集组合拳之从废弃接口中寻找漏洞
字数 1231 2025-08-05 08:19:40
信息收集组合拳之从废弃接口中寻找漏洞 - 详细教学文档
一、工具准备与环境配置
1. OneForAll - 子域名与资产收集工具
- 项目地址: https://github.com/shmilylty/OneForAll
- 功能: 通过域名收集网址、子域名和IP地址
- 安装方法:
git clone https://github.com/shmilylty/OneForAll.git cd OneForAll pip install -r requirements.txt
2. fscan - 内网扫描工具
- 项目地址: https://github.com/shadow1ng/fscan
- 功能: 内网资产发现、漏洞扫描与弱口令爆破
3. JSFinder - JS文件与URL收集工具
- 项目地址: https://github.com/Threezh1/JSFinder
- 功能: 从JS文件中提取URL和子域名
二、完整工作流程
第一步:使用OneForAll进行初始信息收集
-
准备目标文件:
- 创建
targets.txt文件,每行一个目标域名 - 示例内容:
example.com test.org
- 创建
-
运行扫描:
python oneforall.py --targets targets.txt run -
结果处理:
- 扫描结果保存在
results/目录下 - 需要提取IP地址并格式化:
- 原始IP可能为一行多个,用逗号分隔
- 需要转换为每行一个IP且去重
- 扫描结果保存在
-
使用Python脚本处理IP结果:
#!/usr/bin/env python # coding:utf-8 # 把同一行的ip换行,然后写进result.txt的文件里 with open('ip.txt','r',encoding='utf-8') as readlist: for dirs in readlist.readlines(): with open('result.txt','a',encoding='utf-8') as writelist: b = dirs.replace(",", '\n') writelist.write(b) # 去除重复ip,然后把结果写进only.txt文件里 with open('result.txt','r',encoding='utf-8') as readlist: lines_seen = set() for line in readlist.readlines(): if line not in lines_seen: lines_seen.add(line) with open('only.txt','a',encoding='utf-8') as writelist: writelist.write(line)
第二步:使用fscan进行端口扫描
-
准备IP文件:
- 使用上一步生成的
only.txt作为输入
- 使用上一步生成的
-
运行全端口扫描:
fscan64.exe -hf ip.txt -p 1-65535 -o result.txt
第三步:使用JSFinder收集JS文件中的URL
-
准备目标文件:
- 创建
targets.txt文件,包含URL列表
- 创建
-
运行扫描:
python JSFinder.py -f targets.txt -d -ou JSurl.txt -os JSdomain.txt -
输出结果:
JSurl.txt: 包含从JS中提取的URLJSdomain.txt: 包含从JS中提取的子域名
第四步:筛选含有参数的URL
- 使用Python脚本筛选:
#!/usr/bin/env python # coding:utf-8 # 字符串中有"?"且不在字符串的结尾的就写入result.txt中 with open('JSurl.txt','r',encoding='utf-8') as readlist: for dirs in readlist.readlines(): if "?" in dirs: re = dirs.find("?") a = len(dirs)-2 # 判断"?"是否在最后一个字符 if re < a: with open('result.txt','a',encoding='utf-8') as writelist: writelist.write(dirs) # 去除result.txt中的重复字符串 with open('result.txt','r',encoding='utf-8') as readlist: lines_seen = set() for line in readlist.readlines(): if line not in lines_seen: lines_seen.add(line) with open('only.txt','a',encoding='utf-8') as writelist: writelist.write(line)
第五步:SQL注入漏洞检测
- 使用sqlmap批量扫描:
python sqlmap.py -m urls.txt --batchurls.txt: 包含上一步筛选出的带参数URL
第六步:寻找废弃接口与敏感端点
-
常见敏感接口模式:
/registerSuccess.do /getALLUsers /deleteuser /api/admin/v1/users/all -
常见跳转参数:
toUrl= login_url= register_url= redirect_url= load_url= proxy_url= file_url= jump_url=
三、高级技巧与注意事项
-
历史接口挖掘:
- 使用Wayback Machine等工具获取历史URL
- 检查GitHub等代码托管平台可能泄露的旧接口
-
API端点测试:
- 测试HTTP方法(GET/POST/PUT/DELETE)的权限控制
- 检查接口版本控制(如v1/v2)中的旧版本
-
信息泄露检查:
- 测试不带认证的/admin /api等路径
- 检查响应头中的敏感信息
-
自动化改进:
- 将整个流程编写为shell脚本自动化执行
- 使用并行处理提高扫描效率
四、防御建议
-
开发层面:
- 彻底下线不再使用的接口
- 对废弃接口返回404而非302重定向
- 实施严格的权限控制
-
运维层面:
- 定期审计API端点
- 监控异常访问模式
- 使用WAF防护已知漏洞
-
安全测试:
- 在发布前进行全面的接口测试
- 定期进行黑盒与白盒安全测试
通过这套组合拳,可以有效地从废弃接口和历史遗留系统中发现潜在的安全漏洞,特别是在常规测试已经"测烂"的情况下,这种方法往往能发现意想不到的安全问题。