简介
渗透的本质是信息收集,信息收集也叫做资产收集。
信息收集是渗透测试的前期主要工作,是非常重要的环节,收集足够多的信息才能方便接下来的测试,信息收集主要是收集网站的域名信息、子域名信息、目标网站信息、目标网站真实ip、敏感目录文件、开放端口等等信息
分类
- 服务器相关信息
- 网站指纹识别
- whois信息,姓名,备案,邮箱,电话反查,开饭端口,WAF等
- 子域名收集,旁站,C段
- google hacking针对化搜索,word/电子表格/pdf,中间件版本,弱口令扫描等
方法
- whois查询
- 域名分为根域名和子域名
- 收集子域名
- 端口扫描
- 服务器需要开放服务,就必须要开放端口,常见的端口是tcp和udp两种类型
- 范围:0-65535
- 查找真实ip
- 企业的网站,为了提高访问速度,或者避免黑客攻击,会使用cdn服务
- 探测旁站及C段
- 旁站一个服务器上有多个网站,可以通过ip查询服务器上的网站
- C段::查找同一段服务器上的网站,可以查到同样的类型和服务器
- 网络空间搜索引擎
- 通过这些引擎查找网站或者服务器信息,进行下一步渗透
- 扫描敏感目录/文件
- 通过扫描目录和文件,大致了解网站的结构,获取突破口
- 指纹识别
- 获取网站的版本,属于哪些cms管理系统,查找漏洞exp,通过下载源码进行代码审计
收集子域名
作用
收集子域名可以扩大测试范围,同一域名下的二级子域名都属于目标范围
常用方式
常见的资产类型一般包括办公系统、邮箱系统、论坛、商城等,其他管理系统、网站管理后台可能也会出现在子域名中
- 使用在线子域名扫描工具
- 有许多在线工具可以帮助扫描和发现子域名,例如:
- DNSdumpster.com 提供免费的子域名搜索服务,同时提供域名关联的网络地图。
- VirusTotal.com 虽然它主要是一个恶意软件扫描服务,但它也提供了子域名搜索功能。
- ThreatCrowd.org 一个免费的威胁情报平台,可以用来搜索子域名。
- Sublist3r.com 是Sublist3r工具的在线版本,可以用来查找子域名。
- Crt.sh 一个证书透明度日志搜索服务,可以用来查找与特定域名相关的所有子域名。
- SecurityTrails.com 提供子域名搜索服务,以及其他历史DNS记录和域信息。
- Spyse.com 提供子域名搜索功能,以及其他网络安全相关的信息。
- PassiveTotal.org 一个商业服务,提供子域名枚举和其他网络侦察工具。
- Hackertarget.com 提供多种网络安全工具,包括一个简单的子域名扫描器。
- Bufferover.run 一个提供各种网络安全相关搜索的工具,包括子域名搜索。
- 有许多在线工具可以帮助扫描和发现子域名,例如:
- 利用系统的命令行工具进行DNS查询
- 使用 nslookup 或 dig 命令
- Windows系统:
- nslookup:这是一个Windows内置的命令行工具,用于查询DNS以查找域名与IP地址的映射关系。nslookup example.com
- ipconfig /displaydns:这个命令可以显示本地DNS解析器缓存的内容。
- Windows系统:
- Linux和macOS系统:
- dig:这是一个功能强大的DNS查询工具,通常在Unix-like系统中预装。dig example.com
- nslookup:与Windows相同,但可能需要安装。nslookup example.com
- host:这是另一个用于DNS查询的命令行工具。host example.com
- 使用 nslookup 或 dig 命令
- 利用暴力破解
- 通过暴力破解尝试常见的子域名,可以使用工具如:sublist3r,wfuzz,gobuster等结合常见的子域名名称进行暴力破解。
- 使用常规搜索引擎
- 通过搜索引擎进行搜索可以找到一些子域名。例如:Google、Bing等搜索引擎中使用site:example.com查询,可能会发现一些公开的子域名。
- 使用网络空间搜索引擎
- 使用Shodan、Censys、ZoomEye等网络空间搜索引擎,可以搜索目标域名相关的资产。
- 证书透明度日志
- 通过证书透明度(Certificate Transparency)日志,可以找到与目标域名相关的所有子域名。使用工具如Certspotter、Crt.sh等。
- 使用网络爬虫
- 编写或使用现成的网络爬虫程序,爬取网站并分析链接,可能会发现子域名。
- 分析网络流量
- 如果有权访问组织的网络流量,可以分析流量数据来发现子域名。
- 社交媒体和网络论坛
- 在社交媒体、专业论坛和博客上搜索品牌或公司名称,可能会发现一些未知的子域名。
- 隐藏hosts碰撞
- 特征:一般是403可以尝试
- 原理:反代nginx进行ip直接访问,此时可以通过绑定hosts
类型
A记录、别名记录(CNAME)、MX记录、TXT记录、NS记录
A(adress)记录
是用来指定主机名(或域名)对应ip地址记录。用户可以将该域名下的网站服务器指向自己的web server上,同时可以设置域名的二级域名
CNAME记录
真实名称记录(英语:Canonical Name Record),即CNAME记录,是域名系统(DNS)的一种记录。CNAME记录用于将一个域名(同名)映射到另一个域名(真实名称),域名解析服务器遇到CNAME记录会以映射到的目标重新开始查询。
这对于需要在同一个IP地址上运行多个服务的情况来说非常方便。若要同时运行文件传输服务和Web服务,则可以把 ftp.example.com 和 www.example.com 都指向DNS记录 example.com ,而后者则有一个指向IP地址的A记录。如此一来,若服务器IP地址改变,则只需修改example.com的A记录即可。
如何检测是否为cname记录
使用 nslookup -q=cname 二级域名即可,查看返回结果是否一致即可
MX记录
邮箱交换记录,它指向一个邮件服务器,用于电子邮件系统发邮件时根据收件人的地址后缀来定位邮箱服务器
TXT记录
TXT记录一般是某个主机名或域名设置的说明
NS记录
一种域名服务器记录,用来明确你当前域名是哪个dns来解析的
端口扫描
当确定了目标大致ip段后,可以先对ip开放端口进行侦测,一些特定服务可能开在默认端口上,侦测开放端口有利于快速收集资产,找到目标网站的其他功能站点
Nmap端口扫描
- 基础扫描
- 扫描主机开放端口(默认前1000端口):
nmap 192.168.1.100
- **指定端口**:
nmap 192.168.1.100 -p 80,443,22
nmap 192.168.1.100 -p 1-65535
```
- 快速扫描常用端口:
```
nmap -F 192.168.1.100
2. 扫描方式 - **TCP全连接扫描**(-sT):适合无root权限环境。
nmap -sT 192.168.1.100 -p 80
```
- SYN半开扫描(-sS):隐蔽性高,速度快。
nmap -sS 192.168.1.100 -p 80 ```
- UDP扫描(-sU):探测DNS、SNMP等UDP服务
- 保存为文本/XML:
nmap -oN result.txt 192.168.1.100
nmap -oX result.xml 192.168.1.100
- 多格式同时输出:
nmap -oA scan_all 192.168.1.100
- 状态
- 详细状态
nmap -v 192.168.1.100
旁站和C段扫描
旁站的概念
旁站指的是同一服务器上的其他网站,很多时候,有些网站可能不是那么容易入侵。那么,可以查看该网站所在的服务器上是否还有其他网站。如果有其他网站的话,可以先拿下其他网站的webshell,然后再提权拿到服务器的权限,最后就自然可以拿下该网站了
C段
C段指的是同一内网段内的其他服务器,每个IP有ABCD四个段,举个例子,192.168.0.1,A段就是192,B段是168,C段是0,D段是1,而C段嗅探的意思就是拿下它同一C段中的其中一台服务器,也就是说是D段1-255中的一台服务器,然后利用工具嗅探拿下该服务器。
扫描敏感目录
扫描敏感目录需要强大的字典,平时需要积累,拥有强大的字典能够高效的找出管理后台,敏感文件如.git文件泄露、.svn文件泄露、phpinfo文件泄露等
扫描敏感文件
- robots.txt
- crossdomin.html
- sitemap.xml
- 后台目录
- 网站安装包
- 网站上传目录
- mysql 管理页面
- phpinfo
- 网站文本编辑器
- 测试文件
- 网站备份文件(.rar、.zip、.7Z、.tar.gz、.bak)
- DS_Store文件
- vim 编辑器备份文件(.swp)
- WEB——INF/web.xml文件
- .git
- .svn
CMS 识别
收集好网站信息后,应该对网站进行指纹识别,确定目标cms及版本,方便下一步的测试计划,可以使用公开的poc或者自己积累的对应手法等
网站源码查看
html源码
可以对网页F12查看源码
法一:F12被禁止的办法:使用view-source:
法二:我们也可以在其他界面打开F12后再访问目标链接
php源码
php源码泄露有时候能帮上忙
- 泄露原因
- phps泄露
- git/svn泄露
- vim泄露(.swp泄露)
git泄露
发现泄露: 访问 http://target.com/.git/config。如果返回了 Git 的配置信息,说明存在泄露。
下载仓库: 在你的安全测试环境(如你的 Arch VM)中,使用工具将 .git 目录 dump 下来。最常用的工具是 GitHack 或 dvcs-ripper。
# 使用 GitHack 示例 (会自动还原到工作区)
python2 GitHack.py http://target.com/.git/# 使用 GitHack 示例 (会自动还原到工作区)
python2 GitHack.py http://target.com/.git/
Git 版本回退
很多时候,当前最新版本的代码中并没有敏感信息,因为开发者可能意识到了错误并在后来的提交中把密码或 Flag 删掉了。但 Git 的特性是雁过留声,被删除的信息依然存在于历史版本中。
1. 查看历史记录 (git log)
这是溯源的第一步,你需要看明白开发者都做了哪些操作。
- 基础查看:
git log
这会列出所有 commit 的哈希值(commit hash)、作者、时间和提交说明(例如:“remove db password” 或 “update flag”)。
- 查看每次提交修改了哪些文件:
git log --stat
- 查看每次提交的具体代码差异(Diff):
git log -p
实战技巧:如果提交记录不多,直接运行 git log -p 可以一眼看到代码里曾经添加过又删除了什么(红色带 - 号的行)。
2. 版本切换与回退 (git checkout / git reset)
当你通过 git log 发现某个早期的 commit(假设 Hash 为 a1b2c3d)可能包含敏感信息时,你需要让代码回到那个状态。
- 游离状态查看(推荐):
git checkout a1b2c3d
这种方式最安全,它让你穿越回那个版本查看文件内容,但不会破坏当前的 Git 状态。看完后,可以通过 git checkout main (或 master) 切回来。
- 强制硬回退:
git reset --hard a1b2c3d
这会将你的工作区完全强制重置到该 commit 时的状态。注意:这会丢失回退点之后的所有历史记录,如果还需要看后面的记录,建议先开新分支或使用 checkout。
3. 恢复被篡改的提交记录 (git reflog & git stash)
在某些高级的 CTF 题或红队场景中,出题人/开发者会使用 git reset --hard 故意抹除某次包含敏感信息的 commit 记录,导致 git log 里根本看不到。
- 使用 reflog 找回:
git reflog记录了 HEAD 指针的每一次移动。即使 commit 被从 log 中抹除,reflog 依然会有记录(除非被彻底执行了 GC 回收)。
git reflog
找到那条被抹掉的 commit hash 后,直接 git checkout <hash> 即可恢复。
- 检查暂存区: 有时候开发者做到一半把代码存起来了。
git stash list # 查看是否有暂存
git stash pop # 弹出暂存区内容
SVN泄露
发现泄露与版本差异(源码恢复)
SVN 在 1.7 版本前后经历了一次重大架构调整,这直接影响了我们提取源码的方式。
- 发现泄露:尝试访问
http://target.com/.svn/entries。如果返回了目录列表或一些乱码文本,说明存在泄露。 - 区分版本与手动提取原理:
- SVN < 1.7 (旧版):
- 特征:每个目录下都有一个
.svn文件夹。 - 核心文件:
.svn/entries是明文文本,记录了当前目录下的所有文件、目录、版本号和原始 SVN 服务器地址。 - 源码位置: 网站上的
index.php,它的原始代码会被备份在http://target.com/.svn/text-base/index.php.svn-base。你可以直接通过浏览器或curl下载这个.svn-base文件来获取源码。
- 特征:每个目录下都有一个
- SVN >= 1.7 (新版,目前最常见):
- 特征: 只有项目根目录下有一个
.svn文件夹。 - 核心文件:
.svn/wc.db。这是一个 SQLite 数据库文件,记录了所有文件的元数据。- 源码位置:源码被重命名为 SHA1 哈希值,集中存放
- 特征: 只有项目根目录下有一个
- SVN < 1.7 (旧版):
- 自动化利用工具:
python SvnHack.py -u http://target.com/.svn/