第二次作业

一、要求


1、DNS解析详细步骤。

2、绕过CDN查找主机真实IP的方法。

3、子域名信息收集常用手段。

4、Nmap全端口扫描

5、dirmap目录探测工具实践

6、Fscan实践

7、课上所演示插件安装成功截图。

二、内容与步骤

(1)DNS解析详细步骤

 DNS(域名系统)解析是将域名(如 www.example.com)转换为 IP 地址(如 192.0.2.1)的过程。以下是 DNS 解析的详细步骤:

 1. 用户输入域名

用户在浏览器中输入域名,比如 www.example.com,或应用程序需要解析某个域名。

2. 检查本地缓存

浏览器和操作系统会先检查本地缓存,以确定是否已经存储了该域名的 IP 地址。如果缓存中有记录,则直接使用缓存中的 IP 地址。

3. 查询本地 DNS 缓存

如果本地缓存中没有记录,操作系统会查询本地 DNS 缓存(如 nsswitch.conf 文件中配置的 DNS 缓存)。

4. 发送 DNS 查询请求

如果本地缓存中也没有记录,操作系统将向配置的 DNS 解析器(通常是 ISP 提供的 DNS 服务器或自定义的 DNS 服务器)发送 DNS 查询请求。

5. 递归查询过程

DNS 解析器通常会进行递归查询,分以下几个步骤:

  1. 根域名服务器查询
    • 如果 DNS 解析器没有缓存记录,它会向根域名服务器发送请求。
    • 根域名服务器不会直接返回请求的 IP 地址,但会返回负责该域名的顶级域(TLD)服务器的地址,比如 .com 或 .org 服务器的地址。
  2. TLD 服务器查询
    • DNS 解析器接着向相应的 TLD 服务器发送查询请求。
    • TLD 服务器返回负责具体域名的权威 DNS 服务器的地址,比如 example.com 的权威 DNS 服务器。
  3. 权威 DNS 服务器查询
    • DNS 解析器最终向权威 DNS 服务器发送查询请求。
    • 权威 DNS 服务器拥有该域名的完整信息,并返回域名对应的 IP 地址。

6.返回结果

  • 权威 DNS 服务器将 IP 地址返回给 DNS 解析器。
  • DNS 解析器将 IP 地址返回给操作系统。
  • 操作系统将 IP 地址返回给应用程序(如浏览器)。

7. 缓存结果

  • DNS 解析器:将结果缓存一定时间(TTL,Time-To-Live),以提高查询效率。
  • 操作系统:将结果缓存一定时间(通常是几分钟到几小时),减少对 DNS 解析器的请求。
  • 浏览器:也可能缓存域名和 IP 地址。

8. 建立连接

  • 应用程序(如浏览器)使用返回的 IP 地址与目标服务器建立连接,并开始进行数据交换。

示例 DNS 查询流程

假设用户在浏览器中输入 www.example.com

  1. 本地缓存检查:检查操作系统和浏览器缓存。
  2. DNS 解析器查询:如果缓存中没有记录,DNS 解析器向根域名服务器发送请求。
  3. 根域名服务器响应:提供 .com TLD 服务器的地址。
  4. TLD 服务器查询:DNS 解析器向 .com TLD 服务器发送请求。
  5. TLD 服务器响应:提供 example.com 的权威 DNS 服务器的地址。
  6. 权威 DNS 服务器查询:DNS 解析器向 example.com 的权威 DNS 服务器发送请求。
  7. 权威 DNS 服务器响应:提供 www.example.com 对应的 IP 地址。
  8. IP 地址返回:DNS 解析器和操作系统将 IP 地址返回给浏览器。
  9. 浏览器连接:浏览器使用 IP 地址建立连接,加载网页内容。

这个过程使得用户能够使用易记的域名来访问网站,而不是记住复杂的 IP 地址。

(2)、绕过CDN查找主机真实IP的方法。

绕过 CDN 查找主机的真实 IP 地址涉及一些技术手段,但需要注意的是,这些方法应该仅用于合法和伦理的用途。使用这些技术进行未经授权的扫描或攻击是非法的,并且可能会违反相关法律和服务条款。以下是一些常见的技术手段和方法:

1. DNS 查询

  1. 子域名枚举

    有时候,CDN 的配置可能不适用于所有子域名。通过工具(如 sublist3ramass)进行子域名枚举,有可能找到未通过 CDN 保护的子域名,直接指向真实 IP。
  2. DNS 记录查询

    • 通过 DNS 记录(如 A 记录、MX 记录)获取可能的真实 IP 地址。可以使用 dignslookup 等工具进行查询。例如:
      dig example.com
      
    • 有时可能会看到与 CDN 相关的 IP 和真实 IP 地址。注意:这通常需要一些经验和技巧,尤其是在多个 DNS 记录和子域名的情况下。

