一、DNS解析详细步骤
1.发起域名查询请求:
用户在浏览器或其他应用程序中输入一个域名(例如www.baidu.com),然后向本地DNS服务器发送查询请求。
2.本地DNS服务器缓存查询:
本地DNS服务器首先会检查自己的缓存,看是否存在该域名的解析结果。如果在缓存中找到了对应的解析结果,且该结果未过期(根据TTL时间确定),则本地DNS服务器将直接返回解析结果给客户端。
3.递归查询:
如果本地DNS服务器的缓存中没有对应的解析结果,它将执行递归查询。递归查询是指本地DNS服务器负责从根域名服务器开始,一直追踪查询过程,直到获得最终的解析结果。
4.根域名服务器查询:
本地DNS服务器向根域名服务器发送查询请求,询问根域名服务器关于顶级域名(例如.com)的权威域名服务器的IP地址。
5.顶级域名服务器查询:
根域名服务器返回给本地DNS服务器关于顶级域名的权威域名服务器的IP地址。本地DNS服务器接着向该权威域名服务器发送查询请求,询问次级域名(例如baidu.com)的权威域名服务器的IP地址。
6.权威域名服务器查询:
本地DNS服务器继续向次级域名的权威域名服务器发送查询请求,请求获取具体的域名解析结果。
7.解析结果返回:
权威域名服务器返回解析结果给本地DNS服务器。本地DNS服务器将结果保存在缓存中,并将解析结果返回给发起查询请求的客户端。
8.解析结果传递:
本地DNS服务器将解析结果传递给客户端,使客户端能够建立与所查询域名对应的IP地址的连接。
9.缓存更新:
本地DNS服务器将新获得的解析结果保存在缓存中,以便在下次有相同查询请求时可以直接返回结果,提高查询效率。
需要注意的是,DNS解析过程中存在着缓存机制,即在每个DNS服务器上都有一个缓存,用于存储最近的解析结果。缓存可以减轻DNS服务器的负载,加快域名解析速度,并提高整体的网络性能。
优化和变化,例如使用负载均衡的DNS服务器、DNS缓存的更新策略、DNS安全扩展(例如DNSSEC)等。但总体而言,以上步骤描述了DNS解析过程的主要流程和参与者。
二、绕过CDN查找主机真实IP的方法
方法1: 查询历史DNS记录
查看 IP 与 域名绑定的历史记录,可能会存在使用 CDN 前的记录,相关查询网站有:
https://dnsdb.io/zh-cn/ ###DNS查询
https://x.threatbook.cn/ ###微步在线
http://toolbar.netcraft.com/site_report?url= ###在线域名信息查询
http://viewdns.info/ ###DNS、IP等查询
https://tools.ipip.net/cdn.php ###CDN查询IP
方法2: 子域名查询
由于目标服务可能在主站上做好了相应的CDN,但是由于种种原因例如部署费用过高,或者对二级域名不上心等,所以导致二级域名没有部署到CDN,这时我们可以从这个方面入手进行查询。利用子域名搜集工具等搜集到足够的子域名后,便可以对通过子域名进行真实IP的搜集。
下面介绍些常用的子域名查找的方法和工具:
1)微步在线(https://x.threatbook.cn/)
微步在线功能强大,只需输入要查找的域名(如baidu.com),点击子域名选项就可以查找它的子域名了,但是免费用户查询次数有限。
2)Dnsdb查询法。(https://dnsdb.io/zh-cn/)
只需输入baidu.com type:A就能收集百度的子域名和ip了。
3)各种子域名扫描器
这里,主要为大家推荐子域名挖掘机,仅需输入域名即可基于字典挖掘它的子域名。
在开发网站的时候,开发者可能会将一时疏忽忘记将可能泄露信息的 php探针等处理掉,让我们有机可乘
通过谷歌语法去搜集
inurl:phpinfo.php inurl:xxxxxx
方法3: 网络空间引擎搜索法
常见的有以前的钟馗之眼,shodan,fofa搜索。以fofa为例,只需输入:title:“网站的title关键字”或者body:“网站的body特征”就可以找出fofa收录的有这些关键字的ip域名,很多时候能获取网站的真实ip。
方法4: 国外主机解析域名
大部分 CDN 厂商因为各种原因只做了国内的线路,而针对国外的线路可能几乎没有,此时我们使用国外的DNS查询,很可能获取到真实IP。
国外多PING测试工具:
https://asm.ca.com/zh_cn/ping.php
http://host-tracker.com/
http://www.webpagetest.org/
https://dnscheck.pingdom.com/
方法5: 网站邮件头信息
比如说,邮箱注册,邮箱找回密码、RSS邮件订阅等功能场景,通过网站给自己发送邮件,从而让目标主动暴露他们的真实的IP,查看邮件头信息,获取到网站的真实IP。
方法6: 通过 SSL 证书
证书颁发机构 (CA) 必须将他们发布的每个 SSL/TLS 证书发布到公共日志中,SSL/TLS 证书通常包含域名、子域名和电子邮件地址。因此可以利用 SSL/TLS 证书来发现目标站点的真实 IP 地址。
CDN 运营商在给服务器提供保护的同时,也会与其服务器进行加密通信(ssl),这时当服务器的 443 端口接入域名时也会在 443 端口暴露其证书,我们通过证书比对便可发现网站的真实 IP 地址。
SSL证书搜索引擎:
https://censys.io/ipv4?q=github.com
方法7: 网站漏洞查找
1)目标敏感文件泄露,例如:phpinfo之类的探针、GitHub信息泄露等。
2)XSS盲打,命令执行反弹shell,SSRF等。
3)无论是用社工还是其他手段,拿到了目标网站管理员在CDN的账号,从而在从CDN的配置中找到网站的真实IP。
方法8: 扫描全网
通过Zmap、masscan等工具对整个互联网发起扫描,针对扫描结果进行关键字查找,获取网站真实IP。
https://github.com/zmap/zmap
https://github.com/robertdavidgraham/masscan
方法9: 通过 F5 LTM 解码
LTM 是将所有的应用请求分配到多个节点服务器上。提高业务的处理能力,也就是负载均衡。
当服务器使用 F5 LTM 做负载均衡时,通过对 set-cookie 关键字的解码,可以获取服务器真实 ip 地址。
例如:
Set-Cookie: BIGipServerpool_9.29_5229=605532106.22012.0000
先把第一小节的十进制数,即 605532106 取出来
将其转为十六进制数 2417afca
接着从后至前,取四个字节出来:CA AF 17 24
最后依次转为十进制数 202.175.23.36,即是服务器的真实 ip 地址。
方法10: 利用HTTP标头寻找真实原始IP
例如,Censys上用于匹配服务器标头的搜索参数是80.http.get.headers.server :,查找由CloudFlare提供服务的网站的参数如下:
三、子域名信息收集常用手段
1.证书透明度公开日志搜集
证书透明度(Certificate Transparency,CT)是证书授权机构(CA)的一个项目,证书授权机构会将每个SSL/TLS证书发布到公共日志中。一个SSL/TLS证书通常包含域名、子域名和邮件地址,这些也经常成为攻击者非常想获得的有用信息。查找某个域名所属证书的最简单的方法就是使用搜索引擎搜索一些公开的CT日志。
2.搜索引擎枚搜集
利用搜索引擎语法搜索子域名或含有主域名关键字的资产信息,例如使用Bing搜索“ms08067.com”旗下的子域名及其资产,就可以使用“site:ms08067.com”语法.
3.工具自动收集
目前已有几款十分高效的子域名自动收集工具,如子域名收集工具OneForAll,具有强大的子域名收集能力,还兼具子域爆破、子域验证等多种功能。
4.DNS历史记录查询
DNS历史记录查询是一种用于收集子域名信息的方法,通过查询过去DNS解析记录的服务,可以查找目标组织过去使用过的子域名,有时还可以找到已经被删除的但仍然解析到目标组织的子域名。以下是DNS历史记录查询子域名信息的详细步骤:
1)确定目标域名:确定要查询的目标域名,例如example.com。
2)选择DNS历史记录查询服务:选择一个可靠的DNS历史记录查询服务,例如SecurityTrails、DNSdumpster.com - dns recon and research, find and lookup dns records、WhoisXML、PassiveTotal等。这些服务通常提供免费和付费版本,免费版本可能有限制。
3)输入目标域名:在DNS历史记录查询服务的搜索框中输入目标域名,例如example.com。
4)查看历史记录:查询服务将返回与目标域名相关的历史记录。这些历史记录可能包括过去使用过的子域名、IP地址、DNS服务器等信息。查看历史记录,尝试找到与目标组织相关的子域名。
需要注意的是,DNS历史记录查询服务并不总是完全准确或完整,有时会缺少一些信息或包含错误的信息。因此,需要对查询结果进行验证,并结合其他方法进行子域名信息的收集。
5.在线子域名查询网站
如chinaz、IP138等,输入域名即可获取子域名列表。
四、Nmap全端口扫描
1.nmap常用指令
nmap -T 4 -A ip //A:全面扫 T:0-5 慢到快,一般用0,4
nmap -sP ip/24 //扫描所在网段存活主机ip(可以扫到所在局域网并且在同一网段下的存活主机)
nmap -P0 ip //无ping扫描:穿透防火墙,避免被防火墙发现
nmap -PA -PS ip //TCP ACK ,TCP SYN ping扫描
nmap -PU ip //UDP ping扫描:主机存活返回一个ICMP端口不可达的信息,主机不存活返回各种ICMP错误信息
nmap -PE -PP -PM ip //PE:ICMP Echo 扫描 PP:ICMP时间戳Ping扫描 PM:ICMP地址掩码Ping扫描
nmap -PR ip //ARP Ping扫描:在内网中使用更高效
nmap -sL -R ip/24 // sL:列表扫描,不发送任何报文,-R:反向域名解析(可以查看哪个ip是绑定了域名的)
nmap -6 ipv6地址 // 6:扫描ipv6地址
nmap -sS ip //TCP SYN半开放扫描,不会轻易的被主机发现,高效常用。
nmap -sT ip //当TCP SYN半开放扫描不可用再用sT(TCP连接扫描),它更基础稳定,但可能会留下记录
nmap -sV ip //扫描端口服务器版本
nmap -F -v ip //-F:快速扫描-v:详细
nmap -O 192.168.0.1 //操作系统版本扫描,能扫出目标使用的系统(准不准看运气),从而对症下药。
nmap -sP 192.168.0.1/24 //扫描所在网段存活主机(可以扫到所在局域网并且在同一网段下的存活主机)
nmap -p80,3306 192.168.0.1 //指定端口扫描(多个端口可以使用逗号间隔)
nmap -..... -oN 文件名 ip // oN:保存到指定文件名下
2.扫描pikachu
nmap -T4 -A -v -Pn ip
3.SYN半开扫描的原理
TCP SYN扫描又称“半开扫描”。回顾TCP连接的三次握手,申请方首先发送的是一个SYN数据包,服务方在接到这个SYN数据包后,如果该端口处于侦听状态,则会回复一个SYN|ACK的数据包;如果该端口没有处于侦听状态,则会回复一个RST的数据包。而此时如果对方处于侦听状态,申请方还需要再向对方回复一个ACK数据包以示建立连接。此时对方就认为连接建立,并记入日志。
无论服务方回复SYN|ACK的数据包,还是回复RST的数据包,申请方其实已经能够判断对方端口是否为“开”的状态。之后的ACK数据包发送则被对方监视,如果此时不发送ACK数据包,而是发一个RST数据包,则不仅关闭了这个未完成的连接过程,并且也会因为连接未建立而不会被对方记录。这种扫描方式因为使用了SYN标志位,所以被称为TCP SYN扫描。这种扫描技术的优点在于一般不会在目标计算机上留下记录,有时即使在用netstat命令也显示不出来;但这种方法的一个缺点是必须要有管理员权限才能建立自己的SYN数据包。
4.跳过主机存活检测扫描使用场景
使用方法:
在Nmap中,使用-Pn选项跳过主机存活检测:
nmap -Pn <target>
主要使用场景:
防火墙环境:
许多防火墙会阻止ICMP请求(ping)
-Pn选项假设所有目标主机都是在线的。
已知主机:
当你确定目标主机在线时,可以使用此选项节省时间。
全面扫描:
在需要扫描所有指定IP地址的情况下,无论它们是否看似在线。
五、dirmap目录探测工具实践
1.安装dirmap
2.参数说明
以下是 dirmap 常用的参数:
-u or --url: 指定要扫描的目标 URL。
-w or --wordlist: 指定字典文件,用于进行目录名或文件名的猜测。
-e or --extensions: 指定要扫描的文件扩展名,如 php、asp 等。
-l or --level: 指定扫描的级别。默认为 1,表示只对指定 URL 进行扫描;如果设置为 2,还会对发现的目录进行扫描,依此类推。
-t or --threads: 指定并发线程数,用于加快扫描速度。
--delay: 指定扫描请求之间的延迟时间,以避免对目标网站造成过多的请求负载。
--timeout: 指定 HTTP 请求的超时时间。
-a or --agent: 指定 User-Agent 字符串,来模拟不同的浏览器或爬虫。
-p or --proxy: 指定代理服务器地址和端口号。
3.扫描pikachu
单扫描:
dirmap每次扫描条数不一样原因:
网络条件:网络连接质量的变化可能导致某些请求在一次扫描中成功,而在另一次扫描中失败。
随机性: dirmap可能在内部使用了一些随机化策略来避免被检测为自动化工具。
超时设置:如果没有明确设置超时参数,某些请求可能在一次扫描中超时,而在另一次中成功。
并发问题:多线程扫描可能导致结果的不一致
设置线程数:
六、信息泄露分类及利用方式总结
1.常见信息泄露类型
1.1服务器标识版本
服务器标识版本能够揭示服务器上运行的特定软件及其版本,这可以被用来寻找已知漏洞。
1.2错误信息
详细的错误信息可以提供有关服务器的配置、目录结构甚至使用的技术线索,这些信息都可以被攻击者利用。
1.3源代码泄露
直接访问应用程序的源代码,可能暴露代码中的漏洞、硬编码的凭证以及其他敏感信息。
1.4配置文件泄露
配置不当的服务器可能会暴露配置文件,这些文件包含敏感信息,如数据库凭证、API密钥和系统设置。
1.5目录列表
不受限制的目录列表可以揭示网站目录和文件的结构,可能暴露敏感信息或可利用的文件。
1.6备份文件和旧版本
发现备份文件或网站的旧版本,可以让攻击者获得过时的软件版本或配置,而这些旧版本可能存在已知的漏洞。
1.7HTML/JavaScript注释
在HTML或JavaScript 文件中留下的注释,可能会无意中泄露敏感信息或调试细节,这些信息对于攻击者来说非常有用。
1.9Api响应
Api响应包含不必要的数据,可能会泄露内部服务器细节、数据库结构或其他敏感信息。
1.9URL中的敏感信息
将会话令牌、用户名或其他敏感数据包含在URL中,这些信息可能会被拦截利用。
1.10第三方服务
与第三方服务的集成,如果不进行适当的保护或配置,也可能导致信息泄露。
2.利用方式
2.1社会工程学攻击:攻击者通过欺骗手段,诱导受害者透露敏感信息。例如,通过伪装成信任的个人或组织,骗取用户账号、密码或其他个人信息。
2.2恶意软件:包括病毒、木马、间谍软件等,这些恶意程序可能会被植入到用户的设备中,收集和传输存储在设备上的敏感信息。
2.3网络钓鱼:通过伪造看似合法的电子邮件、网站或消息,诱导用户提供敏感信息,如登录凭证、银行账户信息等。
2.4物理盗窃:攻击者可能通过盗窃物理设备,如笔记本电脑、移动设备或存储介质(如硬盘、U盘)等方式获取敏感信息。
2.5网络嗅探:攻击者利用网络嗅探工具,截获传输中的数据包,从而获取敏感信息。
2.6未加密数据传输:在数据传输过程中未使用加密措施,导致信息在传输过程中被截获。
2.7不安全的云存储:如果云服务的配置不当,可能导致存储在云端的数据被未经授权访问。
2.8硬件漏洞:硬件设备可能存在设计缺陷或安全漏洞,攻击者可以利用这些漏洞获取敏感信息。
2.9软件漏洞:软件中未修复的安全漏洞可能被利用来获取敏感信息,例如通过SQL注入攻击获取数据库中的数据