CTF之信息搜集(萌新向)
前言:信息搜集往往是进行ctf做题和渗透测试的第一个部分,就好比做题首先要审题一样,下面我将以一个初学者的视角讲讲该如何使用F12外的基本方法和工具对一个网站进行基本由浅入深的信息收集
(一)网站外围信息的获取
1-1-通过搜索引擎进行信息获取
1.site
在特定网站或域中搜索
例: site:taobao.com 手机|电脑
也可以在特定顶级域(如 .org 或 .edu)或国家/地区顶级域(如 .de 或 .jp)中进行搜索。例:奥林匹克 site:.gov
tips:网址中尽量不要用 www ,除非你有特别目的,用 www 会导致错过网站内的内容,因为很多网站的频道是没有 www


2.intitle
把搜索范围限定在网页标题中
例: intitle:注册|登录|admin
例2: intitle:bookmarks ——查询别人的收藏夹
IE浏览器的收藏夹导出后,网页的标题(title)是bookmarks。

3.inurl
inurl的作用是:把搜索范围限定在url链接中,网页url中的某些信息,常常有某种有价值的含义。
eg: inurl:admin|login
可以精准找到一些管理员后台登录页面
虽然看起来好像很原始,但确实在有些情况下很实用,最近deepseek大热,有个别政府网站在跟风接入大模型的同时并没有注意到模型管理后台的保护,甚至用的还是默认弱密码,而攻击者发现这些网站的方法之一正是这个inurl的搜索。
4.其它的一些小技巧
完全匹配搜索:双引号、书名号 eg:"柠檬酸的作用和用途"
排除搜索法: 减号。“-”前面有空格,后面无空格,搜索结果为排除“-”后面关键词。
相关搜索法:如果你想找到与你已知网站内容相似的新网站,可以使用 related: http://xxxx.com。
通配符: *
1-2-针对网站域名、DNS、IP的信息的查询
还算是在外围,但是比刚才又深入了那么一丢丢,为了方便起见,我们打开linux系统,并且准备好tykd.com这个网址,后面会经常拿它来玩
1.whois命令
简单来说,whois就是一个查询域名的系统,用来查询域名是否已经被注册,以及注册域名的详细信息的数据库(如域名所有人、域名注册商、注册时间、到期时间等)
使用示例:whois baidu.com
进行whois查询时要去掉www等前缀,因为注册域名时通常会注册一个上层域名,子域名由自身的域名服务器管理,在whois数据库中可能查询不到。
我们可以直接在linux的终端使用它,我们先查查百度,查询示例如下:

再偷偷查查我自己注册的域名(补药盒我呜呜呜)

可以看出还是能得到包括域名注册人信息,域名提供商,DNS解析服务器等不少信息的
2.nslookup和dig
nslookup可以得到DNS解析服务器保存的Cache的结果,但并不是一定准确的
dig可以从官方DNS服务器上查询精确的结果
除此之外,dig命令还有很多查询选项,每个查询选项被带前缀(+)的关键字标识。例如:
+short:仅显示答案部分,适用于只需要最终结果的情况,由于dig的答案比较详细,有时候可以采用这个
+[no]search:使用 [不使用] 搜索列表或 resolv.conf 中的域伪指令(如果有的话)定义的搜索列表。缺省情况不使用搜索列表。
+[no]trace:切换为待查询名称从根名称服务器开始的代理路径跟踪。缺省情况不使用跟踪。一旦启用跟踪,dig 使用迭代查询解析待查询名称。它将按照从根服务器的参照,显示来自每台使用解析查询的服务器的应答。
+[no]identify:当启用 +short 选项时,显示 [或不显示] 提供应答的 IP 地址和端口号。
+[no]stats:该查询选项设定显示统计信息:查询进行时,应答的大小等等。缺省显示查询统计信息。