2. 网络扫描

  1. 端口扫描

    通过端口扫描(如使用 nmap)查找开放的端口和服务,尝试识别与 CDN 不相关的 IP 地址。需要小心执行此操作,以免触犯法律或对目标系统造成损害。
  2. IP 反向查找

    对 IP 地址进行反向 DNS 查找,可能找到与真实服务器相关的主机名。这些工具包括 host 和 dig

      host <IP_ADDRESS>

3. 信息泄露

  1. 查找公开的网络信息

    一些信息可能通过公开的资源泄露,如公开的 GitHub 仓库、网络扫描报告、网络日志等。
  2. 检查 SSL/TLS 证书

    通过查看 SSL/TLS 证书,可能会找到有关服务器的一些信息。工具如 ssllabs 可以帮助检查证书信息:

              openssl s_client -connect example.com:443

          证书中的 Subject Alternative Name(SAN)字段可能会显示真实的 IP 地址或主机名。

4. 社交工程

  • 社交工程:与系统管理员或相关人员交谈,了解系统架构和 IP 地址信息。这种方法需要谨慎,因为涉及到隐私和安全性。

5. 分析 CDN 配置

  • 检查 CDN 配置:一些 CDN 服务商允许查看公共的配置信息,如服务状态或公告页面,这些可能会暴露真实的 IP 地址。

6. 历史信息查询

  • 查找历史 IP 地址:利用历史 DNS 记录和 IP 地址信息,从网络存档服务(如 Wayback Machine)或其他网络监控服务获取过去的 IP 地址记录。

注意事项

  • 合法性和道德性:确保所有操作都是在合法和伦理范围内进行的。非法访问、扫描或攻击他人的服务器是不道德且违法的。

  • 可能的风险:这些技术手段可能会引发网络安全警报,并被目标服务器管理员发现。

使用这些方法时,请确保您具有适当的授权和合法性。如果您是网络安全专业人员,建议在测试或渗透测试前获得明确的授权。

(3)、子域名信息收集常用手段

子域名收集通常分为两种方式,分别为被动收集和主动收集。

被动收集

被动收集是指,在不与目标系统进行交互的情况下,通过第三方进行收集。这种方式有着明显的优势,因为不需要和目标系统进行交互,所以不会对目标系统造成任何影响,更不会触发任何安全产品的告警。

被动子域名收集的方式:

1.信息泄露

·orssdomain.xml

​ 跨站策略文件,主要是为web客户端(如Adobe Flash Player等)设置跨域处理数据的权限,里面  可能包含部分域名信息。

·Github 、Gitee等代码仓库中,可能有相关子域名的信息

·抓包分析获取,如一些静态资源的请求、一些APP或者小程序接口、邮件服务器等等

2.搜索引擎

  常用的搜索引擎有Google、百度等。

3.网络空间测绘引擎

  常见的空间测绘引擎有Shodan、Zoomeye、Fofa。

4.证书透明

​   证书透明(CT)是证书颁发机构(CA)必须将其发布的每个SSL/TLS证书发布到公共日志的项目。SSL/TLS证书通常包含域名,子域名和电子邮件地址等信息。使用方法是直接搜索主域名即可。

5.第三方DNS服务

​   第三方提供的免费的DNS服务器,可以用于替代默认的ISP提供的DNS服务器。 公共DNS可以更快地解析域名、提供更好的隐私保护和安全性,并且通常能够过滤恶意网站和广告。

6.AS 号码查询

​   AS 号码帮助识别属于组织的网络块,而该网络块又可能具有有效域。查找AS号码可以基于IP查找或者基于域名查找。

7.SAN 收集

  ​ SAN(Subject Alternative Name) 是 SSL 标准 x509 中定义的一个扩展。使用了 SAN 字段的 SSL 证书,可以扩展此证书支持的域名,使得一个证书可以支持多个不同域名的解析。允许在安全证书中使用 subjectAltName字段将多种值与证书关联,这些值被称为主题备用名称。名称可包括:IP地址、DNS名称等。

8.使用公共数据集

  利用已有公开的扫描数据集,对子域名信息进行收集。

