三、web安全-信息收集
1、信息搜集的重要性
(1)明确攻击面
信息搜集能让渗透测试人员清晰地勾勒出目标系统的边界,包括其网络拓扑结构、开放的服务端口、运行的软件系统等。例如,通过信息搜集发现目标企业除了对外提供官网服务外,还有一个内部员工使用的办公系统暴露在公网,这就大大扩展了攻击面,为测试人员提供了更多的潜在攻击点。
(2)发现潜在漏洞线索
搜集到的信息中可能隐藏着目标系统存在的漏洞线索。比如,通过查看目标网站使用的软件版本信息,发现其运行的某个开源内容管理系统(CMS)版本存在已知的高危漏洞,这为后续利用该漏洞进行渗透提供了明确的方向。
(3)制定针对性策略
基于全面的信息搜集,渗透测试人员可以制定出更具针对性的测试策略。如果了解到目标系统对某些特定的网络协议或服务依赖程度较高,那么在测试过程中就可以重点围绕这些方面展开,提高渗透测试的效率和成功率。
2、信息搜集的主要内容
2.1 目标基本信息
2.1.1 域名信息搜集:
包括域名的注册人、注册时间、到期时间、DNS服务器等。通过查询域名信息,可以了解目标企业的网络资产分布情况,以及是否存在域名劫持等潜在风险。例如,发现目标企业的一个重要业务子域名指向了一个可疑的IP地址,可能暗示着该子域名已被攻击者控制。
2.1.2 IP地址信息搜集:
确定目标系统的IP地址范围,了解其所属的网络运营商、地理位置等。IP地址信息有助于分析目标网络的拓扑结构,以及判断其是否使用了云服务、CDN等技术。
2.2 网络架构信息
- 网络拓扑信息搜集:
尝试绘制目标网络的拓扑结构图,包括路由器、交换机、防火墙等网络设备的位置和连接关系。了解网络拓扑可以帮助测试人员找到网络中的关键节点和薄弱环节,例如,发现某个核心交换机存在配置漏洞,可能导致整个子网面临安全风险。
- 开放端口和服务信息搜集:
使用端口扫描工具(如Nmap)扫描目标系统的开放端口,并识别运行在这些端口上的服务。不同的服务可能存在不同的安全漏洞,例如,开放的SSH服务如果使用弱密码,就容易被暴力破解。
2.3 系统和软件信息
- 操作系统类型和版本:通过分析目标系统返回的Banner信息、使用指纹识别工具(如Nmap的操作系统检测功能)等方法,确定目标系统运行的操作系统类型(如Windows、Linux)和版本。不同操作系统版本的安全漏洞和防护机制存在差异,了解这些信息有助于选择合适的攻击手段。
- 应用程序信息:识别目标系统上运行的各种应用程序,包括Web服务器(如Apache、Nginx)、数据库管理系统(如MySQL、Oracle)、中间件(如Tomcat、WebLogic)等。同时,获取这些应用程序的版本信息,以便查找已知的安全漏洞。
2.3.1 2.4 人员和组织信息
- 员工信息:通过社交媒体、招聘网站、企业官网等渠道搜集目标企业员工的相关信息,如姓名、职位、联系方式等。员工信息可能被用于社会工程学攻击,例如,通过伪装成企业内部员工发送钓鱼邮件,诱使其他员工点击恶意链接或下载恶意文件。
- 组织架构和业务流程:了解目标企业的组织架构和业务流程,有助于发现潜在的安全风险点。例如,发现某个部门的业务系统涉及大量敏感数据的处理,但安全防护措施相对薄弱,就可能成为攻击的重点目标。
3、信息搜集的常用方法
3.1 被动信息搜集
2.3.1搜索引擎查询:利用Google、百度等搜索引擎的高级搜索语法,如“site:目标域名”“intitle:关键词”等,查找与目标系统相关的公开信息。例如,通过搜索“site:example.com filetype:pdf”可以找到目标网站上公开的PDF文档,其中可能包含敏感信息。
谷歌语法
Site | 指定域名 |
---|---|
Inurl | URL中存在关键字的网页 |
Intext | 网页正文中的关键字 |
Filetype | 指定文件类型 |
Intitle | 网页标题中的关键字 |
Link | link:baidu.com 即表示返回所有和baidu.com做了链接的URL |
Info | 查询指定站点的一些基本信息 |
cache | 搜索Google里关于某些内容的缓存 |
site:可以限制你搜索范围的域名。
inurl:用于搜索网页上包含的URL,这个语法对寻找网页上的搜索、帮助之类的很有用。
intext: 只搜索网页部分中包含的文字(也就是忽略了标题、URL等的文字)
intitle:查找关键字的页面,一般用于社工别人的webshell密码
filetype:搜索文件的后缀或者扩展名
link:可以得到一个所有包含了某个指定URL的页面列表。
常用语法:
查找后台地址:site:域名 intitle:管理 | intitle:后台 | 登陆 | 用户名 | 密码 | 验证码 | 系统 | 账号
查找可注入点:site:域名 inurl:edit | lead | editor | Files
查找上传漏洞:site:域名 inurl:file | lead | editor | Files
存在的数据库:site:域名 inurl:asp?id= | web | edit
查看脚本类型:site:域名 filetype:asp/jsp/php
让搜索引擎入库:inurl:cm/data/templates/images/index/
2.3.2社交媒体和公开数据库:关注目标企业及其员工在社交媒体平台上的动态,从中获取有价值的信息。此外,还可以查询一些公开的数据库,如Whois数据库、企业信用信息公示系统等,获取域名注册信息、企业基本信息等。
**2.3.3网络爬虫:**使用网络爬虫工具(如Scrapy)自动抓取目标网站的内容,分析网站的结构和数据。网络爬虫可以帮助发现网站中隐藏的页面、敏感信息泄露等问题。
3.2 主动信息搜集
3.2.1端口扫描:
使用Nmap等端口扫描工具对目标系统的IP地址范围进行扫描,检测开放的端口和运行的服务。端口扫描可以分为TCP扫描、UDP扫描等多种类型,根据不同的需求选择合适的扫描方式。
(1)nmap工具功能
- 判断服务器类型
- 探测开发端口
- 探测使用框架
- 探测使用中间件
- 探测主机漏洞
(2)nmap,探测全端口tcp扫描
-
扫描单个ip:nmap 127.0.0.1
-
扫描多个ip:nmap 192.168.1.1 192.168.1.2
-
扫描范围:nmap 192.168.1.1 - 192.168.1.10
-
从文件中扫描:nmap -iL 1.txt
-
扫描C段:nmap 192.168.1.1/24
-
扫描除了192.168.1.100的所有地址:nmap 192.168.1.1/24 -exclude 192.168.1.100
-
指定扫描ip端口:nmap -p 80,443 192.168.1.1
-
扫描c段存活ip端口:nmap -sP 192.168.1.1/24
-
扫描操作系统版本识别:nmap -O 192.168.1.1
-
扫描开放端口对应的服务:nmap -sV 192.168.1.1
-
扫描常见漏洞、应用服务扫描:nmap --script=vuln 192.168.1.1
-
暴力破解:nmap --script=brute 192.168.1.1 不ping
-
扫描常见漏洞:nmap --script=vuln 192.168.1.1
-
绕过防火墙端口扫描:nmap -Pn 127.0.0.1
(3)参数参考
参数 | 说明 |
---|---|
-sT | TCP connect()扫描,这种方式会在目标主机的日志中记录大批连接请求和错误信息。 |
-sS | 半开扫描,很少有系统能把它记入系统日志。不过,需要Root权限。 |
-sF -sN | 秘密FIN数据包扫描、Xmas Tree、Null扫描模式 |
-sP | ping扫描,Nmap在扫描端口时,默认都会使用ping扫描,只有主机存活,Nmap才会继续扫描。 |
-sU | UDP扫描,但UDP扫描是不可靠的。 |
-SA | 这项高级的扫描方法通常用来穿过防火墙的规则集 |
-sV | 探测端口服务版本 |
-Pn | 扫描之前不需要用ping命令,有些防火墙禁止ping命令。可以使用此选项进行扫描 |
-v | 显示扫描过程,推荐使用 |
-h | 帮助选项,是最清楚的帮助文档 |
-p | 指定端口,如1 - 65535, 1433, 135, 22, 80等 |
-O | 应用远程操作系统检测,存在多个结果和-A可以一起用 |
-ON/-OX/-OG | 将报告写入文件,分别是正常、XML、grepable三种格式 |
-T4 | 针对TCP端口禁止动态扫描延迟超过10ms |
-iL | 读取主机列表,例如:-iL C:\ip.txt |
3.2.2 漏洞扫描:
利用专业的漏洞扫描工具(如Nessus、OpenVAS)对目标系统进行全面的漏洞检测。这些工具可以根据已知的漏洞数据库,自动检测目标系统存在的安全漏洞,并生成详细的报告。
3.2.3 指纹识别:
通过向目标系统发送特定的数据包,分析其返回的响应信息,识别目标系统的操作系统、应用程序类型和版本等信息。例如,使用Nmap的指纹识别功能可以快速准确地识别目标系统的相关信息。
3.2.3.1 信息搜集-win与linux识别
通过分析目标系统返回的Banner信息、使用指纹识别工具(如Nmap的操作系统检测功能)等方法,确定目标系统运行的操作系统类型(如Windows、Linux)和版本。不同操作系统版本的安全漏洞和防护机制存在差异,了解这些信息有助于选择合适的攻击手段。
(1)区分大小写
linux区分大小写,win不区分大小写。
(2)响应包
通过发送请求的响应包的server参数内容判断服务器类型。
(3)ping
PING命令来查看TTL值从而判断操作系统类型。
- TTL=128,这是WINNT/2K/XP。
- TTL=64,这是LINUX。
- TTL=256,这是UNIX。
(4)nmap工具
- 判断服务器类型
- 探测开发端口
- 探测使用框架
- 探测使用中间件
- 探测主机漏洞
3.2.3.2 数据库管理系统
根据开放的数据库端口号判断数据库类型。
(1)关系型数据库端口
- Oracle — 1521
- MySQL — 3306
- Sybase — 5000
- DB2 — 5000
- PostgreSQL — 5432
(2)NOSQL数据库端口
- MongoDB — 27017
- Redis — 6379
3.2.3.3 中间件
- 响应包查看server使用的中间件
- 通过数据库类型推测常用中间件
- 使用goby识别中间件、框架等信息
3.2.3.4 web指纹
(1)为什么收集web指纹?
- web指纹是网站使用的cms,基于识别出来的cms进行漏洞挖掘,识别网站使用的cms,基于识别出来的cms已知漏洞搜索。
(2)在线识别&离线识别
- 在线识别:https://finger.tidesec.com/
- 离线识别:https://github.com/TideSec/TDFinger
3.2.3.5 子域名查询
- fofa、谷歌语法、在线子域查询、oneforall、子域名挖掘机
- fofa:www.fofa.so
- 在线子域名:https://phpinfo.me/domain/
- 子域名挖掘机:https://github.com/epii/domainFinder
- oneforall:https://github.com/shmilylty/OneForAll
3.2.3.6 cdn识别
- https://www.cnblogs.com/qiuhai/p/9763739.html
3.2.3.7 目录扫描
- 常用工具:御剑、Jsk、dirmap
- Jsk:https://github.com/k8gege/Jskscan-WebPathBrute
- 安装教程
- pip install -r requirement.txt
- python dismap.py
4、信息搜集的注意事项
(1)合法合规
在进行信息搜集时,必须严格遵守法律法规和道德规范。未经授权的信息搜集行为可能构成违法犯罪,因此在开展渗透测试之前,一定要获得目标企业的书面授权。
(2)隐蔽性
尽量减少信息搜集活动对目标系统的影响,避免引起目标系统的警觉。可以采用一些隐蔽的扫描技术和策略,如慢速扫描、随机扫描等,降低被目标系统安全防护设备检测到的概率。
(3)记录和整理
对搜集到的信息进行详细的记录和整理,建立信息数据库。这有助于在后续的渗透测试过程中快速查找和利用相关信息,提高测试效率。