可以看到在不用short查询选项的情况下,dig的查询结果是很详尽的,我们来解析一下每一项的意义
dig命令的输出分为以下几个部分:
- HEADER SECTION:包含了查询的基本信息,例如操作码(opcode)、状态(status)、ID、标志位(flags)等。
- QUESTION SECTION:列出你正在查询的问题,即请求的域名和记录类型。
- ANSWER SECTION:这是最重要的部分,列出了对查询的回答,包括域名、TTL(生存时间)、类(通常是IN代表Internet)、类型及值。
- AUTHORITY SECTION:提供了负责该域名的权威DNS服务器的信息。
- ADDITIONAL SECTION:有时包含额外的信息,例如权威DNS服务器的IP地址。
1-2.5-DNS的解析类型
DNS解析服务应该不用我多介绍了,它除了最常见的A(IPv4地址记录)和AAAA(IPv6地址记录),还有多种其他类型的DNS记录,它们各自有不同的用途:
- CNAME(规范名称记录):指向另一个域名而非IP地址,通常用于将多个名称映射到同一台主机。
- MX(邮件交换记录):指定负责处理发送到域名的电子邮件的邮件服务器,并按照优先级排序。
- NS(名称服务器记录):指定哪个DNS服务器负责解析特定域名,即定义了哪些服务器可以被认为是权威的。
- TXT(文本记录):可用于在DNS记录中添加任意文本字符串,常用于验证域名所有权或配置某些安全策略,如SPF(发件人策略框架)。
- SRV(服务位置记录):指定了提供特定服务的服务器的位置,包括端口号,广泛应用于VoIP(Voice over IP)服务中。
- PTR(指针记录):用于反向DNS查找,即将IP地址转换为其对应的域名,主要用于验证邮件服务器的身份。
- SOA(起始授权机构记录):每个DNS区域必须包含的一条记录,包含了关于该区域的基本信息,如主名称服务器、管理员邮箱等。
其中以我目前浅显的做题记录来看,cname和txt会用得稍微多一些,可以进行留意,比如下面这题,就把flag藏在了txt解析里

3.IP地理位置查询
这个没什么好说的,扔两个网站,再盒一下自己
国内:站长工具https://ip.tool.chinaz.com/
国外:https://www.ipaddressguide.com/ip2location

(二)基本的网站扫描技术:主机发现,目录爆破,端口扫描,OS及服务版本探测
如果说前面都是在网站这座房子外面看看样子踩踩点,现在要准备进屋了:D
PS:为了方便理解实践和我自己检索,这一部分关于msf和nmap的部分我会以软件为单元单独拎出来写

2-1-ping命令进行主机探测
伟大,无需多言,最古老传统的命令,用发送ICMP报文的方法检测活跃主机_(想了想就不在这里写ICMP报文了,感觉好像现在也没遇到需要了解这个的题)_

2-2-后台扫描
如果说前面外围信息搜集是在周围踩点,主机检测是敲敲门看看主人在不在家,那么后台扫描(这玩意和目录爆破严格来说不太一样,但在实际操作中也不是很区分)就是去找网站这座房子有哪些可以进去的门(以便更好地下手),这方面我个人常用的工具有御剑、dirsearch、和msf
听名字就可以知道,这种操作的本质其实就是爆破,通过对常用关键字的大量猜测,并根据返回的状态码扫描出可能存在的后台和文件,所以字典是必须的,一定程度上还决定了扫描的结果,当然dirsearch和msf自带字典,这里也提供一些常用的字典(其实GitHub上还挺多的)
https://github.com/rootphantomer/Blasting_dictionary
1.御剑扫描
不用我多说了吧,简单易懂的图形化页面,配好字典就可以开扫了

