目录
一、要求
1、DNS解析详细步骤。
2、绕过CDN查找主机真实IP的方法。
3、子域名信息收集常用手段。
4、Nmap全端口扫描
5、dirmap目录探测工具实践
6、Fscan实践
7、课上所演示插件安装成功截图。
二、内容与步骤记录
(一)DNS解析
DNS(Domain Name System,域名系统)是互联网的一项基础服务,用于将人类易于记忆的域名转换为机器可识别的IP地址,从而实现互联网主机之间的通信。
1.DNS的主要功能
(1)域名解析:DNS的主要功能是将域名解析为对应的IP地址。当你在浏览器中输入一个网址时,DNS系统负责查找并返回该网址对应的IP地址,使得浏览器可以找到并连接到正确的服务器。
(2)反向解析:除了将域名转换为IP地址外,DNS还支持反向解析,即将IP地址转换为域名。这在网络管理和安全监控中很有用。
(3)提供分布式数据库:DNS是一个分布式数据库,全球范围内的多个DNS服务器共同协作,存储并提供域名和IP地址之间的映射。每个服务器负责不同的域名区域,使得DNS查询可以分布式地处理。
2.DNS的组成部分
(1)域名空间(Domain Name Space):DNS使用分层结构的域名空间来组织域名。每个域名由多个标签组成,用点号分隔,如‘www.example.com’。域名空间从根域开始,依次是顶级域、二级域等。
(2)DNS服务器
DNS服务器负责存储域名和IP地址之间的映射记录。主要类型包括:
- 根DNS服务器:负责顶级域名的查询,是整个DNS系统的核心。
- 顶级域名服务器(TLD Name Server):管理顶级域名(如.com, .org, .cn等)。
- 权威DNS服务器:存储特定域名的最终解析信息。
- 递归DNS服务器:为客户端提供递归查询服务,直到找到目标IP地址。
(3)DNS记录
DNS服务器中的每个域名都有对应的DNS记录,常见的类型包括:
- A记录:将域名映射到IPv4地址。
- AAAA记录:将域名映射到IPv6地址。
- CNAME记录:将一个域名别名映射到另一个域名。
- MX记录:指定域名的邮件服务器。
- NS记录:指定负责某个域名区域的DNS服务器。
3.步骤流程
(1)本地缓存检查:
当你在浏览器中输入一个网址时,操作系统首先会检查本地的DNS缓存,看这个域名是否已经有对应的IP地址记录。如果有,浏览器会直接使用这个IP地址,省略以下步骤。
(2)主机文件检查:
如果在本地缓存中找不到记录,操作系统会检查‘hosts’文件。‘hosts’文件是一个本地文本文件,其中可以存储静态域名到IP地址的映射。
(3)向本地DNS服务器查询:
如果‘hosts’文件中也没有找到匹配的记录,操作系统会向本地配置的DNS服务器(通常是由ISP提供的DNS服务器)发送查询请求。
(4)本地DNS服务器缓存检查:
本地DNS服务器收到请求后,会先在它自己的缓存中查找是否有该域名的IP地址。如果找到,则返回该IP地址。
(5)递归查询:
如果本地DNS服务器的缓存中没有对应记录,它会进行递归查询。首先,它会向根DNS服务器发送请求。根DNS服务器不会直接知道具体域名的IP地址,但它知道哪个顶级域(如“.com”或“.cn”)服务器负责。根服务器会返回负责该顶级域的DNS服务器地址。
(6)顶级域DNS服务器查询:
本地DNS服务器向顶级域DNS服务器发送请求(例如,查询“example.com”中的“.com”服务器)。顶级域服务器会返回次级域名服务器(如“example.com”)的地址。
(7)权威DNS服务器查询:
本地DNS服务器向次级或权威DNS服务器发送查询请求。权威DNS服务器存储着域名和其对应的IP地址记录。如果权威DNS服务器有该域名的记录,它会返回域名的IP地址。
(8) 返回查询结果:
本地DNS服务器将权威DNS服务器返回的结果缓存起来(以便下次查询更快),然后将结果返回给客户端。
(9)客户端使用IP地址进行通信:
操作系统收到IP地址后,浏览器使用该IP地址与目标服务器建立连接。
4.DNS域名解析的主要查询方式
(1)递归查询(Recursive Query)
在递归查询中,DNS客户端向本地DNS服务器发送查询请求,本地DNS服务器会负责查询过程的所有步骤,直到找到请求的域名对应的IP地址或者返回错误。
①递归查询的特点:
- 客户端只向本地DNS服务器发送一次请求。
- 本地DNS服务器会向其他DNS服务器继续发送查询请求(如果有必要),直到找到请求的域名的IP地址或返回未找到的信息。
- 客户端只需等待本地DNS服务器的最终响应。
②递归查询的工作流程:
- 客户端向本地DNS服务器发送一个递归查询请求,要求解析某个域名。
- 如果本地DNS服务器缓存中有该域名的记录,则直接返回结果给客户端。
- 如果缓存中没有,该DNS服务器会依次向根DNS服务器、顶级域DNS服务器(如.com、.net)、权威DNS服务器发送查询请求,直到找到正确的IP地址。
- 本地DNS服务器将结果返回给客户端,并可能将该结果缓存起来以备将来使用。
(2)迭代查询(Iterative Query)
在迭代查询中,DNS服务器接收到查询请求后,如果自己没有相应的记录,就会返回一个更接近答案的DNS服务器的地址,让客户端自己去继续查询。客户端需要逐步向多个DNS服务器发送查询请求,直到找到目标IP地址。
①迭代查询的特点:
- 客户端需要多次向不同的DNS服务器发送查询请求。
- 每次查询,DNS服务器要么返回请求的域名对应的IP地址,要么返回下一步查询的DNS服务器的地址。
- 客户端会根据返回的地址继续查询,直到最终获得域名的IP地址。
②迭代查询的工作流程:
- 本地DNS服务器向根DNS服务器发送一个迭代查询请求。
- 根DNS服务器检查其记录,如果没有找到域名的具体IP地址,则返回一个更接近目标的顶级域名(TLD)服务器地址。
- 本地DNS服务器向返回的TLD服务器发送请求,继续查找。
- TLD服务器如果没有请求的域名记录,会返回更接近目标的权威DNS服务器地址。
- 本地DNS服务器继续向权威DNS服务器发送请求,直到获得最终的IP地址。
- 最终结果返回给最初请求的客户端。
(3)递归查询与迭代查询的结合
在实际的DNS解析过程中,这两种查询方式通常是结合使用的。
通常是:
- 客户端向本地DNS服务器发起递归查询。
- 本地DNS服务器向其他DNS服务器进行迭代查询,直到找到所需的信息。
(二)绕过CDN查找主机真实IP的方法。
1.DNS历史记录查询
(1)使用DNS历史记录查询工具(如SecurityTrails、DNS Dumpster、ViewDNS、VirusTotal等)来查找过去该域名的DNS解析记录。某些域名在配置CDN之前可能暴露过真实IP地址。
(2)查找目标域名的历史A记录、PTR记录,或其他与IP地址相关的历史数据,可能会发现未经过CDN代理的直接IP。
2.子域名查找
(1)一些子域名可能没有经过CDN保护,仍然直接指向目标服务器的真实IP地址。
(2)可以使用子域名枚举工具(如Sublist3r、Subfinder、Amass)和在线服务(如DNS Dumpster、crt.sh、VirusTotal)进行子域名枚举,检测是否存在未经过CDN保护的子域名。
3.暴露的服务端口扫描
(1)使用端口扫描工具(如Nmap、Masscan)扫描目标服务器的IP地址范围,检测是否有特定端口(如Web服务器的80/443端口)开放。
(2)如果目标网站的真实IP存在其他暴露的服务端口,可以尝试连接这些端口来确定真实IP。
4.邮件服务器记录(MX记录)
(1)查看目标域名的MX记录(邮件交换记录),因为这些记录有时会指向未经过CDN的真实IP地址。
(2)使用nslookup或dig命令获取MX记录,例如:
nslookup -query=mx example.com或dig mx example.com
5.内部引用泄露
(1)查找网站内部的引用,如CSS文件、JavaScript文件、图片、PDF等资源。这些资源可能在URL中暴露了未经过CDN的服务器IP地址。
(2)使用工具如Burp Suite或Wireshark抓包,检查流量中的内部IP泄露。
6.暴露的Web应用程序接口(API)
某些API子域可能直接指向目标服务器,而未经过CDN保护。查找这些API的URL或使用工具测试API子域,看看是否存在直接的IP地址响应。
7.网络服务协作(服务器名称指示,SNI)
使用SSL/TLS中的SNI扩展,直接向目标主机请求一个没有经过CDN的子域或已知IP地址。如果目标服务器暴露了TLS证书或在SNI扩展中响应了请求,可以推测出真实的服务器IP。
8.FTP和SSH连接
(1)检查目标主机是否暴露了FTP或SSH服务,并尝试使用默认凭据或暴力破解获取访问权限。
(2)一旦成功访问到这些服务,可以查看服务器配置文件来获取真实IP。
9.社工和社交工程
利用社交工程方法联系目标组织的员工或IT团队,尝试获取真实IP地址信息。例如,伪装成供应商或客户,询问服务器相关的信息。
10.漏洞利用
(1)通过已知的漏洞(如SQL注入、文件包含漏洞)获取服务器的内部网络信息或配置文件,这些文件可能暴露服务器的真实IP地址。
(2)利用工具(如SQLMap、Metasploit)来自动化发现和利用这些漏洞。
11. 第三方服务日志
(1)检查使用了第三方服务的目标网站(如分析工具、广告服务、CDN缓存错误页面等),这些服务可能在日志中泄露目标服务器的真实IP。
(2)使用服务如Censys、Shodan、GreyNoise等网络扫描器服务来搜索与目标域名或服务器IP相关的记录。
(三)子域名信息收集常用手段。
1.使用子域名查询工具:有许多在线工具和命令行工具可用于查询网站的子域名。一些常用的工具包括:
(1)Subdomain Finder:这是一个在线工具,可通过输入主域名来查找相关的子域名。
(2)DNSdumpster:该工具可以通过DNS记录查找子域名。-Sublist3r:一个命令行工具,用于枚举网站的子域名。
(3)Amass:一个全面的子域名枚举工具,具有多种功能。
2.暴力破解:尝试通过猜测可能的子域名来枚举它们。这可以通过使用字典或生成算法来生成可能的子域名,并逐一检查它们是否存在。虽然这种方法可能会找到一些子域名,但效率较低且可能不全面。
3.利用搜索引擎:使用搜索引擎的高级搜索运算符和特定的关键字来查找与目标网站相关的子域名。例如,可以使用site:operator来限制搜索结果只来自特定的网站。
4.网络爬虫:编写爬虫程序来抓取目标网站及其相关页面,提取出其中的子域名信息。这需要一定的编程技能和对网站结构的了解。
5.监控DNS变更:使用DNS监控工具来监测目标域名的 DNS 记录变更。当新的子域名被添加或修改时,你可以及时得到通知。
(四)Nmap扫描
Nmap是一款针对大型网络的端口扫描工具,它也适用于单机扫描,它支持很多扫描,也同时支持性能和可靠性统计,Namp是可以免费下载的,是在免费软件基金会的GNU General Public License (GPL)下发布的
1.端口扫描(Port Scanning):
Nmap 默认只扫描 1000 个常见端口,为了进行全端口扫描,我们需要指定端口范围为 1-65535,即使用-p- 参数告诉 Nmap 扫描所有端口。命令如下:
nmap -p- <目标ip地址>
为了获取更详细的信息,包括操作系统检测、脚本扫描等,可以使用-A 选项启用操作系统检测、版本检测、脚本扫描和 traceroute。命令如下:
nmap -p- -A <目标ip地址>
对 Pikachu 靶场进行有效的全端口扫描,靶场必须处于打开并运行状态。确保靶场在网络中可访问,并且相关服务正在监听端口,这样 Nmap 扫描才能成功获取到靶场的端口和服务信息。
2.SYN半开扫描
SYN半开扫描的原理是利用了TCP连接建立过程中的三次握手特性,以半开连接的方式探测目标主机的服务端口是否开放。
步骤如下:
(1)发送SYN数据包:向目标主机的每个可能端口发送一个SYN数据包,模拟发起一个TCP连接请求。
(2)等待响应:等待目标主机的响应。如果收到SYN/ACK数据包,表示该端口开放;如果收到RST数据包,表示该端口关闭。
(3)发送RST数据包:对于开放的端口,不完成TCP三次握手过程,而是立即发送一个RST数据包来关闭连接。这样做的好处是不容易被上层应用记录,同时速度也比完成TCP请求快。
SYN扫描之所以被称为半开扫描,是因为它并没有完成TCP的三次握手过程。通过这种方式,SYN扫描不容易被目标主机发现,因为它不完成TCP连接,不完整的TCP连接一般不会被目标主机记录,从而提高了扫描的安全性。此外,由于不需要等待完整的TCP握手过程,SYN扫描的速度较快,每秒钟可以扫描数千个端口,因此在网络扫描中得到了广泛应用
3.跳过主机存活检测扫描
跳过主机存活检测扫描是一种网络扫描技术,其中不进行主机是否在线的检测,直接进行端口扫描或其他网络服务的探测。这种扫描方式通常使用-Pn参数,意味着跳过ping扫描或其他主机发现机制,直接进入端口扫描阶段。这种技术常用于已经知道目标主机在线,或者在进行大规模网络扫描时,为了提高扫描效率而采取的策略。
在网络侦察和安全测试中,这种技术可以帮助攻击者或安全研究人员快速定位开放的端口和服务,进而分析目标系统的潜在漏洞。同时,对于网络管理员来说,这种技术也可以用于快速检查网络中特定端口的开放情况,以便于网络维护和管理。
(五)dirmap目录探测工具实践
dirmap是一个用于 Web 应用程序的目录和文件探测工具。它主要用于通过字典攻击或递归暴力枚举的方式对目标 Web 服务器的目录结构进行探测。其目标是识别那些通常未公开的目录和文件,这些目录和文件可能会包含敏感信息或者允许未授权访问,帮助安全研究人员和渗透测试人员发现敏感文件、隐藏目录以及可能存在的安全漏洞。
1.安装 dirmap
(1)克隆 github 仓库
(2)进入 dirmap目录
(3)安装依赖
在安装目录中运行以下命令来安装必要的 Python 依赖:
pip install -r requirements.txt
安装完成显示如下
2.使用 dirmap对 Pikachu 靶场进行目录探测
(1)参数说明
以下是 dirmap常用的参数:
-i 或 --url:指定要扫描的目标URL。
-w 或 --wordlist:指定字典文件,用于猜测目录名或文件名。
-e 或 --extensions:指定要扫描的文件扩展名,如php、asp等。
-l 或 --level:指定扫描的级别,默认为1,表示只对指定URL进行扫描;如果设置为2,还会对发现的目录进行扫描,依此类推。
-t 或 --threads:设置扫描线程数。
-d 或 --dict-path:设置字典文件的路径。
-c 或 --config:加载特定的配置文件进行扫描。
-F 或 --force:强制进行扫描,即使遇到某些错误也不停止。
-h 或 --help:显示帮助文档,列出所有可用的命令行选项和说明。
(2)基本目录扫描
在命令行中运行命令:python dirmap.py -i http://localhost:801/pikachu-master -lcf,对 Pikachu 靶场进行基本目录探测:
这使用的默认字典文件(-lcf)进行的扫描。
3. 查看和分析扫描结果
扫描完成后,你可以查看扫描结果文件(如 results.txt)或在命令行中查看扫描结果。dirmap将列出所有发现的目录和文件,以及它们的 HTTP 响应代码。
200:请求成功,表示目录或文件存在。
403:禁止访问,表示服务器拒绝请求(可能是权限问题)。
404:未找到,表示目录或文件不存在。
4. 使用注意事项
(1)合法性:在进行任何扫描或渗透测试之前,确保你有合法的授权。这是非常重要的,未经授权的扫描可能会导致法律问题。
(2)目标服务器的负载:在使用多线程或高强度扫描时,请注意目标服务器的负载。高频率请求可能导致服务器宕机或者触发防火墙报警。
(3)字典选择:字典文件的选择对扫描结果的准确性有很大影响。建议使用经过优化的字典文件,根据目标的实际情况选择合适的字典。
(4)隐私保护:在输出扫描结果时,注意保护敏感信息。不要公开分享扫描结果,除非已获得授权并经过适当的匿名处理。
(六)Fscan实践
Fscan是一个综合性的网络扫描工具,主要用于快速信息收集和漏洞扫描。它集成了多种扫描功能,如端口扫描、指纹识别、服务弱口令检测、目录爆破等,适合渗透测试和红队评估等场景。
1.安装 Fscan
(1)从 GitHub 下载 Fscan
https://github.com/shadow1ng/fscan
在页面中找到对应的操作系统的二进制文件,下载并解压缩。
(2)直接运行
下载解压后,Fscan 不需要安装,直接通过命令行运行即可:
2.使用Fscan对pikachu靶场进行实践
(1)参数说明
-h:显示帮助信息。
-hL:从文件中读取目标列表进行批量扫描。
-port:指定端口范围(例如,`1-65535` 或者 `80,443,8080`)。
-pwfile:指定密码字典文件,用于暴力破解。
-userfile:指定用户字典文件,用于暴力破解。
-o:指定输出文件,保存扫描结果。
-ping:进行主机存活检测。
-no-ping:不进行存活检测直接扫描。
-vuln:进行漏洞扫描。
(2)扫描所有开放端口
fscan.exe -h <目标ip地址>
(3)使用 Fscan 进行靶场端口扫描
fscan.exe -h <目标ip地址> -p 801
3. 注意事项
(1)合法授权:确保你有合法的授权对目标系统进行扫描。未经授权的扫描可能会导致法律问题。
(2)网络负载:Fscan 可以非常高效地进行扫描,使用时要注意目标服务器的负载和网络流量。高频率的扫描可能会导致目标服务器性能下降或触发安全设备报警。
(3)分析结果:Fscan 的结果需要进一步人工分析,不是所有检测到的内容都是安全漏洞。通过进一步分析,可以确定哪些发现是真正的威胁。
(七)课上所演示插件安装成功截图。
三、思考与总结
1.通过结合递归查询和迭代查询,DNS系统能够高效地解析域名,并将域名解析的负担分布在不同层次的DNS服务器上,从而优化解析性能并减轻单个服务器的负担。
2.在进行子域名收集时,应遵守法律法规和网站的使用条款。对于敏感或受保护的网站,可能需要获得适当的授权才能进行子域名枚举。此外,一些网站可能会实施反爬虫机制,因此在收集子域名时要小心处理请求频率和其他限制。
3.Fscan 是一个功能强大、易于使用的网络扫描工具,非常适合进行渗透测试和安全评估。结合其他工具和手动分析,你可以更全面地了解目标系统的安全状况,并识别潜在的安全风险。