主动收集

  主动收集是指通过与目标系统进行交互,对子域名进行收集。因为需要和目标系统进行交互,很可能出现高频访问等情况,有触犯安全产品告警的风险。

主动收集子域名的方式:

1.字典枚举

​   字典枚举即利用常见的子域名字典,进行暴力破击,最终获得有效的子域名。这种方法有比较大的局限,能收集到多少子域,取决于字典的覆盖程度,同时还有比较致命的缺点,即会造成较大的流量,可能会让目标系统的安全产品造成告警。

2.置换扫描

  使用已知域/子域名的排列组合来识别新的子域名,使得字典有一定的针对性。

3.域传送漏洞

  ​DNS区域传输是将DNS数据库或DNS记录从主名称服务器复制到辅助名称服务器的过程。如果DNS服务器没有进行严格的配置,只要收到AXFR请求就进行域传送,便造成了该漏洞。域传送过程中,传递的信息除了子域外,还有电子邮件地址、电子邮件服务器等信息,可用于钓鱼攻击。

4.DNSSEC

   ​DNSSEC,即域名系统安全扩展,主要功能是通过建立信任链来保护DNS中数据的完整性和真实性。由于DNSSEC处理不存在域名的方式,可以遍历DNSSEC域并枚举该域中的所有域名。

5.DNS缓存

​  在企业网络中,DNS服务器提供域名解析服务,并通过递归请求公网DNS服务器来解析第三方域名。为了提高性能,DNS服务器会缓存解析过的域名。域名缓存侦测(DNS Cache Snooping)技术通过发送非递归的解析请求,帮助渗透测试人员识别已缓存的域名和私有域名。

(4)、Nmap全端口扫描(使用昨日搭建的pikachu靶场)

1.打开phpstudy_pro.exe,启动Apache和MySQL,可以打开Pikachu网站。

2.在cmd中找到主机的ip后,打开Nmap Zenmap GUI应用程序,将ip填入target,选择扫描方式为扫描全端口后,开始扫描。

加分项
1.SYN半开扫描的原理
​ SYN 半开扫描(SYN Half-Open Scan),也称为半开放扫描,是一种用于端口扫描的技术,通常用于网络安全和渗透测试中。这种扫描方法的关键在于如何处理和发送 SYN(同步)包。下面是 SYN 半开扫描的基本原理和工作机制:

基本原理:

  1. TCP 三次握手

    • 在正常的 TCP 连接建立过程中,客户端和服务器会通过三次握手来建立连接:
      1. SYN:客户端向服务器发送一个 SYN(同步)包,表示希望建立连接。
      2. SYN-ACK:服务器收到 SYN 包后,回应一个 SYN-ACK(同步-确认)包,表示愿意建立连接。
      3. ACK:客户端收到 SYN-ACK 包后,发送一个 ACK(确认)包,完成连接建立。
  2. 半开扫描流程

    • SYN 半开扫描利用了这个三次握手的特性,但故意不完成最后的 ACK 步骤。具体流程如下:
      1. 发送 SYN 包:扫描工具向目标主机的指定端口发送一个 SYN 包,询问该端口是否开放。
      2. 接收响应
      • SYN-ACK 响应:如果目标端口开放,目标主机会返回一个 SYN-ACK 包,表示端口可达并准备建立连接。
      • RST 响应:如果目标端口关闭,目标主机会返回一个 RST(重置)包,表示端口不可达。
      1. 不完成握手:扫描工具不发送最后的 ACK 包,保持连接的“半开”状态。这种方法使得目标主机的端口保持在一个半开的状态,而不是建立完整的连接。
  3. 扫描结果分析

    • 扫描工具根据收到的响应包来确定端口的状态:
      • 如果收到 SYN-ACK 响应,表示端口开放。
      • 如果收到 RST 响应,表示端口关闭。
    • 由于没有完成完整的连接过程,这种扫描方式对目标主机的日志记录影响较小,更难被检测到。

2.跳过主机存活检测扫描使用场景
​   Nmap的探测选项中的-Pn选项可以用来跳过主机存活检测。默认情况下,Nmap会先对目标主机进行存活检测,如果主机未响应,则直接跳过该主机的扫描。该选项可以跳过存活检测,直接对目标主机进行扫描。该选项需要管理员权限才能使用。

(5)、dirmap目录探测工具实践(使用昨日搭建的pikachu靶场)

1.解压dirmap的压缩包后,在其安装目录打开cmd使用命令 “pip install -r ./requirement.txt”安装依赖并升级到最新版本。

2.使用dirmap对pikachu靶场进行目录探测