2.dirsearch
用得最多的一个工具,kali自带
dirsearch -u http://example.com --默认方式扫描,线程数为 20,不递归
dirsearch -u http://example.com -w <字典文件路径> --指定字典文件
dirsearch -u http://example.com -e <扩展名> --指定拓展名
dirsearch -u http://example.com -r --递归扫描
dirsearch -u http://example.com -t 20 --指定线程数
dirsearch -u http://example.com -o /path/to/output.txt --指定输出文件路径
dirsearch -u http://example.com --proxy http://127.0.0.1:8080 --使用代理
dirsearch -u http://example.com -m POST --指定请求方法,此处为post
dirsearch -u http://example.com -H "Authorization: Bearer token" --指定请求头
dirsearch -u http://example.com -H "Authorization: Bearer token" --指定排除的状态码
dirsearch --version --显示版本信息
还是拿tykd.com这个网站进行实操


比如我们通过扫描help/service这个页面

在实际渗透和做题中我们可以通过这种方法找到网站表面没有给出,但要实际进行攻击的页面
需要注意的是,由于扫描的原理其实是多次尝试爆破,频繁的请求其实会被服务器的WAF发现并采取应对措施,下图是服务器端的防火墙,在检测到频繁的请求后会对此IP采取封印措施

下图则是满屏相同的found 503,并且在访问后发现虽然扫出来了,但跳转的还是主页面,说明服务器端可能做了重定向,并且http的状态码是可以人为设定的,我们所采用的后台扫描软件可能会被欺骗,不过如何绕过WAF的这些措施又是后话了,毕竟这只是萌新向笔记

2-3-万能瑞士军刀 metasploit
mfs全程metasploit-framework,一款功能极其强大的渗透框架,分为六个模块
- Exploit 模块:用于攻击已知的安全漏洞。
- Payload 模块:这些是注入目标系统并执行的代码片段,分为单模式(仅需发送一次即可执行)和阶段模式(需要先建立连接再发送剩余部分)。
- Auxiliary 模块:这包括了各种非漏洞利用的任务,如扫描、拒绝服务攻击、SQL注入工具等。
- Post 模块:用于在成功入侵后进行后续操作,例如提升权限、收集信息等。
- Encoder 模块:用于编码payload以绕过防护机制。
- Nop 模块:生成NOP滑板(No Operation),通常与exploit一起使用
我们今天基本只会讲auxiliary这个模块 才不是因为其它我都不太会呢
首先输入msfconsole进入控制台

稍微用show exploits和show auxiliary可以看到模块真的非常之多,但作为萌新,我们只要搞清楚search、use、set和run就暂时够用了

①后台扫描
use auxiliary/scanner/http/dir_scanner
set THREADS 20
set RHOSTS http://tykd.com
还是对着目标网站进行一次扫描,可以看到扫出了预期结果

② 主机发现
Metasploit 中提供的主机发现模块模块位于Metasploit 源码路径的modules/auxiliary/scanner/discovery/ 目录中,在用的时候我们只需要如法炮制,将上面说过的use路径替换一下
主要有以下几个:arp_sweep、ipv6_multicast_ping、ipv6_neighbor、ipv6_neighbor_router_advetisement、 udp_probe、udp_sweep
其中两个常用模块的主要功能为:
arp_sweep:使用 ARP 请求枚举本地局域网络中的所有活跃主机。
udp_sweep:通过发送 UDP 数据包探查指定主机是否舌跃,并发现主机上的 UDP 服务。
sudo msfconsole
use auxiliary/scanner/discovery/arp_sweep
//UDP:use auxiliary/scanner/discovery/udp_sweep
set RHOSTS 192.168.144.0/24
set THREADS 2
run
arp扫到的本地网络主机

udp只扫出了两个DNS服务器(说实话我不是很懂这个是什么QAQ),没有发现udp服务

③ 端口扫描(虽然这个我一般用nmap)
use auxiliary/scanner/portscan/syn
set RHOST 47.56.157.205
set THREADS 20
run

④ 服务状态扫描
use auxiliary/scanner/telnet/telnet_version
set RHOSTS 47.56.157.205
set THREADS 5
run

