【黑铁到传说】Web 安全学习之信息收集篇


3.1. 网络入口/信息
网络拓扑信息
外网出口
IP 信息
C 段
线下网络
Wi-Fi
SSID
认证信息
VPN
厂商
登录方式
邮件网关
手机 APP
小程序后台
SSO
边界网络设备
上游运营商
3.2. 域名信息
3.2.1. Whois
Whois 可以查询域名是否被注册,以及注册域名的详细信息的数据库,其中可能会存在一些有用的信息,例如域名所有人、域名注册商、邮箱等。
3.2.2. 搜索引擎搜索
搜索引擎通常会记录域名信息,可以通过 site: domain
的语法来查询。
3.2.3. 第三方查询
网络中有相当多的第三方应用提供了子域的查询功能,下面有一些例子,更多的网站可以在 8.1 工具列表 中查找。
CrtSearch
threatminer
Censys
3.2.4. ASN 信息关联
在网络中一个自治系统 (Autonomous System, AS) 是一个有权自主地决定在本系统中应采用何种路由协议的小型单位。这个网络单位可以是一个简单的网络也可以是一个由一个或多个普通的网络管理员来控制的网络群体,它是一个单独的可管理的网络单元 (例如一所大学,一个企业或者一个公司个体) 。
一个自治系统有时也被称为是一个路由选择域 (routing domain) 。一个自治系统将会分配一个全局的唯一的 16 位号码,这个号码被称为自治系统号 (ASN) 。因此可以通过 ASN 号来查找可能相关的 IP,例如:
3.2.5. 域名相关性
同一个企业/个人注册的多个域名通常具有一定的相关性,例如使用了同一个邮箱来注册、使用了同一个备案、同一个负责人来注册等,可以使用这种方式来查找关联的域名。一种操作步骤如下:
查询域名注册邮箱
通过域名查询备案号
通过备案号查询域名
反查注册邮箱
反查注册人
通过注册人查询到的域名在查询邮箱
通过上一步邮箱去查询域名
查询以上获取出的域名的子域名
3.2.6. 网站信息利用
网站中有相当多的信息,网站本身、各项安全策略、设置等都可能暴露出一些信息。
网站本身的交互通常不囿于单个域名,会和其他子域交互。对于这种情况,可以通过爬取网站,收集站点中的其他子域信息。这些信息通常出现在 JavaScript 文件、资源文件链接等位置。
网站的安全策略如跨域策略、CSP 规则等通常也包含相关域名的信息。有时候多个域名为了方便会使用同一个 SSL/TLS 证书,因此有时可通过证书来获取相关域名信息。
3.2.7. HTTPS 证书
3.2.7.1. 证书透明度
为了保证 HTTPS 证书不会被误发或伪造,CA 会将证书记录到可公开验证、不可篡改且只能附加内容的日志中,任何感兴趣的相关方都可以查看由授权中心签发的所有证书。因此可以通过查询已授权证书的方式来获得相关域名。
3.2.7.2. SAN
主题备用名称 (Subject Alternate Name, SAN),简单来说,在需要多个域名,并将其用于各项服务时,多使用 SAN 证书。SAN 允许在安全证书中使用 subjectAltName 字段将多种值与证书关联,这些值被称为主题备用名称。
3.2.8. 域传送漏洞
DNS 域传送 (zone transfer) 指的是冗余备份服务器使用来自主服务器的数据刷新自己的域 (zone) 数据库。这是为了防止主服务器因意外不可用时影响到整个域名的解析。
一般来说,域传送操作应该只允许可信的备用 DNS 服务器发起,但是如果错误配置了授权,那么任意用户都可以获得整个 DNS 服务器的域名信息。这种错误授权被称作是 DNS 域传送漏洞。
3.2.9. Passive DNS
Passive DNS 被动的从递归域名服务器记录来自不同域名服务器的响应,形成数据库。利用 Passive DNS 数据库可以知道域名曾绑定过哪些 IP,IP 曾关联到哪些域名,域名最早/最近出现的时间,为测试提供较大的帮助。Virustotal、passivetotal、CIRCL 等网站都提供了 Passive DNS 数据库的查询。
3.2.10. 泛解析
泛解析是把 *.example.com 的所有 A 记录都解析到某个 IP 地址上,在子域名枚举时需要处理这种情况以防生成大量无效的记录。
3.2.11. 重要记录
3.2.11.1. CNAME
CNAME 即 Canonical name,又称 alias,将域名指向另一个域名。其中可能包含其他关联业务的信息。很多网站使用的 CDN 加速功能利用了该记录。
3.2.11.2. MX 记录
MX 记录即 Mail Exchanger,记录了发送电子邮件时域名对应的服务器地址。可以用来寻找 SMTP 服务器信息。
3.2.11.3. NS 记录
NS (Name Server) 记录是域名服务器的记录,用来指定域名由哪个 DNS 服务器来进行解析。
3.2.11.4. SPF 记录
SPF (Sender Policy Framework) 是为了防止垃圾邮件而提出来的一种 DNS 记录类型,是一种 TXT 类型的记录,用于登记某个域名拥有的用来外发邮件的所有 IP 地址。通过 SPF 记录可以获取相关的 IP 信息,常用命令为 dig example.com txt
。
3.2.12. CDN
3.2.12.1. CDN 验证
可通过多地 ping 的方式确定目标是否使用了 CDN,常用的网站有 http://ping.chinaz.com/
https://asm.ca.com/en/ping.php
等。
3.2.12.2. 域名查找
使用了 CDN 的域名的父域或者子域名不一定使用了 CDN,可以通过这种方式去查找对应的 IP。
3.2.12.3. 历史记录查找
CDN 可能是在网站上线一段时间后才上线的,可以通过查找域名解析记录的方式去查找真实 IP。
3.2.12.4. 邮件信息
通过社会工程学的方式进行邮件沟通,从邮件头中获取 IP 地址,IP 地址可能是网站的真实 IP 或者是目标的出口 IP。
3.2.13. 子域爆破
在内网等不易用到以上技巧的环境,或者想监测新域名上线时,可以通过批量尝试的方式,找到有效的域名。
3.2.14. 缓存探测技术
在企业网络中通常都会配置 DNS 服务器为网络内的主机提供域名解析服务。域名缓存侦测(DNS Cache Snooping)技术就是向这些服务器发送域名解析请求,但并不要求使用递归模式,用于探测是否请求过某个域名。这种方式可以用来探测是否使用了某些软件,尤其是安全软件。
3.3. 端口信息
3.3.1. 常见端口及其脆弱点
FTP (21/TCP)
默认用户名密码
anonymous:anonymous
暴力破解密码
VSFTP 某版本后门
SSH (22/TCP)
部分版本 SSH 存在漏洞可枚举用户名
暴力破解密码
Telent (23/TCP)
暴力破解密码
嗅探抓取明文密码
SMTP (25/TCP)
无认证时可伪造发件人
DNS (53/UDP)
域传送漏洞
DNS 劫持
DNS 缓存投毒
DNS 欺骗
SPF / DMARC Check
DDoS
DNS Query Flood
DNS 反弹
DNS 隧道
DHCP 67/68
劫持/欺骗
TFTP (69/TCP)
HTTP (80/TCP)
Kerberos (88/TCP)
主要用于监听 KDC 的票据请求
用于进行黄金票据和白银票据的伪造
POP3 (110/TCP)
爆破
RPC (135/TCP)
wmic 服务利用
NetBIOS (137/UDP & 138/UDP)
未授权访问
弱口令
NetBIOS / Samba (139/TCP)
未授权访问
弱口令
SNMP (161/TCP)
Public 弱口令
LDAP (389/TCP)
用于域上的权限验证服务
匿名访问
注入
HTTPS (443/TCP)
SMB (445/TCP)
Windows 协议簇,主要功能为文件共享服务
net use \\192.168.1.1 /user:xxx\username password
Linux Rexec (512/TCP & 513/TCP & 514/TCP)
弱口令
Rsync (873/TCP)
未授权访问
RPC (1025/TCP)
NFS 匿名访问
Java RMI (1090/TCP & 1099/TCP)
反序列化远程命令执行漏洞
MSSQL (1433/TCP)
弱密码
差异备份 GetShell
SA 提权
Oracle (1521/TCP)
弱密码
NFS (2049/TCP)
权限设置不当
showmount <host>
ZooKeeper (2171/TCP & 2375/TCP)
无身份认证
Docker Remote API (2375/TCP)
未限制 IP / 未启用 TLS 身份认证
http://docker.addr:2375/version
MySQL (3306/TCP)
弱密码
日志写 WebShell
UDF 提权
MOF 提权
RDP / Terminal Services (3389/TCP)
弱密码
Postgres (5432/TCP)
弱密码
执行系统命令
VNC (5900/TCP)
弱密码
CouchDB (5984/TCP)
未授权访问
WinRM (5985/TCP)
Windows 对 WS-Management 的实现
在 Vista 上需要手动启动,在 Windows Server 2008 中服务是默认开启的
Redis (6379/TCP)
无密码或弱密码
绝对路径写 WebShell
计划任务反弹 Shell
写 SSH 公钥
主从复制 RCE
Windows 写启动项
Kubernetes API Server (6443/TCP && 10250/TCP)
https://Kubernetes:10250/pods
JDWP (8000/TCP)
远程命令执行
ActiveMQ (8061/TCP)
Jenkin (8080/TCP)
未授权访问
Elasticsearch (9200/TCP)
代码执行
http://es.addr:9200/_plugin/head/
http://es.addr:9200/_nodes
Memcached (11211/TCP)
未授权访问
RabbitMQ (15672/TCP & 15692/TCP & 25672/TCP)
MongoDB (27017/TCP)
无密码或弱密码
Hadoop (50070/TCP & 50075/TCP)
未授权访问
除了以上列出的可能出现的问题,暴露在公网上的服务若不是最新版,都可能存在已经公开的漏洞
3.3.2. 常见端口扫描技术
3.3.2.1. 全扫描
扫描主机尝试使用三次握手与目标主机的某个端口建立正规的连接,若成功建立连接,则端口处于开放状态,反之处于关闭状态。
全扫描实现简单,且以较低的权限就可以进行该操作。但是在流量日志中会有大量明显的记录。
3.3.2.2. 半扫描
在半扫描中,仅发送 SYN 数据段,如果应答为 RST,则端口处于关闭状态,若应答为 SYN/ACK,则端口处于监听状态。不过这种方式需要较高的权限,而且部分防火墙已经开始对这种扫描方式做处理。
3.3.2.3. FIN 扫描
FIN 扫描是向目标发送一个 FIN 数据包,如果是开放的端口,会返回 RST 数据包,关闭的端口则不会返回数据包,可以通过这种方式来判断端口是否打开。
这种方式并不在 TCP 三次握手的状态中,所以不会被记录,相对 SYN 扫描要更隐蔽一些。
3.3.3. Web 服务
Jenkins
未授权访问
Gitlab
对应版本 CVE
Zabbix
权限设置不当
3.3.4. 批量搜索
Censys
Shodan
ZoomEye
3.4. 站点信息
判断网站操作系统
Linux 大小写敏感
Windows 大小写不敏感
扫描敏感文件
robots.txt
crossdomain.xml
sitemap.xml
xx.tar.gz
xx.bak
等
确定网站采用的语言
如 PHP / Java / Python 等
找后缀,比如 php/asp/jsp
前端框架
如 jQuery / BootStrap / Vue / React / Angular 等
查看源代码
中间服务器
如 Apache / Nginx / IIS 等
查看 header 中的信息
根据报错信息判断
根据默认页面判断
Web 容器服务器
如 Tomcat / Jboss / Weblogic 等
后端框架
根据 Cookie 判断
根据 CSS / 图片等资源的 hash 值判断
根据 URL 路由判断
如 wp-admin
根据网页中的关键字判断
根据响应头中的 X-Powered-By
CDN 信息
常见的有 Cloudflare、yunjiasu
探测有没有 WAF,如果有,什么类型的
有 WAF,找绕过方式
没有,进入下一步
扫描敏感目录,看是否存在信息泄漏
扫描之前先自己尝试几个的 url,人为看看反应
使用爬虫爬取网站信息
拿到一定信息后,通过拿到的目录名称,文件名称及文件扩展名了解网站开发人员的命名思路,确定其命名规则,推测出更多的目录及文件名
常见入口目标
关注度低的系统
业务线较长的系统
3.5. 搜索引擎利用
恰当地使用搜索引擎(Google/Bing/Yahoo/Baidu 等)可以获取目标站点的较多信息。
3.5.1. 搜索引擎处理流程
数据预处理
长度截断
大小写转化
去标点符号
简繁转换
数字归一化,中文数字、阿拉伯数字、罗马字
同义词改写
拼音改写
处理
分词
关键词抽取
非法信息过滤
3.5.2. 搜索技巧
site:www.hao123.com
返回此目标站点被搜索引擎抓取收录的所有内容
site:www.hao123.com keyword
返回此目标站点被搜索引擎抓取收录的包含此关键词的所有页面
此处可以将关键词设定为网站后台,管理后台,密码修改,密码找回等
site:www.hao123.com inurl:admin.php
返回目标站点的地址中包含 admin.php 的所有页面,可以使用 admin.php/manage.php 或者其他关键词来寻找关键功能页面
link:www.hao123.com
返回所有包含目标站点链接的页面,其中包括其开发人员的个人博客,开发日志,或者开放这个站点的第三方公司,合作伙伴等
related:www.hao123.com
返回所有与目标站点”相似”的页面,可能会包含一些通用程序的信息等
intitle:"500 Internal Server Error" "server at"
搜索出错的页面
inurl:"nph-proxy.cgi" "Start browsing"
查找代理服务器
除了以上的关键字,还有 allintile / allinurl / allintext / inanchor / intext / filetype / info / numberange / cache 等。
3.5.2.1. 通配符
*
代表某一个单词OR 或者 | 代表逻辑或
单词前跟
+
表强制查询单词前跟
-
表排除对应关键字"
强调关键字
3.5.2.2. tips
查询不区分大小写
括号会被忽略
默认用 and 逻辑进行搜索
3.5.3. 快照
搜索引擎的快照中也常包含一些关键信息,如程序报错信息可以会泄漏网站具体路径,或者一些快照中会保存一些测试用的测试信息,比如说某个网站在开发了后台功能模块的时候,还没给所有页面增加权限鉴别,此时被搜索引擎抓取了快照,即使后来网站增加了权限鉴别,但搜索引擎的快照中仍会保留这些信息。
另外也有专门的站点快照提供快照功能,如 Wayback Machine 和 Archive.org 等。
3.5.4. Github
在 Github 中,可能会存在源码泄露、AccessKey 泄露、密码、服务器配置泄露等情况,常见的搜索技巧有:
@example.com password/pass/pwd/secret/credentials/token
@example.com username/user/key/login/ftp/
@example.com config/ftp/smtp/pop
@example.com security_credentials/connetionstring
@example.com JDBC/ssh2_auth_password/send_keys
3.6. 社会工程学
3.6.1. 企业信息收集
一些网站如天眼查等,可以提供企业关系挖掘、工商信息、商标专利、企业年报等信息查询,可以提供企业的较为细致的信息。
公司主站中会有业务方向、合作单位等信息。
3.6.2. 人员信息收集
针对人员的信息收集考虑对目标重要人员、组织架构、社会关系的收集和分析。其中重要人员主要指高管、系统管理员、运维、财务、人事、业务人员的个人电脑。
人员信息收集较容易的入口点是网站,网站中可能包含网站的开发、管理维护等人员的信息。从网站联系功能中和代码的注释信息中都可能得到的所有开发及维护人员的姓名和邮件地址及其他联系方式。
在获取这些信息后,可以在 Github/Linkedin 等社交、招聘网站中进一步查找这些人在互联网上发布的与目标站点有关的一切信息,分析并发现有用的信息。
此外,可以对获取到的邮箱进行密码爆破的操作,获取对应的密码。
3.6.3. 钓鱼
基于之前收集到的信息,可以使用 Office/CHM/RAR/EXE 等文件制作钓鱼邮件发送至目标,进一步收集信息。
其中 Office 可以使用 Office 漏洞、宏、OLE 对象、PPSX 等方式构造利用文件。
Exe 可以使用特殊的 Unicode 控制字符来构建容易混淆的文件名。
如果前期信息收集获取到了运维等人员的邮箱,可以使用运维人员的邮箱发送,如果未收集到相关的信息,可以使用伪造发送源的方式发送邮件。
3.6.4. 其他信息
公司的公众号、企业号、网站,员工的网盘、百度文库等可能会存在一些敏感信息,如 VPN/堡垒机账号、TeamViewer 账号、网络设备默认口令、服务器默认口令等。
3.7. 参考链接
看到这里的大佬,动动发财的小手 点赞 + 回复 + 收藏,能【 关注 】一波就更好了
我是一名渗透测试工程师,为了感谢读者们,我想把我收藏的一些网络安全/渗透测试学习干货贡献给大家,回馈每一个读者,希望能帮到你们。
干货主要有:
① 2000 多本网安必看电子书(主流和经典的书籍应该都有了)
② PHP 标准库资料(最全中文版)
③ 项目源码(四五十个有趣且经典的练手项目及源码)
④ 网络安全基础入门、Linux 运维,web 安全、渗透测试方面的视频(适合小白学习)
⑤ 网络安全学习路线图(告别不入流的学习)
⑥ 渗透测试工具大全
⑦ 2021 网络安全/Web 安全/渗透测试工程师面试手册大全
各位朋友们可以关注+评论一波 然后加下 QQ 群:581499282 备注:infoq 即可免费获取全部资料(一起来群里聊天吹水阿)
评论