可以看到两次扫描条数不一样:5685和5705,可能是因为:

 服务器内容变化

    目标服务器上的文件和目录可能会随时更新或改变。如果目标网站的内容在不同的时间点发生变化,扫描结果也会有所不同。

网络条件

  • 网络延迟、丢包或其他网络问题可能导致扫描结果不一致。某些目录可能在某些请求中未能正确响应,导致扫描结果的不完整性。

扫描设置

  • dirmap 的配置选项和扫描参数可能影响扫描结果。例如,扫描深度、字典文件的不同等可能导致不同的扫描条数。确保使用的扫描参数一致,以减少这种差异。

 目标服务器的防护措施

  • 目标服务器可能有防护机制,如速率限制、IP 封禁、内容缓存等,这些措施可能导致扫描请求被阻挡或响应延迟,从而影响扫描结果的稳定性。

 动态内容生成

  • 有些网站使用动态生成的内容,例如通过后台脚本生成的目录列表。这些动态内容可能会随着时间的推移发生变化,从而导致扫描结果的不一致。

扫描工具的执行方式

  • 如果 dirmap 使用不同的扫描策略(例如基于不同的字典、不同的请求方法等),这也可能导致扫描条数的不一致。

权限和认证问题

  • 如果目标网站需要认证或特定的权限才能访问某些目录,扫描工具在不同的时间点或使用不同的认证凭证进行扫描,可能会导致不同的结果。

服务器负载

  • 服务器的负载情况也可能影响扫描结果。如果服务器在高负载状态下响应较慢,可能会错过一些目录或文件的响应。

缓存

  • 网站的内容可能会被缓存。如果扫描时访问的是缓存的内容,那么扫描结果可能与实时内容有所不同。

解决方法:

  • 保持一致的扫描设置:确保每次扫描使用相同的字典文件和参数配置。
  • 多次扫描:进行多次扫描并对比结果,以获取更稳定的扫描数据。
  • 检查网络和服务器状态:确认网络连接稳定,目标服务器无过载或缓存问题。
  • 使用代理:在某些情况下,使用不同的 IP 地址进行扫描可能会避开服务器的速率限制或防护措施。

加分项:dirmap高级应用

​自定义dirmap配置,使用dirmap高级功能。暂时采用加载配置文件的方式,编辑项目根目录下的dirmap.conf,进行配置。dirmap.conf配置详解:

#递归扫描处理配置
[RecursiveScan]
#是否开启递归扫描:关闭:0;开启:1
conf.recursive_scan = 0
#遇到这些状态码,开启递归扫描。默认配置[301,403]
conf.recursive_status_code = [301,403]
#URL超过这个长度就退出扫描
conf.recursive_scan_max_url_length = 60
#这些后缀名不递归扫
conf.recursive_blacklist_exts = ["html",'htm','shtml','png','jpg','webp','bmp','js','css','pdf','ini','mp3','mp4']
#设置排除扫描的目录。默认配置空。其他配置:e.g:['/test1','/test2']
#conf.exclude_subdirs = ['/test1','/test2']
conf.exclude_subdirs = ""

#扫描模式处理配置(4个模式,1次只能选择1个)
[ScanModeHandler]
#字典模式:关闭:0;单字典:1;多字典:2
conf.dict_mode = 1
#单字典模式的路径
conf.dict_mode_load_single_dict = "dict_mode_dict.txt"
#多字典模式的路径,默认配置dictmult
conf.dict_mode_load_mult_dict = "dictmult"
#爆破模式:关闭:0;开启:1
conf.blast_mode = 0
#生成字典最小长度。默认配置3
conf.blast_mode_min = 3
#生成字典最大长度。默认配置3
conf.blast_mode_max = 3
#默认字符集:a-z。暂未使用。
conf.blast_mode_az = "abcdefghijklmnopqrstuvwxyz"
#默认字符集:0-9。暂未使用。
conf.blast_mode_num = "0123456789"
#自定义字符集。默认配置"abc"。使用abc构造字典
conf.blast_mode_custom_charset = "abc"
#自定义继续字符集。默认配置空。
conf.blast_mode_resume_charset = ""
#爬虫模式:关闭:0;开启:1
conf.crawl_mode = 0
#用于生成动态敏感文件payload的后缀字典
conf.crawl_mode_dynamic_fuzz_suffix = "crawl_mode_suffix.txt"
#解析robots.txt文件。暂未实现。
conf.crawl_mode_parse_robots = 0
#解析html页面的xpath表达式
conf.crawl_mode_parse_html = "//*/@href | //*/@src | //form/@action"
#是否进行动态爬虫字典生成。默认配置1,开启爬虫动态字典生成。其他配置:e.g:关闭:0;开启:1
conf.crawl_mode_dynamic_fuzz = 1
#Fuzz模式:关闭:0;单字典:1;多字典:2
conf.fuzz_mode = 0
#单字典模式的路径。
conf.fuzz_mode_load_single_dict = "fuzz_mode_dir.txt"
#多字典模式的路径。默认配置:fuzzmult
conf.fuzz_mode_load_mult_dict = "fuzzmult"
#设置fuzz标签。默认配置{dir}。使用{dir}标签当成字典插入点,将http://target.com/{dir}.php替换成http://target.com/字典中的每一行.php。其他配置:e.g:{dir};{ext}
#conf.fuzz_mode_label = "{ext}"
conf.fuzz_mode_label = "{dir}"