use auxiliary/scanner/ssh/ssh_version
set RHOSTS 47.56.157.205
set THREADS 5
run
2-4-扫描神器,上帝之眼 nmap
① 主机发现
-sn(ping扫描方式):nmap -sn 192.168.1.0/24 --快速发现网段内存活主机
② 端口扫描(重点)
Nmap通过探测将端口划分为6个状态:
- open:端口是开放的。
- closed:端口关闭,没有服务监听,但主机是活动的。
- filtered:端口被防火墙IDS/IPS屏蔽,无法确定其状态。
- unfiltered:端口没有被屏蔽,但是否开放需要进一步确定(通常用于 ACK 扫描)。
- open|filtered:端口是开放的或被屏蔽(通常用于 UDP 扫描)。
- closed|filtered :端口是关闭的或被屏蔽(较少见)。
nmap的各种不同参数十分全面,用好了能解决很多问题,鉴于这是萌新向笔记和篇幅原因,这里先扔下一些我最常用的
- -sS(TCP SYN 扫描 )
nmap -sS 192.168.1.0/24也是nmap的默认扫描方式,在没有输入参数的时候默认使用这种方式

- -sV(服务版本检测 )
nmap -sV 47.56.157.205识别目标主机上运行的服务及其版本信息,下面是理想情况

但实际操作有时候会出现这种情况(防火墙的原因?)可以另寻他法

- -p(扫描指定端口)
nmap -p <端口范围> <目标>
常用格式
****
| 格式 | 描述 |
|---|---|
-p 80 |
扫描单个端口(如 80)。 |
-p 80 443 |
扫描多个端口(如 80 和 443)。 |
-p 1-100 |
扫描端口范围(如 1 到 100)。 |
-p- |
扫描所有 65535 个端口。 |
-p U:53,T:80,443 |
扫描指定协议的端口(如 UDP 53 和 TCP 80、443)。 |
- -O (设备信息和操作系统探测)
nmap -O 47.56.157.205

感觉这个好像靠猜给出概率,扫了一下我自己的服务器,因为部署的服务比较少,所以除了web服务器外的信息都不是很准
- -A(激进模式)
nmap -A 47.56.157.205
如果希望对某台主机进行完整全面的扫描,那么可以使用nmap内置的-A选项。使用了改选项,nmap对目标主机进行主机发现、端口扫描、应用程序与版本侦测、操作系统侦测及调用默认NSE脚本扫描,-A可能会绕过某些防火墙或服务限制,获取更详细的信息。
下面是对-A扫描结果的大致解析

- -F (快速模式)
nmap -F -sV 47.56.157.205
快速扫描模式,只扫描常用的 100 个端口(可以与其他-s参数一起使用)。
如果你跟着文章进行了实践,你会发现有时候完成一次完整的扫描会比较久,除了调整线程数,我们还可以通过-F只扫描一百个最常用的端口,当然,这可能会有一些遗漏,但会大大加快扫描速度
(三)网站的备份和代码泄露
这部分不具体写,因为感觉属于方法大于思路的知识,不看不知道,做一遍基本就会了,重要在实际运用,给同学们推荐ctfhub和ctfshow上面都有关于这个知识点的系统题目和环境,wp的话看下面这篇CSDN大佬写的,感觉知识点讲解方面比我自己写的具体多了,所以就懒得动手了
robots.txt
ndex.phps源码泄露
www.zip泄露
.git泄露
.svn泄露
.swp vim泄露
https://blog.csdn.net/qq_49399033/article/details/136239357
其中cookie这题可以着重留意下,cookie / sessions / token / jwt 都是CTF非常容易出题的点

另外,虽然做题要一题一题熟悉原理,但其实在实际操作中备份文件的扫描也可以在更换字典后用msf的目录爆破的模块完成(毕竟原理一样)
/index.sql
/www.sql
/bak.sql
/backup.sql
/tz.php
/index.php.swp
/www.zip
/index.phps
/.bzr
/CVS
/WEB-INF/web.xml
/.svn
/.hg
/.DS_Store
/.git
/index.php.bak

浙公网安备 33010602011771号