目录
一、DNS解析详细步骤
DNS解析域名获取目标服务器IP的过程如下:
(1)首先搜索「浏览器的DNS缓存」,缓存中维护着一张域名与 IP 地址的对应表;
(2)若没有命中,则继续搜索「操作系统的DNS缓存」;
(3)若仍然没有命中,则操作系统将域名发送至「本地域名服务器」,本地域名服务器查询自己的DNS缓存,查找成功则返回结果(注意:主机和本地域名服务器之间的查询方式是「递归查询」);
(4)若本地域名服务器的DNS缓存没有命中,则本地域名服务器向上级域名服务器进行查询,通过以下方式进行「迭代查询」(注意:本地域名服务器和其他域名服务器之间的查询是迭代查询,防止根域名服务器压力过大):
-
首先本地域名服务器向「根域名服务器」发起请求,根域名服务器是最高层次的,它并不会直接指明这个域名对应的 IP 地址,而是返回顶级域名服务器的地址,也就是说给本地域名服务器指明一条道路,让他去这里寻找答案
-
本地域名服务器拿到这个「顶级域名服务器」的地址后,就向其发起请求,获取「权限域名服务器」的地址
-
本地域名服务器根据权限域名服务器的地址向其发起请求,最终得到该域名对应的 IP 地址
(5)本地域名服务器将得到的 IP 地址返回给操作系统,同时自己将 IP 地址缓存起来
(6)操作系统将 IP 地址返回给浏览器,同时自己也将 IP 地址缓存起来
(7)至此,浏览器就得到了域名对应的 IP 地址,并将 IP 地址缓存起来
整个过程可配合下图直观理解:
二、绕过CDN查找主机真实IP的方法
CDN的全称是Content Delivery Network,即内容分发网络。CDN是构建在现有网络基础之上的智能虚拟网络,依靠部署在各地的边缘服务器,通过中心平台的负载均衡、内容分发、调度等功能模块,使用户就近获取所需内容,降低网络拥塞,提高用户访问响应速度和命中率。CDN的关键技术主要有内容存储和分发技术。
通俗易懂的解释:通过IP访问实际资源时,如果CDN上并没有缓存资源,则会到源站请求资源,并缓存到CDN节点上,这样,用户下一次访问时,该CDN节点就会有对应资源的缓存了。
正常情况下,通过cmd命令可以快速找到域名对应IP,最常见的命令如ping、nslookup。但很多站点出于用户体验和安全的角度,使用CDN加速,将域名解析到CDN,这时候就需要绕过CDN来查找真实IP。
1. 利用DNS历史记录
CDN通常会隐藏主机的真实IP,但可通过一些DNS查询历史工具查找网站之前的解析记录,其中可能包含真实IP地址。可用的查询网站如下:
iphistory:https://viewdns.info/iphistory/
DNS查询:(https://dnsdb.io/zh-cn/)
微步在线:(https://x.threatbook.cn/)
域名查询:(https://site.ip138.com/)
DNS历史查询:(https://securitytrails.com/)
Netcraft:https://sitereport.netcraft.com/?url=github.com
2. 查找子域名
很多时候,一些重要的站点会做CDN,而一些子域名站点并没有加入CDN,而且跟主站在同一个C段内,这时就可以通过查找子域名来查找网站的真实IP。
常用的子域名查找方法和工具:
-
搜索引擎查询:如Google、baidu、Bing等传统搜索引擎。
-
一些在线查询工具:
http://tool.chinaz.com/subdomain/
http://i.links.cn/subdomain/
http://subdomain.chaxun.la/
http://searchdns.netcraft.com/
https://www.virustotal.com/
-
子域名爆破工具
Layer子域名挖掘机
wydomain:https://github.com/ring04h/wydomain
subDomainsBrute:https://github.com/lijiejie/
Sublist3r:https://github.com/aboul3la/Sublist3r
3. 端口扫描
有时主机使用CDN时并没有隐藏所有服务。可以尝试对目标主机进行端口扫描,尤其是那些不通过CDN的服务端口(如邮件服务器、FTP等)。如果找到开放端口,可以查找到真实IP。
通过Zmap、masscan等工具对整个互联网发起扫描,针对扫描结果进行关键字查找,获取网站真实IP。
4. 第三方服务泄漏
某些站点可能使用了第三方服务(如邮件服务器、外部API),这些服务可能没有经过CDN保护。可以通过查询MX记录、SOA记录、逆向DNS等方法来找到真实IP。
常用的MX记录查询工具:MxToolbox。
5. 社交工程或渗透测试
有时可以通过社交工程的手段获取目标的真实IP。例如,发送一个电子邮件到目标服务器并观察邮件头中的IP地址,或者通过一些定制的渗透测试工具(如Exim)进行试探。
6. 暴露的服务器日志
在一些情况下,CDN保护可能并不完善,服务器的访问日志或错误日志有可能会暴露真实的IP地址。通过扫描Web目录或通过渗透测试手段查找暴露的日志文件,可能会找到相关信息。
7. 通过旁路攻击(Bypassing)
CDN的作用是缓存和转发,但如果能找到服务器上的直接资源请求路径,则有可能绕过CDN。比如,有些情况下,直接访问未被缓存的资源可能会导致服务器直接响应,暴露真实IP。
8. 利用共享主机的泄露
如果目标站点在共享主机上,通过查找同IP下的其他站点,可能能够找到该共享主机的真实IP地址。
9. 查找服务器直接提供服务的时间窗口
一些CDN在某些时间段会短暂失效,导致访问直接指向真实服务器。这种情况虽少见,但在网络问题或CDN配置错误时可能会发生。使用自动化工具长期监测有可能捕捉到这些时间窗口。
10. 网安引擎搜索
使用网安领域的搜索渠道搜索。通过关键字或网站域名,就可以找出被收录的IP,很多时候获取到的就是网站的真实IP。
钟馗之眼:https://www.zoomeye.org
Shodan:https://www.shodan.io
Fofa:https://fofa.so
三、子域名信息收集常用手段
在总结子域名信息收集常用手段前,我们先要弄懂一个问题:为什么要收集?原因很简单:为了扩大资产范围,增加发现漏洞的概率。
众所周知,一般情况下主站的安全性可能相对较高,而一些不常用的子站或者上线不久的站点,可能安全方面的考虑还没有很周全,可能成为目标系统的脆弱点。通常情况下,同一组织采用相同应用搭建多个服务的可能性很大,以及补丁的情况也可能大致相同,因此,存在相同漏洞的概率非常大。
子域名收集通常分为两种方式,分别为被动收集和主动收集。
3.1 被动收集
被动收集是指,在不与目标系统进行交互的情况下,通过第三方进行收集。优点:因为不需要和目标系统进行交互,所以此方法不会对目标系统造成任何影响,更不会触发任何安全产品的告警。
被动收集常用方法:
信息挖掘
搜索引擎
第三方DNS服务
证书
AS号码查询
SAN收集
使用公共数据集
下面具体介绍几种方法。
3.1.1 信息挖掘
信息挖掘即通过各种渠道尝试搜索子域名信息,以下介绍三种:
-
查看corssdomain.xml跨站策略文件,它主要是为web客户端(如Adobe Flash Player等)设置跨域处理数据的权限,里面可能包含部分域名信息。
-
在Github 、Gitee等代码仓库中查找,可能有相关子域名的信息
-
抓包分析获取,如一些静态资源的请求、一些APP或者小程序接口、邮件服务器等等
3.1.2 搜索引擎
常见的网络资产搜索引擎:Shodan、Zoomeye、Fofa。
3.1.3 第三方DNS服务
可通过使用常见的子域名前缀词典对目标域名进行暴力破解,从而发现子域名。该方法的效果依赖于词典的质量和广度。
一些在线DNS工具汇总:
decoder.link/
searchdns.netcraft.com/
dnsdumpster.com/
pentest-tools.com/information…
www.pkey.in/tools-i/sea…
hackertarget.com/find-dns-ho…
findsubdomains.com/
spyse.com/
3.1.4 证书
当通过HTTPS访问web时,网站向浏览器提供数字证书,此证书用于识别网站的主机名,由证书颁发机构(CA,Certificate Authority)颁发。证书颁发机构(CA)必须将其发布的每个SSL/TLS证书发布到公共日志的项目,而SSL/TLS证书通常包含域名,子域名和电子邮件地址等信息,于是就可以利用这一点进行子域名信息收集。
直接在证书中搜索主域名即可。但因为这种方法的原理是根据日志信息收集,只增不减,所以可能会出现一些失效的子域名
3.2 主动收集
主动收集是指,通过与目标系统进行交互,对子域名进行收集。因为需要和目标系统进行交互,很可能出现高频访问等情况,有触犯安全产品告警的风险。
主动收集常用方法:
字典枚举
置换扫描
域传送漏洞
DNS缓存
子域名爬虫
同样,下面具体地介绍几种方法。
3.2.1 字典枚举
字典枚举即利用常见的子域名字典,进行暴力破击,最终获得有效的子域名。
这种方法局限较大,能收集到多少子域取决于字典的覆盖程度,同时还有比较致命的缺点,即会造成较大的流量,可能会让目标系统的安全产品造成告警。常用工具:Aquatone、Bluto-Old、Dnssearch等。
3.2.2 置换扫描
使用已知域/子域名的排列组合来识别新的子域名,使得字典有一定的针对性,提高准确率。比较常用的工具是 altdns。
3.2.3 DNS缓存
在常见的企业网络中,通常都会配置DNS服务器,为网络内的主机提供域名解析服务。DNS服务器除了解析私有域名外,还会用递归方式,向公网的DNS服务器请求解析第三方域名。为了提升性能,通常会使用缓存记录,记录解析过的域名,尤其是第三方域名。
域名缓存侦测(DNS Cache Snooping)技术就是向这些服务器发送域名解析请求,但要求不使用递归模式。这样DNS只能解析私有域名和缓存中保存的域名。借助该项技术,渗透测试人员就知道哪些域名是否被过请求过。
3.2.4 子域名爬虫
通过网络爬虫工具爬取目标网站的HTML页面,查找其中嵌入的子域名链接。此方法可以发现目标站点在页面中使用但未公开的子域名。工具:Crawlergo、Hakrawler、Sublist3r等。
四、Nmap全端口扫描
4.1 使用Nmap对Pikachu靶场进行全端口扫描
使用Nmap进行全端口扫描的命令是:
nmap -p 1-65535 <目标IP> # -p参数,只扫描指定的端⼝
nmap -p- <目标IP> # -p-参数,扫描所有端口
首先开启小皮。
启动zenmap,确定扫描目标(本机配置的Pikachu靶场IP为127.0.0.1),进行全扫描:
可以看到端口对应开启的服务,由于是全端口扫描,会出现很多未开服务的端口的扫描结果。
我们使用快速扫描(Quick scan)再来看看:
结果表明,快速扫描可以让我们更加直观地查看其对应端口所开启的服务。
4.2 扩展1——SYN半开扫描
SYN 半开扫描(SYN Scan)是网络端口扫描的一种方式,它利用了 TCP 协议的三次握手过程,但并不完成整个握手。
4.2.1 工作原理
-
发送 SYN 包:扫描器向目标主机的某个端口发送一个 SYN 包,表示请求建立一个 TCP 连接(三次握手的第一步)。
-
等待响应:
-
如果目标端口 开放:目标主机会返回一个 SYN/ACK 包,表示愿意建立连接。
-
如果目标端口 关闭:目标主机会返回一个 RST(复位)包,表示端口不可用。
-
如果目标端口被 防火墙过滤:目标主机可能不会回应,或者防火墙会直接丢弃包。
-
-
发送 RST 包:如果目标端口开放,扫描器在接收到 SYN/ACK 包后,不会继续完成握手(发送 ACK 包),而是立即发送一个 RST 包来终止连接。因为三次握手并未完全完成,所以被称为“半开扫描”。
4.2.2 优点
-
隐蔽性强:因为连接并未完全建立,有些防火墙、入侵检测系统(IDS)可能不会记录这种未完成的连接,这使得 SYN 半开扫描比全连接扫描(即完全三次握手的扫描)更加隐蔽。
-
速度快:只进行两步(SYN 和 SYN/ACK)的通信,比全连接扫描要快。
4.2.3 缺点
-
防火墙阻挡:某些防火墙可以通过监控异常的握手行为(如 SYN/RST)来阻止或检测 SYN 半开扫描。
4.2.4 实操
使用nmap执行SYN半开扫描的命令为:
nmap -sS <目标IP>
4.3 扩展2——跳过主机存活检测
在使用nmap进行扫描时,默认情况下,nmap会先执行主机存活检测(Host Discovery),即通过 ICMP ping、TCP SYN 等方法来确定目标主机是否在线。如果想跳过这一过程并直接进行端口扫描,可以使用 -Pn 选项。
4.3.1 实操
nmap跳过主机存活检测的命令是:
nmap -Pn <目标IP> #-pn:告诉nmap跳过主机存活检测,直接假设所有主机都是在线的,并开始端口扫描。
4.3.2 使用场景
-
目标主机或网络禁用了 ICMP Echo 请求(ping),或者防火墙阻止了nmap的存活检测包,导致nmap认为主机不在线。
-
用户明确知道目标主机在线,想直接扫描端口而不进行额外的网络探测。
五、dirmap目录探测工具实践
5.1 探测本地搭建的pikachu靶机目录
本机配置的Pikachu靶场IP为127.0.0.1。进入dirmap目录下执行命令:
python dirmap.py -i 127.0.0.1 -lcf
5.2 问题:为什么dirmap每次扫描条数不一样?
dirmap 是一种用于目录和文件枚举的工具,它通过尝试访问不同的路径来发现隐藏的文件和目录。每次扫描的条数不同,可能由以下因素综合导致:
-
字典文件的随机性
dirmap依赖于一个预定义的字典文件(也称为词典或 wordlist),其中包含可能的路径、文件名或目录名。不同的扫描可能会使用不同的字典文件,或者字典文件可能包含随机顺序的条目,导致扫描条数变化。
-
扫描目标的响应
每次扫描时,目标服务器的响应可能不同。例如,如果目标服务器对某些请求实施了速率限制或动态过滤机制,那么某些路径可能被忽略或返回的响应会有所不同,这可能导致扫描结果的变化。
-
并发设置
dirmap支持并发请求。在配置中设置不同的并发级别可能会导致扫描完成时间不同,也可能影响实际扫描的条数。如果网络状况不佳或目标服务器限制了并发连接,某些请求可能会超时或丢失,导致扫描条数不一致。
-
网络连接问题
网络的不稳定或中断可能导致某些请求未成功发送或未得到正确响应,从而影响扫描的总条数。例如,网络延迟或丢包可能导致部分路径扫描失败,结果显示的条数比实际字典中的条目数少。
-
目标服务器的变化
目标服务器在不同的时间段可能会有不同的目录结构或配置。例如,某些目录可能在一次扫描时可见,而在下次扫描时已经被移除或受保护。动态内容或基于时间的文件结构也可能导致每次扫描条数不同。
-
扫描策略
dirmap允许用户指定不同的扫描模式或策略(例如深度扫描、快速扫描)。不同的模式可能会使用不同的路径集合,导致每次扫描的条数不同。
-
过滤规则
dirmap可能具有一些内置的过滤规则(例如忽略某些特定状态码的响应,或跳过一些常见的错误页面)。如果这些规则有变化或根据不同条件生效,扫描条数也会有所不同。
总结:可以说dirmap扫描条数的变化是以上可能的因素共同作用的结果。
5.3 dirmap的高级应用
1. 使用自定义字典文件
dirmap支持自定义字典文件(wordlist),我们可以创建一个专门为某个系统定制的字典。比如针对某些 CMS 或 Web 框架(如 WordPress、Joomla 等)创建字典,可能更容易发现隐藏的路径。
-
命令示例:
dirmap -u http://example.com -w /path/to/custom_wordlist.txt
2. 使用并发扫描
在扫描大型站点或子域时,我们可以通过参数设置并发数来优化扫描速度。
-
命令示例:
dirmap -u http://example.com -t 50 #-t参数指定并发线程数
3. 使用代理扫描
在某些场景中,我们需要通过代理进行扫描,以掩盖原始请求的来源或绕过防火墙。dirmap支持通过 HTTP、HTTPS 或 SOCKS 代理发送请求。
-
命令示例:
dirmap -u http://example.com --proxy http://127.0.0.1:8080
4. 多协议扫描
dirmap支持多种协议,如 HTTP、HTTPS、FTP、和 S3。我们可以针对不同的协议目标进行不同的扫描
-
命令示例:
dirmap -u s3://bucket-name -w /path/to/wordlist.txt
5. 扫描子域
dirmap可以和子域枚举工具结合使用,首先通过子域发现工具(如subfinder或amass)找出目标域名的所有子域,然后通过dirmap逐个对这些子域进行目录扫描。
6. 结合BurpSuite进行扫描
通过将dirmap的流量导入 Burp Suite,我们可以详细分析每个请求和响应,或者使用 Burp 的主动扫描插件进行更深层次的漏洞分析。
-
命令示例:
dirmap -u http://example.com --proxy http://127.0.0.1:8080
六、Fscan实践
终端进入fscan的目录,输入命令:【./fscan -h 127.0.0.1】扫描pikachu靶场。
其中mysql出现红色警告,是因为我本机的mysql账号密码均为默认root,发现漏洞。
七、课上所演示插件安装成功截图
安装两个插件:Findsomething和wappalyzer。
八、思考
今天学习了较多关于扫描的知识,在学到SYN半开扫描时,我想到了SYN洪范攻击。这里我想对它们做一个对比总结。SYN 半开扫描和洪范攻击(SYN Flood Attack)都涉及到TCP协议的三次握手过程,并且都使用了SYN包。
相似之处
-
使用 SYN 包:两者都利用了 TCP 三次握手的第一步,发送 SYN 包。
-
未完成握手:在两者的操作中,三次握手并未完全完成。SYN 半开扫描会在接收到 SYN/ACK 后发送 RST 包终止连接,而洪范攻击则是故意不完成握手。
不同之处
-
目的不同:
-
SYN 半开扫描:目的在于检测目标系统的开放端口,而不进行完整的连接建立。扫描器发送 SYN 包并根据目标的响应判断端口状态,是一种侦察技术。
-
SYN 洪范攻击:它是一种攻击方法——拒绝服务攻击(DoS)。攻击者向目标服务器发送大量的 SYN 请求,并故意不回应 SYN/ACK 包,从而让服务器的连接资源耗尽。服务器等待 ACK 包的超时期间会将这些半开连接占用系统资源,导致系统无法处理新的合法连接,最终导致服务器崩溃或拒绝服务。
-
-
影响不同:
-
SYN 半开扫描:对目标系统的影响较小,因为每个连接都在收到 SYN/ACK 后立即终止,不会长期占用系统资源。
-
SYN 洪范攻击:对目标系统的影响极大,它通过大量未完成的连接占用系统资源,最终使系统无法处理正常请求,导致拒绝服务。
-