#处理payload配置。暂未实现。
[PayloadHandler]

#处理请求配置
[RequestHandler]
#自定义请求头。默认配置空。其他配置:e.g:test1=test1,test2=test2
#conf.request_headers = "test1=test1,test2=test2"
conf.request_headers = ""
#自定义请求User-Agent。默认配置chrome的ua。
conf.request_header_ua = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36"
#自定义请求cookie。默认配置空,不设置cookie。其他配置e.g:cookie1=cookie1; cookie2=cookie2;
#conf.request_header_cookie = "cookie1=cookie1; cookie2=cookie2"
conf.request_header_cookie = ""
#自定义401认证。暂未实现。因为自定义请求头功能可满足该需求(懒XD)
conf.request_header_401_auth = ""
#自定义请求方法。默认配置get方法。其他配置:e.g:get;head
#conf.request_method = "head"
conf.request_method = "get"
#自定义每个请求超时时间。默认配置3秒。
conf.request_timeout = 3
#随机延迟(0-x)秒发送请求。参数必须是整数。默认配置0秒,无延迟。
conf.request_delay = 0
#自定义单个目标,请求协程线程数。默认配置30线程
conf.request_limit = 30
#自定义最大重试次数。暂未实现。
conf.request_max_retries = 1
#设置持久连接。是否使用session()。暂未实现。
conf.request_persistent_connect = 0
#302重定向。默认False,不重定向。其他配置:e.g:True;False
conf.redirection_302 = False
#payload后添加后缀。默认空,扫描时,不添加后缀。其他配置:e.g:txt;php;asp;jsp
#conf.file_extension = "txt"
conf.file_extension = ""

#处理响应配置
[ResponseHandler]
#设置要记录的响应状态。默认配置[200],记录200状态码。其他配置:e.g:[200,403,301]
#conf.response_status_code = [200,403,301]
conf.response_status_code = [200]
#是否记录content-type响应头。默认配置1记录
#conf.response_header_content_type = 0
conf.response_header_content_type = 1
#是否记录页面大小。默认配置1记录
#conf.response_size = 0
conf.response_size = 1
#是否自动检测404页面。默认配置True,开启自动检测404.其他配置参考e.g:True;False
#conf.auto_check_404_page = False
conf.auto_check_404_page = True
#自定义匹配503页面正则。暂未实现。感觉用不着,可能要废弃。
#conf.custom_503_page = "page 503"
conf.custom_503_page = ""
#自定义正则表达式,匹配页面内容
#conf.custom_response_page = "([0-9]){3}([a-z]){3}test"
conf.custom_response_page = ""
#跳过显示页面大小为x的页面,若不设置,请配置成"None",默认配置“None”。其他大小配置参考e.g:None;0b;1k;1m
#conf.skip_size = "0b"
conf.skip_size = "None"

#代理选项
[ProxyHandler]
#代理配置。默认设置“None”,不开启代理。其他配置e.g:{"http":"http://127.0.0.1:8080","https":"https://127.0.0.1:8080"}
#conf.proxy_server = {"http":"http://127.0.0.1:8080","https":"https://127.0.0.1:8080"}
conf.proxy_server = None

#Debug选项
[DebugMode]
#打印payloads并退出
conf.debug = 0

#update选项
[CheckUpdate]
#github获取更新。暂未实现。
conf.update = 0

(6)、Fscan实践(使用昨日搭建的pikachu靶场)

在fscan的安装目录打开cmd使用命令 “fscan.exe -h 10.17.219.209”进行扫描。

(7)、课上所演示插件安装成功截图

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值