本文配套解题过程:ctfshow--VIP题目限免2后10个-CSDN博客,建议一起查看,边做边理解
域名txt记录泄露
问题1:如果不用在线dns网站,还能怎么解析
如果不使用在线 DNS 网站,想要解析域名(获取 IP 地址和端口),主要取决于你的具体需求:是想强制指定 某个 IP 访问,还是想探测 内网或外网的真实 IP,或者是想自己搭建解析环境。
以下是几种主流的替代方案,涵盖了从个人电脑设置到专业工具的使用:
1. 修改本地 Hosts 文件(最常用、最直接)
这是最简单粗暴的方法,相当于在你自己的电脑上建立一个"私有 DNS"。系统会优先读取这个文件,而不是去询问公共 DNS 服务器。
- 适用场景:你知道目标域名的真实 IP,想强制电脑访问这个 IP(例如测试网站、绕过 DNS 污染)。
- 操作方法 :
- Windows :文件位于
C:\Windows\System32\drivers\etc\hosts。用记事本(以管理员身份)打开,添加一行:1.2.3.4 example.com。 - Mac/Linux :文件位于
/etc/hosts。使用命令sudo nano /etc/hosts编辑,添加同样的格式。
- Windows :文件位于
- 注意 :Hosts 文件只能映射 IP,不能映射端口 (端口通常在访问时通过 URL 指定,如
example.com:8080)。
2. 使用命令行工具查询(探测与诊断)
如果你是想"查出"域名对应的 IP,而不是"指定"IP,可以使用系统自带的网络工具。这些工具直接向 DNS 服务器发起查询,不依赖浏览器或在线网站。
ping命令 :- 在终端输入
ping 域名。它会显示域名解析后的 IP 地址,并测试连通性。
- 在终端输入
nslookup命令 :- 输入
nslookup 域名。它可以显示当前 DNS 服务器解析出的 IP。 - 进阶 :你可以指定特定的 DNS 服务器查询,例如
nslookup 域名 8.8.8.8(强制问 Google DNS),这能帮你判断是不是本地运营商的 DNS 有问题。
- 输入
dig命令 (Linux/Mac 常用):- 输入
dig 域名。它提供的信息非常详细,包括 TTL(缓存时间)、权威服务器等。
- 输入
3. 搭建本地或内网 DNS 服务(进阶/极客玩法)
如果你希望整个局域网(比如家里的手机、电脑、电视)都使用一套特定的解析规则,或者想在内网通过域名访问设备,可以自己搭建 DNS 服务器。
- AdGuard Home / Pi-hole :
- 这些是流行的开源软件,通常部署在 NAS 或服务器上。它们不仅能解析域名,还能通过自定义规则屏蔽广告或追踪器。
- 搭建好后,只需在路由器设置中将 DNS 服务器指向这台机器的 IP,全家设备都会生效。
- dnsmasq / BIND :
- 这是更底层的 DNS 软件,适合在 Linux 服务器上配置复杂的内网域名解析(例如让
nas.lan指向192.168.1.5)。
- 这是更底层的 DNS 软件,适合在 Linux 服务器上配置复杂的内网域名解析(例如让
4. 动态域名解析(DDNS)与内网穿透
如果你是想让外网能访问家里的设备(通常没有固定公网 IP),或者没有公网 IP 的情况:
- DDNS(动态域名解析) :
- 如果你有大公网 IP(即使是动态变化的),可以在路由器或 NAS 上配置 DDNS(如花生壳、Cloudflare、阿里云等插件)。它会自动检测 IP 变化并更新域名解析。
- 内网穿透(无公网 IP 方案) :
- 如果没有公网 IP,可以使用 FRP、NPS 或 Cloudflare Tunnel 等工具。它们通过建立隧道,将内网端口映射到公网服务器上,从而让你通过域名访问内网服务。
5. 抓包分析(逆向获取)
如果你想知道某个软件或网页在后台偷偷连接了哪个 IP 和端口:
- Wireshark / Fiddler :
- 使用这些网络抓包工具,可以实时监控电脑发出的所有网络请求。当程序访问域名时,你可以在抓包列表中看到它解析出的真实 IP 地址和端口号。
总结建议
| 你的需求 | 推荐方法 | 难度 |
|---|---|---|
| 强制电脑访问特定 IP | 修改 Hosts 文件 | ⭐ |
| 查询域名真实 IP | 使用 ping 或 nslookup 命令 |
⭐ |
| 全家去广告/自定义解析 | 搭建 AdGuard Home | ⭐⭐⭐ |
| 外网访问家里设备 | 配置 DDNS 或 内网穿透 | ⭐⭐⭐ |
你可以根据你的具体目的选择最合适的一种。
问题2:虚拟机怎么配置
在虚拟机里搭建 DNS 服务是非常经典且实用的操作。
这不仅能让你完全掌控域名解析(实现你想要的"不依赖在线网站"),还能让你在不影响主机的情况下进行各种网络实验。
在虚拟机里弄 DNS 主要有两种玩法:
🛠️ 玩法一:把虚拟机变成"DNS 服务器" (搭建服务端)
这是最彻底的方案。你把虚拟机(通常用 Linux,如 Ubuntu 或 CentOS)配置成一台专门的 DNS 服务器,然后让你的电脑或其他设备去问它"这个域名 IP 是多少"。
-
怎么做:
- 安装软件 :在虚拟机里安装 DNS 软件,最常用的是 BIND (也叫
named),或者轻量级的 dnsmasq。 - 配置规则 :编辑配置文件,写下你想要的解析规则(比如
a.example.com指向192.168.1.50)。 - 设置网络 :把虚拟机的网络模式改为桥接模式,这样它在局域网里就是一台独立的电脑,拥有独立的 IP。
- 生效:把你物理机(宿主机)的 DNS 服务器地址改成这台虚拟机的 IP。
- 安装软件 :在虚拟机里安装 DNS 软件,最常用的是 BIND (也叫
-
优点:
- 完全自定义 :你可以随意定义任何域名,甚至是不存在的假域名(比如
flag.ctf),非常适合做 CTF 靶场或开发测试。 - 隔离安全:实验搞坏了系统,直接快照还原,不影响真机。
- 完全自定义 :你可以随意定义任何域名,甚至是不存在的假域名(比如
💻 玩法二:在虚拟机里"查询"DNS (作为客户端)
如果你只是想在一个干净的环境里查 IP,不想弄乱自己电脑的 Hosts 或缓存。
- 怎么做 :
- 启动虚拟机(Kali、Ubuntu 等)。
- 直接在终端用
dig、nslookup或ping命令。 - 你可以指定虚拟机的 DNS 为
8.8.8.8或1.1.1.1,以此绕过你本地运营商的 DNS 污染。
🌩️ 玩法三:云环境下的"私有 DNS" (进阶)
如果你是在云服务器(如 Azure、腾讯云)的虚拟机里,云厂商通常提供**"私有 DNS"** 或**"专用解析器"**功能。
- 功能 :你可以创建一个"专用 DNS 区域",让云里的多台虚拟机通过自定义的域名互相访问(例如
db.internal指向数据库的内网 IP),而不需要你自己去装软件配置 BIND。 - 优势:不需要维护服务器软件,高可用,且支持自动注册(虚拟机开机自动把名字注册上去)。
📌 总结
如果你是想自己控制解析结果 (比如做 CTF 题目、内网渗透测试、或者开发环境),强烈推荐在虚拟机里安装 dnsmasq 或 BIND。
简单步骤参考(以 dnsmasq 为例):
- 在虚拟机终端输入:
sudo apt install dnsmasq - 编辑配置:
sudo nano /etc/dnsmasq.conf - 加一行:
address=/你要解析的域名/你想要的IP - 重启服务:
sudo systemctl restart dnsmasq
这样,这台虚拟机就成了你的专属 DNS 解析站了!
问题3:在虚拟机里怎么解析dns
在虚拟机里解析 DNS(即让虚拟机能够访问域名,或者配置虚拟机作为 DNS 服务器),主要取决于你的具体目的 。虚拟机里搭建DNS服务器有详细教程
通常有两种情况:
- 让虚拟机能上网/解析域名 (作为客户端,比如
ping www.baidu.com)。 - 把虚拟机配置成 DNS 服务器(作为服务端,用来解析自定义域名)。
以下是针对不同需求的具体操作方法:
1. 让虚拟机正常解析域名(客户端模式)
如果你发现虚拟机里 ping 域名报错(如 Temporary failure in name resolution),但 ping 8.8.8.8 是通的,说明你需要配置 DNS。
方法 A:自动获取(推荐新手)
最简单的方法是让虚拟机跟随宿主机的网络设置。
- VMware/VirtualBox 设置 :将网络适配器模式设置为 NAT 模式。
- 系统设置 :在虚拟机操作系统中,将网络设置为"自动获取 IP 和 DNS"。
- Windows 虚拟机:控制面板 -> 网络和共享中心 -> 更改适配器设置 -> 右键网卡 -> 属性 -> IPv4 -> 自动获得 DNS 服务器地址。
- Linux 虚拟机 :通常 DHCP 会自动分配。你可以重启网络服务
sudo systemctl restart network或NetworkManager。
方法 B:手动指定 DNS(最稳定)
如果自动获取不行,或者你想指定使用 Google/阿里 DNS,可以手动修改配置文件。
-
Linux (修改
/etc/resolv.conf):-
打开终端,编辑文件:
1sudo vim /etc/resolv.conf -
添加或修改
nameserver行(推荐用 114.114.114.114 或 8.8.8.8):1nameserver 114.114.114.114 2nameserver 8.8.8.8 -
保存退出。此时再试
ping www.baidu.com应该就通了。
- 注意:如果重启后失效,可能需要修改网卡配置文件(如
/etc/sysconfig/network-scripts/ifcfg-eth0)添加PEERDNS=no防止被覆盖,或者在 NetworkManager 中设置。
-
-
Windows :
在 IPv4 属性中,选择"使用下面的 DNS 服务器地址",填入
114.114.114.114即可。
2. 在虚拟机里搭建 DNS 服务(服务端模式)
如果你想让这台虚拟机成为局域网的 DNS 服务器(比如解析内网域名,或屏蔽广告),你需要安装 DNS 软件。
方案 A:使用 dnsmasq(轻量、简单,推荐)
适合做简单的内网解析或 DNS 转发。
- 安装 :
sudo apt install dnsmasq(Ubuntu/Debian) 或sudo yum install dnsmasq(CentOS)。 - 配置 :编辑
/etc/dnsmasq.conf。- 添加解析规则:
address=/test.com/192.168.1.50(把 test.com 解析到指定 IP)。 - 指定上游 DNS:
server=8.8.8.8(解析不了的问 Google)。
- 添加解析规则:
- 启动 :
sudo systemctl start dnsmasq。 - 使用:将其他机器的 DNS 指向这台虚拟机的 IP。
kali 安装:

ubuntu安装:

配置sudo vim /etc/dnsmasq.conf:

翻到蓝色最下面,将以下代码复制到最底下:
# 1. 监听设置
# 监听所有网卡,或者指定 IP(例如 192.168.1.5)
listen-address=127.0.0.1,192.168.1.5
# 绑定接口(防止占用其他网卡)
interface=eth0
# 2. 上游 DNS 服务器(如果解析不了,就问它们)
# 这里配置了阿里 DNS 和 Google DNS
server=223.5.5.5
server=8.8.8.8
# 3. 自定义域名解析(这是 dnsmasq 最强大的功能!)
# 格式:address=/域名/IP
# 比如:想让 test.com 指向你的虚拟机 192.168.1.50
address=/test.com/192.168.1.50
# 泛解析:*.test.com 也指向这个 IP
address=/test.com/192.168.1.50
# 4. 缓存设置
# 缓存条目数,默认是 150,设大一点性能好
cache-size=1000
# 5. 日志(调试用,生产环境可以注释掉)
log-queries
log-facility=/var/log/dnsmasq.log
如果你是用 vim 或 vi 编辑的,请按键盘上的 Esc 键(确保退出了编辑模式),然后输入冒号 : ,接着输入 wq ,最后按 回车。
w= Write (保存)q= Quit (退出)
操作口诀 :按
Esc-> 输入:wq-> 按回车。
光标变回闪烁的 [user@host ~]$ 时,说明你已经退出来了。接下来继续完成剩下的步骤:
1. 检查配置有没有写错(这一步很重要!)
在启动之前,先让系统帮你检查一下刚才写的配置文件有没有语法错误。
在终端输入:
sudo dnsmasq --test
- 如果显示 :
dnsmasq: syntax check OK- 意思:恭喜,配置没问题,可以继续。
- 如果显示 :
bad option或failed- 意思 :出错了,可能是拼写错误或者多打了个符号。你需要重新进去改(
sudo vim /etc/dnsmasq.conf)。
- 意思 :出错了,可能是拼写错误或者多打了个符号。你需要重新进去改(

2. 启动服务
检查没问题后,就可以把 dnsmasq 跑起来了。输入:
sudo systemctl start dnsmasq
(如果想让它开机自动运行,再加一句:sudo systemctl enable dnsmasq)
如果出错了,比如出现以下情况:

启动失败通常是因为端口冲突。在 Ubuntu 系统中,有一个名为 systemd-resolved 的服务默认会占用 DNS 的 53 端口,导致 dnsmasq 无法启动。
别担心,这个问题很常见,解决起来也很快。
解决步骤
-
停止并禁用冲突的服务
执行以下命令,让
systemd-resolved服务停止运行,并禁止它开机自启sudo systemctl stop systemd-resolved sudo systemctl disable systemd-resolved
-
重新启动 dnsmasq 服务
冲突服务停止后,再次尝试启动
dnsmasqsudo systemctl start dnsmasq
现在,dnsmasq 应该就能成功启动了。
如何验证
你可以通过以下命令检查 dnsmasq 的状态,确认它正在运行:
systemctl status dnsmasq.service
如果看到绿色的 active (running),就说明一切正常了。

看图中那行绿色的字:
Active: active (running)
这就代表 dnsmasq 服务已经正常启动并在运行了。
关于那个红色的报错
你看到的红色字:
resolvconf[4724]: Failed to set DNS configuration: ...
- 什么意思?
这是一个常见的警告。因为你刚才关掉了 Ubuntu 默认的网络管理服务(systemd-resolved),现在dnsmasq试图去接管 DNS 设置时,发现原来的"管家"不在了,所以报了一个设置失败的错。 - 有影响吗?
没有影响 。只要dnsmasq本身跑起来了,这个红色的报错可以忽略。
按 q 键即可退出。
3. 验证是否成功
最后,测一下它工作不正常。输入:
dig @127.0.0.1 www.baidu.com
如果返回了 IP 地址(比如 110.242.68.4),那就说明你的 DNS 服务器已经搭建成功了!

从截图里可以看到几个关键点,证明 dnsmasq 正在完美工作:
status: NOERROR:这表示没有发生错误,DNS 服务器成功处理了你的请求。ANSWER SECTION:这里给出了百度的 IP 地址(198.18.0.9),说明它真的帮你把域名解析出来了。Query time: 9 msec:响应时间只有 9 毫秒,非常快(因为dnsmasq有缓存功能)。SERVER: 127.0.0.1#53:这行字最关键,它证明了你的请求确实是发给了本地的dnsmasq服务,而不是发给了路由器或者公网 DNS。
测试 2:查你刚才配置的假域名(看自定义规则灵不灵)
假设你在配置文件里写了 address=/test.com/192.168.1.50,那你输入:
dig @127.0.0.1 test.com
预期结果 :在 ANSWER SECTION 里看到 IP 是 192.168.1.50。
如果这两个测试都过了,恭喜你,你的 DNS 服务器彻底搭建成功了!

接下来你可以做什么?
既然基本功能好了,你可以试试这两个进阶玩法:
让它成为你电脑的默认 DNS
现在你每次测试都要加 @127.0.0.1 有点麻烦。你可以修改 Ubuntu 的网络设置,把 DNS 永久改成 127.0.0.1。
简单修改方法 :
编辑 /etc/resolv.conf 文件:
sudo vim /etc/resolv.conf
把里面的 nameserver 改成:
nameserver 127.0.0.1
保存退出后,你以后直接输 ping baidu.com 就会自动走 dnsmasq 了。
(注:在 Ubuntu 桌面版中,这个文件重启后可能会变回去,如果要永久生效,需要去"设置 -> 网络 -> IPv4"里把 DNS 手动改成 127.0.0.1)。


第一步:打开网络设置
- 点击屏幕右上角的网络图标(或者在应用列表里找"设置")。
- 找到 "网络" 选项。
- 点击你正在连接的网络(通常是个齿轮图标 ⚙️),也就是 有线连接 或 Wi-Fi 的设置。
第二步:修改 IPv4 设置
- 在弹出的窗口里,点击 "IPv4" 标签页。
- 找到 "DNS" 这一栏。
- 把它从"自动"改成 "手动"。
- 在输入框里填入:
127.0.0.1
(如果系统要求填多个,或者你有备用DNS,可以填127.0.0.1, 8.8.8.8,但主要要把127.0.0.1放第一个)。 - 点击 "应用"。
如果卡在
这里需要填写的信息比较多,一不小心就会断网。
最简单的办法:不要选"手动",退回去选"自动"!
请按照下面的步骤操作,既能用你的 DNS,又不会断网:
1. 改回"自动"
- 在 IPv4 方式 里,重新选中 "自动 (DHCP)" 那个单选框。
2. 关闭 DNS 的自动开关
- 看下面的 DNS 那一栏。
- 把右边的 "自动"开关关掉(变成灰色)。
3. 填写 DNS
- 开关关掉后,下面的输入框就可以打字了。
- 在里面输入:
127.0.0.1
4. 完成
- 点击 "应用" 按钮。
为什么要这么做?
- 如果你选"手动",你必须把 IP地址、子网掩码、网关全部填对,否则虚拟机就上不了网了。
- 选"自动"可以让路由器自动分配 IP 保证你能上网,而关掉 DNS 的"自动"开关,则是告诉系统:"IP 还是自动获取,但查域名的事情,请只听
127.0.0.1的"。
第三步:重启网络
关掉设置窗口,把右上角的网络开关 关掉再打开 一下,或者直接重启虚拟机。
怎么验证改成功了?
不用再看那个文件了,直接在终端输入:
systemd-resolve --status
或者简单的:
nslookup baidu.com
如果看到的 Server 地址是 127.0.0.1,那就彻底大功告成了!以后你访问任何网址,都会先经过你的 dnsmasq 服务器。
如果就是第三步重启有问题,
之所以 nslookup 或 dig 还是显示旧的 DNS(比如 127.0.0.53),是因为 Ubuntu 24.04 默认使用 systemd-resolved 这个服务来管理 DNS。这个服务会创建一个本地的"存根监听器"在 127.0.0.53 上,而你的 dnsmasq 服务运行在 127.0.0.1 上。
简单来说,系统现在有两个"本地管家"在抢着管事,而 127.0.0.53 这个旧的管家优先级更高。
要解决这个问题,你需要禁用掉 systemd-resolved 这个服务,让你的 dnsmasq 成为唯一的 DNS 管家。
解决方案:禁用 systemd-resolved
在终端里执行以下两步操作:
1. 停止并禁用服务
运行这条命令,它会立即停止 systemd-resolved 服务,并阻止它在开机时自动启动。
sudo systemctl disable --now systemd-resolved
2. 重启网络服务
为了让刚才在图形界面里的设置(将 DNS 指向 127.0.0.1)完全生效,需要重启网络管理器。
sudo systemctl restart NetworkManager
如何验证是否成功
执行完以上两步后,再次进行测试:
nslookup baidu.com
预期结果 :这次你应该会看到 Server: 的地址变成了 127.0.0.1,
你的 DNS 服务器已经大功告成,接下来想怎么玩都行!
方案 B:使用 BIND9(专业、功能全)
适合学习标准 DNS 协议或搭建复杂环境。
- 安装 :
sudo apt install bind9。 - 配置 :主要配置文件在
/etc/bind/named.conf.local和/etc/bind/named.conf.options。 - 定义区域:你需要定义正向解析区域(域名转 IP)和反向解析区域。
3. 临时/本地解析(不配 DNS 服务)
如果你只是想在这个虚拟机里访问某个特定的域名,不想折腾服务:
- 修改 Hosts 文件 (优先级最高):
- Linux : 编辑
/etc/hosts - Windows : 编辑
C:\Windows\System32\drivers\etc\hosts - 格式 :
192.168.1.100 my-local-site.com - 这样虚拟机会直接通过本地文件解析,不需要询问 DNS 服务器。
- Linux : 编辑
4. 如何测试 DNS 是否解析成功
配置好后,用以下命令测试:
- ping :
ping www.example.com(看能否解析出 IP 并连通)。 - nslookup (推荐):
nslookup www.example.com(查看是哪个 DNS 服务器返回的结果)。 - dig (Linux 专业工具):
dig www.example.com(查看详细的解析过程和耗时)。
总结建议:
- 如果是为了上网 :直接改
/etc/resolv.conf加nameserver 114.114.114.114最快。 - 如果是为了做实验/靶场 :建议装一个
dnsmasq,配置简单且够用。
敏感信息公布
题目提示:有时候网站上的公开信息,就是管理员常用密码
问题1:AWVS(即WVS)网站怎么安装,怎么用,(付费使用)
详情可以看:AWVS下载和安装保姆级教程-CSDN博客
问题2:为什么robot是突破口
robots.txt 之所以是突破口,是因为它在 CTF 和实际渗透测试中,往往扮演着**"官方泄露地图"**的角色。
具体原因可以归纳为以下三点:
1. 核心逻辑:掩耳盗铃的"反向指引"
robots.txt 的初衷是告诉搜索引擎(如 Google、百度)哪些页面不要抓取。
- 管理员的想法 :"我不想让别人发现我的后台
/admin_888,所以我把它写进robots.txt里,让百度别收录它。" - 黑客/选手的想法:"既然你特意告诉搜索引擎别抓这个,说明这里面肯定有不想让人看的东西。"
结果 :这个文件反而变成了一张藏宝图,直接暴露了管理员最想隐藏的路径。
2. 题目线索的直接对应
你这道题的标题叫**"敏感信息公布"**。
- 如果网站没有任何提示,你需要用字典去爆破几万个路径(就像你刚才跑
dirsearch一样,费时费力)。 - 但
robots.txt是一种公开的、无需权限就能访问的文件。管理员把它放在这里,就等于在门口贴了一张告示:"后门在这里,虽然我不让你进,但我告诉你门在哪了。"
3. 实战中的常见套路
在 CTF 的 Web 题中,robots.txt 通常藏着两类东西:
- 后台地址 :比如
/admin、/shell、/flag_is_here。 - 备份文件 :比如
/www.zip、/bak(有时候甚至会直接把源码打包放在这里让你下载)。
总结
你刚才跑 dirsearch 就像是在大街上挨家挨户敲门找宝藏;而查看 robots.txt 就像是直接拿到了房东手里的备用钥匙清单。
所以,赶紧去浏览器访问它,看看管理员到底藏了什么!
内部技术文档泄露
题目提示:技术文档里面不要出现敏感信息,部署到生产环境后及时修改默认密码
问题1:我做的时候莫名其妙显示Python 环境里缺少了 defusedxml 这个库,导致 dirsearch 无法运行。
问题原因
简单来说,dirsearch 这个工具依赖一个名为 defusedxml 的第三方库来处理 XML 文件。你的电脑上没有安装这个库,或者你安装了,但 dirsearch 运行时使用的 Python 环境找不到它。
从报错信息 import defusedxml.ElementTree as ET 和 ModuleNotFoundError: No module named 'defusedxml' 可以清晰地看出这一点。
解决方案
你需要安装这个缺失的库。请按照以下步骤操作:
(如果你和我一样有多个Python环境那就要指定一下库)
-
打开命令行工具:打开你的终端(Terminal)或命令提示符(CMD/PowerShell)。
-
执行安装命令:输入以下命令并回车:
pip install defusedxml -
重新运行 dirsearch :安装完成后,再次执行你之前的
dirsearch命令,问题应该就解决了。
如果上述方法无效(进阶排查)
如果安装后仍然报错,那很可能是你的电脑里有多个 Python 环境(比如同时有 Python 2 和 Python 3,或者使用了虚拟环境),导致 pip 安装到了一个环境,而你用 python3 命令运行时,却在另一个环境里找这个库。
更稳妥的安装方式是:
python3 -m pip install defusedxml
这个命令会强制使用 python3 对应的 pip 来安装库,确保库被安装到你正在使用的 Python 环境中,从而避免环境不一致的问题。
问题2:运行了上面的代码还是有问题怎么办

这个报错 No module named pip 说明你的这个 Python 环境(路径显示是 D:\msys64\...)没有安装 pip 包管理工具,或者环境配置有问题。
dirsearch 是一个 Python 脚本,它依赖很多第三方库(比如刚才的 defusedxml),如果没有 pip,你就没法安装这些依赖,工具就跑不起来。
别担心,有两个简单的解决方法,推荐优先尝试方法一:
方法一:换用你电脑上正常的 Python 环境(最推荐)
从路径看,你现在的 Python 似乎是 Git Bash 或 MSYS2 环境自带的,这个环境可能不完整。你电脑上应该安装了标准的 Windows Python。(具体代码根据自己情况修改)
操作步骤:
-
不要 在那个
E:\desktop\7kbscan字典360工具\dirsearch-master>的 Git Bash 窗口里运行。 -
按
Win + R,输入cmd,打开黑色的 命令提示符。 -
在 cmd 里输入
python --version或python3 --version,看看能不能显示版本号(比如 Python 3.9.0)。 -
如果显示了版本号,用
cd命令进入你的 dirsearch 目录:cd E:\desktop\7kbscan字典360工具\dirsearch-master -
然后运行安装命令:
pip install defusedxml(如果 pip 不行,试试
python -m pip install defusedxml)
方法二:直接在当前环境尝试修复(如果方法一不行)
如果你坚持要用当前这个窗口,可以尝试用 ensurepip 模块来引导安装 pip。
操作步骤:
在当前的窗口输入:
python3 -m ensurepip --upgrade
如果成功,它会自动安装 pip。安装完后再试 python3 -m pip install defusedxml。
总结建议:
直接用 Windows 自带的 cmd 或 PowerShell 来跑 Python 工具最省心,路径和依赖不容易乱。赶紧试试方法一吧!

问题3:扫描出来后,如何看信息
(之前AI告诉我的扫描的文件后缀试了一下,显示403,说明目录确实存在,如果不存在是404)


找的这两个绿色 301 状态码就是关键线索。
在 Dirsearch 的扫描结果中,颜色是有特定含义的:
- 粉色/洋红色 (404):代表页面不存在。这些是你字典里尝试但没找到的文件,可以直接忽略。
- 绿色 (301) :代表永久重定向 。这通常意味着你找到了一个真实的目录 !服务器会自动把访问
/css的请求重定向到/css/(加上斜杠)。 - 蓝色/青色 (200):代表请求成功(找到了具体的文件)。
分析你找到的线索
你目前发现了两个有效的目录:
/css//images//js//fonts/
现状分析:
这些都是网站的标准静态资源目录(样式表、图片、脚本、字体)。对于 CTF 来说,这里面通常不直接包含 flag,但可能藏有线索。
下一步操作建议
既然找到了目录,我们有两种策略:
策略一:浏览器手动查看(最简单)
直接把你在扫描结果里看到的这两个绿色链接复制到浏览器地址栏里访问:
http://...challenge.ctf.show/css/http://...challenge.ctf.show/images/http://...challenge.ctf.show/js/
看点:
- 看看目录列表是否开启(能不能直接看到里面的文件)。
- 看看有没有奇怪的文件名(比如
style.css很正常,但style.css.bak或者readme.txt就很可疑)。
策略二:针对目录进行深度扫描(更彻底)
现在的扫描只是扫了根目录。你需要让 Dirsearch 进到这个目录里去扫。
使用 -R 参数(递归扫描)或者指定目录扫描:
命令推荐:
1# 方法A:递归扫描,让它自动往子目录里钻
2python3 dirsearch.py -u https://你的网址 -e txt,php,md,bak,zip -R 2
3
4# 方法B:专门盯着 /images/ 扫(看看里面有没有隐藏的图片或备份)
5python3 dirsearch.py -u https://你的网址/images/ -e txt,php,md,bak,jpg,png
特别提醒(结合你的题目背景)
之前的题目提示是"技术文档泄露"。
如果 /css/、/js/、/images/ 里没有东西,请不要灰心。
重点回顾:
你现在的字典似乎主要是扫 .php 文件的(看截图里全是 xxx.php)。
请回到我最开始给你的建议,专门扫描文档后缀 ,因为 flag 很可能在 README.md 或者 INSTALL.txt 里,而不是 PHP 文件里。
请运行这个命令,这才是找"文档泄露"的杀手锏:
python3 dirsearch.py -u https://你的网址 -e md,txt,doc,pdf,bak,zip -t 50
问题4:200 - 10KB - /js/custom.js 只显示了这个是绿色的

这个结果是什么意思?
[17:04:24] 200 - 10KB - /js/custom.js
200(状态码) :这是 HTTP 状态码,意思是"OK,找到了"。这是你最想看到的数字,说明这个文件真实存在。10KB(大小):文件的大小。10KB 对于一个 JS 文件来说,内容应该不少,值得看一眼。/js/custom.js(路径):这是相对于网站根目录的路径。
接下来该做什么?(CTF 解题思路)
既然这是一个 CTF 题目,而且目标是 /js/ 目录,这个 custom.js 文件里极大概率藏着 Flag 或者 Flag 的线索。
请按以下步骤操作:
-
直接访问它
在你的浏览器地址栏输入完整的链接并回车:
https://网址/js/custom.js -
查看源代码
打开后,你会看到一堆 JavaScript 代码。仔细查找以下内容:
flag{...}或ctfshow{...}:直接搜索flag关键字。- 奇怪的字符串:比如很长的乱码,可能是加密后的 flag。
- 注释 :代码里的
//或/* ... */中间的内容,有时候提示会藏在这里。 - 逻辑判断 :看看代码里有没有类似
if (input === "xxxxx")的逻辑,那个xxxxx可能就是密码或 flag。
-
继续扫描(可选)
虽然找到了一个,但可能还有别的。你可以让 dirsearch 跑得更久一点,或者换个字典试试,看看还有没有其他的
200或者301(目录)。
现在,赶紧去浏览器里打开那个链接看看吧!
问题5:这是为什么,如果不搜索就看不到这个document
找了半天没招了,后面看wp,说这个文件有问题

这是一个非常经典的 CTF 题目设计手法,通常被称为**"隐藏链接"** 或**"白字陷阱"**。
之所以你"不搜索就看不到",是因为出题人故意把那个链接的颜色设置成了和背景色一样(比如白色背景,白色字体)。
为什么会出现这种情况
网页的开发者(在这里是出题人)在写代码时,给这个链接加了样式,让它"隐形"。
- 原理 :如果网页背景是白色的,把字体颜色也设为白色(
color: white),肉眼在浏览器里看就是一片空白,什么都看不见。 - 目的 :这是为了迷惑普通的访问者,让你觉得页面就是这样的。但对于做题的人来说,只要你查看源代码 ,或者像你做的那样鼠标选中(选中会强制改变背景色,让文字显现出来),就能发现这个隐藏的秘密。
问题6:如果不知道这个地方是线索,怎么找到
这其实正是 CTF 题目里最让人"头秃"但也最考验思路的地方。如果出题人不给提示,光靠肉眼盯着屏幕看,确实很难发现这种"隐形"内容。
作为解题者,我们有一套标准的"暴力"排查流程,不需要知道线索,也能通过流程把它揪出来。
以下是如果不靠提示,职业选手或经验丰富的 CTF 玩家通常会用的 3 种方法:
1. "全选"大法(最简单粗暴)
这是很多老玩家的习惯动作。打开一个网页,不管有没有线索,先按键盘上的 Ctrl + A(全选),然后观察页面变化。
- 原理:全选会改变网页元素的背景色(通常变成蓝色或灰色)。
- 效果:原本"白色字+白背景"的隐藏文字,因为背景被强制变色,文字就会原形毕露。
- 你的情况 :如果你一开始就
Ctrl + A,底部的docu就会直接显现出来。
2. 查看源代码(最正规)
不管页面显示什么,黑客眼里只看代码。
-
操作 :右键 -> 查看网页源代码 (或者按
Ctrl + U)。 -
搜索关键词 :在代码里搜索
flag、hint、admin,或者简单的div、a标签。 -
找异常 :
<a href="secret.php" style="color: white;">docu</a>或者html
<div style="display: none;">这里有线索</div>只要看到
color: white(在白背景下)、opacity: 0(透明度0)或者hidden,那就是藏东西的地方。 -

3. 目录爆破(Dirsearch 的本职工作)
其实,你之前用的 dirsearch 工具有时候能直接扫出这个隐藏页面的路径,而不需要先发现网页上的链接。
- 原理 :
dirsearch不是看网页上写了什么,而是拿着字典去试服务器上有没有这个文件。 - 效果 :如果那个
docu链接指向的是/admin或者/backup,dirsearch会直接报出 200 OK,根本不需要你肉眼去网页上找那个隐藏链接。
总结一下:
如果不给提示,标准的解题流程是:
- 先
Ctrl + A看看有没有隐藏文字。 - 再
Ctrl + U看看源代码里有没有注释或隐藏标签。 - 最后上
dirsearch把网站的目录扫个底朝天。
编辑器配置不当
题目提示:有时候源码里面就能不经意间泄露重要(editor)的信息,默认配置害死人
问题1:咋观察到目录的
方法一:查看网页源代码
这是最基础也是最常用的方法,通常被称为"扒源码"。
-
操作方法 :在网页任意空白处点击鼠标右键,选择"查看网页源代码"(或者直接按键盘快捷键
Ctrl + U)。 -
如何观察 :在打开的代码页面里,按
Ctrl + F进行搜索,输入关键词如assets、editor或者.css、.js。 -
原理 :网页为了加载样式或脚本,往往会在代码里直接写明路径。例如,你可能会看到类似这样的代码行:
<link href="assets/css/style.css" rel="stylesheet"> <script src="editor/kindeditor.js"></script>这就直接暴露了
assets和editor这两个目录的存在。
方法二:使用目录扫描工具
这是自动化发现隐藏目录的高效方法。
- 操作方法 :使用
dirsearch或御剑这类工具对网站进行扫描。 - 如何观察 :工具会自动尝试访问服务器上可能存在的路径,并返回状态码。
- 403 Forbidden :表示目录存在但禁止访问(对应文中提到的
assets)。 - 200 OK :表示目录或文件存在且可以访问(对应文中提到的
editor)。
- 403 Forbidden :表示目录存在但禁止访问(对应文中提到的
- 原理:工具会根据内置的字典文件,逐一尝试访问,从而发现那些没有直接链接指向的"隐藏"目录。
总结
- 403 (Forbidden):说明你找到了门,但门卫不让你进。这通常意味着目录确实存在,只是权限设置比较严格。
- 200 (OK):说明你找到了门,而且门是开着的,可以直接进去看看。
在实际解题中,通常会先"扒源码"寻找线索,如果找不到,再使用"目录扫描"工具进行更深入的探测。
问题2:到editor里之后如果没看wp不知道到底文件在哪咋办
这时候,我们就得靠"逻辑推理"和"暴力枚举"来缩小范围。不要漫无目的地乱点,按照下面这套**"寻宝地图"**来排查,基本能把 90% 的 Flag 揪出来:
寻找"显眼包"(名字奇怪的文件/文件夹)
CTF 出题人很喜欢玩文字游戏,Flag 通常藏在名字很特殊的文件里。在遍历时,留意以下关键词:
- 文件名 :
flag.txt、flag.php、fl0g、flag_is_here、hint、secret、backup、key。 - 文件夹名 :
nothinghere(就像你之前遇到的)、flag、hidden、tmp、backup、.ssh(隐藏文件夹)。
技巧 :遍历时,眼睛专门盯着那些看起来不像系统文件夹 (比如不像 bin、etc、lib 这种)的名字。
蹲守"大本营"(Web 根目录)
绝大多数 Web 题目的 Flag 都在网站的根目录下,或者它的子目录里。因为 Web 服务器(如 Apache/Nginx)默认只能访问这些目录。
常见路径:
- Linux 系统 :
/var/www/html/(最常见!)/var/www//home/www//usr/share/nginx/html/
- Windows 系统 :
C:\www\C:\inetpub\wwwroot\
操作:利用"后退"按钮,一层层退出来,找到这些目录,然后进去逐个检查。
偷看"配置文件"(高级技巧)
如果上面都没找到,说明 Flag 藏得深,或者需要"借力打力"。你可以尝试读取网站的配置文件,里面往往藏着数据库密码,甚至直接藏着 Flag。
重点目标:
- Linux :
/etc/passwd(查看有哪些用户)、/etc/shadow(查看密码哈希)。 - Web 配置文件 :
config.phpdatabase.phpweb.xml.env(这个文件经常泄露敏感信息!)
操作:在遍历时,如果看到这些文件,尝试打开看看,说不定 Flag 就写在注释里,或者数据库密码就是 Flag。
终极手段:目录爆破(如果你能拿到服务器 IP)
如果你知道靶机的 IP 地址,可以用工具(如 dirsearch、gobuster)直接扫描,不用靠编辑器慢慢点。
命令示例:
dirsearch -u http://靶机IP -e *
工具会自动帮你遍历常见的目录和文件,效率比手动点高得多。
总结一下
不知道在哪:
- 先找名字奇怪的文件/文件夹。
- 蹲守Web 根目录 (如
/var/www/html/)。 - 偷看配置文件 (如
config.php、.env)。 - 实在不行,用工具爆破。
按照这个思路,基本能把 Flag 揪出来。
问题3:一般80端的flag和hint存在于/var/www下,其他端口呢,而且怎么看端口到底多少
这得看服务器具体的部署方式,因为非 80 端口通常意味着运行了非标准服务。不过只要摸清了不同端口的常见用途,再配合工具确认一下,你就能快速锁定 Flag 的位置。
🔍 不同端口,Flag 可能藏在哪?
虽然 /var/www/ 是 Web 服务的"大本营",但如果服务运行在其他端口,情况就会发生变化:
非标准 Web 端口(如 8080, 8888, 81)
- 情况:这些通常也是 Web 服务,只是不想和默认的 80 端口冲突。
- Flag 位置 :依然大概率在
/var/www/html/或者/var/www/下。有时候会在/opt/下的某个文件夹里。
FTP 服务(端口 21)
- 情况:如果题目给了一个 FTP 端口,说明 Flag 可能藏在 FTP 用户的家目录里。
- Flag 位置 :
/home/用户名//var/ftp//srv/ftp/
SSH 服务(端口 22)
- 情况:这通常意味着你需要登录系统。
- Flag 位置 :
- 当前登录用户的家目录:
/home/用户名/ - 当前用户的桌面:
/home/用户名/Desktop/ - 当前用户的根目录:
/root/(如果你能拿到 root 权限)
- 当前登录用户的家目录:
数据库端口(如 3306, 1433)
- 情况:这种端口本身不能直接浏览文件,但 Flag 可能存储在数据库里。
- Flag 位置 :
- 数据库的某个表里(需要通过 SQL 注入或登录数据库查看)。
- 数据库的配置文件里(如 MySQL 的
my.cnf)。
其他应用端口(如 5000, 3000, 8000)
- 情况:这些通常是 Python (Flask/Django)、Node.js 等开发的服务。
- Flag 位置 :
- 应用程序的代码目录下,比如
/app/、/opt/app/、/home/user/app/。 - 临时目录
/tmp/(有些脚本运行时会把文件放这)。
- 应用程序的代码目录下,比如
🛠️ 怎么看端口到底是多少?
如果你手里只有靶机的 IP 地址,但不知道开了哪些端口,可以用以下方法扫描:
方法一:Nmap 扫描(最专业)
这是黑客和运维最常用的工具,能扫描出目标机器开放了哪些端口。
- 命令 :
nmap -p- <靶机IP>(扫描所有端口) - 命令 :
nmap -sV -p 1-10000 <靶机IP>(扫描前 10000 个端口并识别服务版本)
方法二:在线端口扫描工具
如果你本地没装 Nmap,可以用一些在线工具。
- 搜索关键词:"在线端口扫描"。
- 输入靶机 IP,它会告诉你哪些端口是开放的。
方法三:题目描述(最直接)
在 CTF 比赛中,题目描述通常会直接告诉你端口号,比如:
- "nc 192.168.1.100 12345" -> 端口是 12345。
- "访问 http://192.168.1.100:8080" -> 端口是 8080。
📌 总结一下
- Web 端口(80, 8080, etc.) :优先找
/var/www/html/。 - FTP 端口(21) :优先找
/home/或/var/ftp/。 - SSH 端口(22) :优先找
/home/用户名/。 - 不知道端口?:用 Nmap 扫一下,或者看题目描述。
核心思路:端口决定了服务的类型,服务类型决定了文件可能存放的位置。
密码逻辑脆弱
题目提示:公开的信息比如邮箱,可能造成信息泄露,产生严重后果
这个其实挺简单的,就是难想到要去qq查看用户
探针泄露
题目提示:对于测试用的探针,使用完毕后要及时删除,可能会造成信息泄露
问题1:为什么这一道题想到要这样做

这道题的思路非常巧妙,它考察的不是常见的"目录遍历"或"文件读取",而是一个更底层的概念------"PHPINFO 本地文件包含"。
之所以会想到这样做,通常是基于以下几个逻辑推理步骤:
1. 为什么是 tz.php?(发现入口)
- 常规操作 :在做 Web 题时,第一步通常是目录扫描(Dirsearch/御剑)。
- 发现线索 :扫描结果中发现了
tz.php这个文件。 - 参数猜测 :访问
tz.php后,你可能会发现页面没什么反应,或者有一些报错。此时你会尝试猜测参数名,比如?id=1、?file=...、?act=...。 - 命中目标 :当你尝试
?act=phpinfo时,页面突然变成了一个巨大的表格,全是 PHP 的配置信息。这就说明:- 代码逻辑里可能写了
if($_GET['act'] == 'phpinfo') { phpinfo(); }。 - 开发者可能是为了调试服务器信息,留下了这个后门。
- 代码逻辑里可能写了
2. 为什么看到 phpinfo 就要找 Flag?(核心考点)
这涉及到一个经典的 CTF 考点:临时文件竞争(Race Condition)。
原理分析
- 当你上传一个文件(比如图片、或者任何文件)到服务器时,PHP 会先把这个文件存到一个临时目录里(比如
/tmp/phpXXXXXX)。 - 然后 PHP 才会去处理它(比如把它移动到正式的图片目录)。
- 关键点 :
phpinfo()页面上,有一个板块叫$_FILES,它会明文显示 你刚刚上传的那个临时文件的完整路径 (例如/tmp/php123456)!
攻击思路
- 如果网站还有一个"文件包含"漏洞(Local File Inclusion, LFI),虽然这个漏洞可能很难利用,找不到包含什么文件。
- 但是,如果你能结合
phpinfo:- 上传文件:先把包含 Flag 或者 Webshell 的文件上传。
- 看路径 :在
phpinfo页面里找到这个文件的临时路径。 - 包含它:利用文件包含漏洞,去包含这个临时文件。
- 执行:因为文件还在临时目录里没被删除,你就可以成功执行它!
3. 为什么直接"Ctrl+F 搜索 FLAG"?(题目特异性)
图片中的 Write-Up 写得比较简单,直接说"Ctrl+F 搜索 FLAG",这有两种可能:
可能性一:Flag 直接写在配置里了(最简单)
有些出题人比较"懒"或者为了降低难度,会把 Flag 直接写在 PHP 的环境变量里,或者某个配置项的值里。
- 操作 :只要打开
phpinfo()页面,Flag 就明晃晃地躺在某一行(比如_ENV变量里),直接搜索就能看到。
可能性二:这是"临时文件竞争"的前置步骤
这个 Write-Up 可能只是解题的第一步。
- 作者的意思是:先确认
tz.php?act=phpinfo是通的。 - 然后利用这个页面来配合后续的上传攻击(虽然截图里没写全,但这通常是这类题目的标准套路)。
总结:为什么会想到这样做?
- 信息收集 :扫到了
tz.php。 - 功能测试 :试出了
act=phpinfo参数。 - 经验直觉 :在 CTF 中,泄露
phpinfo几乎等同于送分 。因为phpinfo包含了:- 绝对路径(你知道文件存在哪了)。
- 环境变量 (Flag 可能藏在
_ENV里)。 - 临时文件路径(配合文件上传打竞争)。
- 已加载模块(寻找反序列化或其他漏洞的利用链)。
所以,一旦看到 phpinfo,老手的条件反射就是:"找路径、找 Flag、找临时文件"。
问题2:没有直接扫描到tz.php怎么办,(看了wp知道是在这个文件)

扫到了js,但是试了一下发现403,

遇到的情况非常典型:在 CTF 比赛中,很多时候并不会直接告诉你文件名,而是需要你通过目录扫描 来发现。你这张截图显示你正在使用 dirsearch 进行扫描,但目前的扫描结果只发现了 /js 目录,并没有找到 tz.php。
这通常是因为你使用的字典太小 或者不够全面。
下面我来帮你分析原因,并给出解决方案。
为什么没扫出来?
仔细看你的命令行输出:
Wordlist size: 12295
- 字典太小:1.2 万条字典对于现代 CTF 来说太少了。现在的靶机通常会把关键文件藏在几千条之后的字典里,或者使用生僻的名字。
- 缺少特定后缀 :虽然你加了
-e php,但如果字典里本身就没有tz这个词,加后缀也没用。
下一步该怎么办?(解决方案)
既然你已经有了 dirsearch 环境,建议尝试以下几种更"暴力"或更"精准"的方法:
换一个大字典(推荐)
不要使用默认的小字典。如果你有 dirsearch 的完整版,尝试使用 big.txt 或者 common.txt。
命令示例:
python dirsearch.py -u [你的靶机URL] -e php -w /path/to/big.txt
如果你没有大字典,可以使用 SecList 项目中的 raft-large-files.txt,这是 CTF 中最常用的字典之一。
针对 CTF 的常用字典
CTF 题目喜欢用特定的命名习惯。你可以专门针对这些习惯进行扫描:
- 调试文件 :
test.php,info.php,debug.php,phpinfo.php - 备份文件 :
index.php.bak,www.zip,backup.rar - 特定关键词 :
flag.php,shell.php,upload.php
你可以手动尝试访问这些常见路径:
在浏览器地址栏直接输入:
https://...challenge.ctf.show/tz.php(既然 WriteUp 说了,直接试一下也好,防止扫漏)https://...challenge.ctf.show/phpinfo.phphttps://...challenge.ctf.show/info.php
使用更高级的扫描参数
你可以增加扫描的深度和线程,让它扫得更彻底:
命令示例:
# -t 50: 增加线程到50
# --random-agents: 随机User-Agent,防止被WAF拦截
# -e php,txt,bak,zip: 增加后缀扫描
python dirsearch.py -u [你的靶机URL] -e php,txt,bak,zip -t 50 --random-agents
既然 WriteUp 都给你了,直接看源码!
如果扫描实在太慢,还有一个"作弊"的方法:
- 查看网页源码:在靶机首页,右键 -> 查看网页源码。
- 寻找注释 :有时候出题人会直接在 HTML 注释里写
<!-- tz.php is here -->或者<!-- 提示:tz.php -->。 - 检查 JS 文件 :你扫到了一个
/js/目录。进去看看里面的.js文件,有时候 JS 代码里会包含跳转逻辑或者 API 地址,比如window.location.href="tz.php"。
总结
你现在的思路是对的(用 dirsearch),只是工具没用好。
建议立刻执行的操作:
- 手动访问 :既然你已经看到了 WriteUp 说
tz.php,直接在浏览器访问https://[靶机地址]/tz.php验证一下是否存在。 - 如果不存在:说明 WriteUp 对应的环境和你的环境不一样,继续用更大的字典扫描。
- 如果存在 :那就按照 WriteUp 的提示,访问
tz.php?act=phpinfo。
如果 WriteUp 里的 tz.php 你访问 404,那说明这道题可能不是考 phpinfo,而是考别的。你需要重新审视题目描述或者扫描出来的 /js/ 目录。
问题3:可偷懒的办法
既然提示已经明确是"探针",那我们的搜索策略就得变一变了。
在 Web 安全领域,"探针" 通常指代一种特定的 PHP 管理工具------"PHP 探针" (最常见的是 Tianxing Probe 或 Yahei Probe)。
出题人既然给了这个提示,说明 tz.php 很可能不是一个随意命名的文件,而是**"探针"**的缩写或者特定文件名。
你可以尝试以下几个基于"探针"关键词的扫描方向:
尝试"探针"的拼音或英文缩写
既然提示是"探针",文件名很可能是拼音首字母或英文单词。
- tz.php:这是最直接的猜测,"探针"的拼音首字母。虽然你之前没扫出来,但建议手动直接访问一下,确保万无一失。
- tan.php:拼音全拼。
- zhen.php:拼音全拼。
- probe.php:"探针"的英文。
- phpinfo.php :很多探针其实就是封装好的
phpinfo(),或者出题人直接用这个名字。 - info.php:常见的系统信息文件。
尝试常见的"PHP 探针"文件名
很多 CTF 题目会直接复用网络上现成的 PHP 探针脚本。这些脚本通常有固定的文件名:
- p.php:很多精简版探针喜欢用单个字母。
- t.php:同上,"t"代表"探"。
- admin.php:探针常用于管理,可能藏在后台入口。
- test.php:探针常用于测试环境。
尝试"探针"相关的目录
有时候探针不会直接放在根目录,而是放在一个特定的文件夹里。
- /probe/
- /tz/
- /test/
- /admin/
终极方案:直接用 WriteUp 里的线索
既然你手里已经有了那张 WriteUp 的截图,上面明明白白写着 tz.php?act=phpinfo,最直接的办法就是直接在浏览器里访问这个地址。
不要纠结为什么没扫出来,CTF 比赛中,有时候字典扫描会因为网络波动、字典不全、或者出题人设置了反扫描机制而漏掉关键文件。既然提示已经给到了"探针",并且 WriteUp 也证实了文件名,直接利用这个线索才是最高效的解题方式。
操作建议:
在浏览器地址栏输入:https://dafac98d-331c-42b2-a7bd-f59073c79c2a.challenge.ctf.show/tz.php
如果页面返回了"404 Not Found",那说明文件名可能不是 tz.php,你需要回到上面的第 1、2、3 点继续尝试。但如果页面有反应(哪怕是报错),那你就找对地方了!
CDN穿透
题目提示:透过重重缓存,查找到ctfer.com的真实IP,提交 flag{IP地址}
题目坏了,就不用讲了
js敏感信息泄露
题目提示:不要着急,休息,休息一会儿,玩101分给你flag
其实这题就看你能不能看懂哪些是异常的,这些异常代码是用什么编码的,步骤没有很多,不算难
问题1:怎么看出来是unicode的
其实识别起来非常简单,只要看到 \u 开头,后面紧跟 4 个十六进制字符(0-9, a-f)的格式,那就是 Unicode 编码。
比如你看到的代码可能是这样的:
var _0x1234 = ['\u6211\u662f\u4e00\u4e2a\u65d7\u8230\u8230'];
🕵️ 为什么能一眼认出来?
独特的"身份证":\u
- 在 JavaScript(以及 Java、Python 等很多语言)中,
\u是告诉计算机:"嘿,后面这四个字符不是一个普通的字母,而是一个 Unicode 字符编码"。 - 只要看到
\u,99% 的情况下就是 Unicode。
固定长度:4 位数字
- 标准的 Unicode 转义序列通常是 4 位十六进制数。
- 例如:
\u0041代表 'A',\u4e2d代表 '中'。 - 如果你看到一串像
\uXXXX\uXXXX\uXXXX这样重复出现的结构,那绝对是编码过的字符串。
上下文线索:奇怪的变量名
- 在你截图的
Flappy_js.js这种文件里,通常会出现类似_0x1234这样的变量名,配合[]数组,里面装着一堆\u开头的乱码。 - 这是典型的 JS 混淆(Obfuscation) 特征。出题人为了让你看不懂代码逻辑,把关键的字符串(比如 Flag、提示信息、URL)都转成了 Unicode。
🔍 举个栗子
假设你在代码里看到这一段:
alert("\u4f60\u627e\u5230\u6211\u4e86\uff01");
怎么判断:
- 看到双引号
"",说明里面是字符串。 - 看到
\u,确认是 Unicode。 - 看到
\u4f60-> 查表或解码 -> "你" - 看到
\u627e-> 查表或解码 -> "找" - ...以此类推。
结论:
只要看到 \u 加上四个数字/字母,直接认定它是 Unicode 编码,然后丢进解码器或者浏览器控制台(Console)里还原即可。
前端密钥泄露
题目提示:密钥什么的,就不要放在前端了
问题1:怎么看出来是aes加密
判断数据是否经过 AES 加密,通常不是靠单一的特征,而是像侦探破案一样,结合代码特征 、数据特征 和行为特征来综合推断。
以下是几种快速识别 AES 加密的方法,从易到难:
1. 代码层面:寻找"指纹" (最直接)
如果你能看到 JavaScript 或后端代码,这是最准确的方法。AES 的实现离不开特定的库和参数,这些就是它的"指纹"。
-
搜索关键词 :在代码中搜索
AES、CryptoJS、Cipher、encrypt、decrypt等关键词。 -
识别库的调用 :很多 Web 应用使用
CryptoJS库。如果你看到类似下面的代码,基本可以断定是 AES:// 典型的 CryptoJS AES 加密调用 var encrypted = CryptoJS.AES.encrypt(明文, 密钥, { iv: 初始化向量, mode: 模式, padding: 填充方式 });这段代码几乎就是 AES 加密的"身份证"。
-
查看关键参数 :AES 加密通常需要三个核心要素,如果在代码中找到它们被一起使用,也能高度怀疑是 AES:
- 密钥 (Key):长度通常是 16、24 或 32 字节(对应 AES-128, AES-192, AES-256)。
- 初始化向量 (IV):长度通常是 16 字节,用于增加加密的随机性。
- 加密模式 (Mode) :如
CBC、ECB等。 - 填充方式 (Padding) :如
Pkcs7、ZeroPadding等。
2. 数据层面:分析密文"长相" (初步判断)
如果你只能看到加密后的数据(密文),可以通过它的"长相"来猜测。
- 检查字符集 :AES 加密后的原始数据是二进制乱码,为了方便在网络上传输,通常会进行 Base64 编码 。所以,如果你看到的密文只包含
A-Z,a-z,0-9,+,/,=这些字符,它很可能是 Base64 编码后的结果,而原始数据可能就是 AES 密文。 - 检查长度 :AES 是一种分组加密算法,它会把数据切成固定大小的块(16 字节)进行处理。因此,解密前的原始密文长度一定是 16 字节的整数倍 。
- 如果密文是 Base64 格式,它的长度会是 4 的倍数。
- 这是一个非常强的线索。如果一个 Base64 字符串的长度符合这个规律,它是 AES 加密结果的可能性就很大。
3. 行为层面:观察加密"习性" (辅助验证)
通过观察数据在不同情况下的变化,也能发现 AES 的踪迹。
- 随机性测试 :使用相同的密钥,用不同的初始化向量 (IV) 对同一段明文进行加密。如果每次生成的密文都完全不同,这符合 AES 在 CBC 等模式下的特征(因为 IV 引入了随机性)。
- 对比其他算法 :
- 与 RSA 对比:RSA 是非对称加密,其密文长度通常与密钥长度直接相关(例如 2048 位的 RSA 密钥生成的密文固定为 256 字节),而 AES 的密文长度会随着明文长度的增加而变长。
- 与哈希对比:MD5、SHA 等哈希算法生成的摘要长度是固定的(如 MD5 永远是 32 个十六进制字符),而 AES 密文长度是可变的。
总结
判断是否为 AES 加密,可以遵循以下步骤:
- 首选 :查看源代码,寻找
CryptoJS.AES等明确的库调用和key、iv等参数。 - 次选:分析密文,看它是否是 Base64 格式,并且长度是否符合 16 字节分组的规律。
- 辅助:通过改变输入观察输出变化,来验证其是否符合 AES 的行为特征。
问题2:为什么会想到抓包改post数据
简单来说,之所以要抓包,是因为**"登录框"只是冰山一角,真正的线索藏在水面下的"网络请求"。**
以下是三个核心理由,告诉你为什么在这个场景下必须想到抓包:
🕵️♂️ 题目标题的直接暗示
题目叫**"前端密钥泄露"**。
- 前端:意味着代码在浏览器里。
- 泄露:意味着密钥藏得很浅,甚至可能直接写在 JS 里。
- 推导 :既然密钥在前端,那么前端拿到密钥后通常会做什么?加密用户输入的数据。
- 验证 :你如何知道它加密了?如何看到加密后的结果?必须通过抓包查看发送出去的数据包。
🔍 登录框的"障眼法"
当你看到一个普通的登录框(输入账号密码),直觉是输入 admin/admin 试试。
- 如果你抓包看,发现发送的是明文(
password=123456),那可能是 SQL 注入。 - 但是 ,如果你抓包发现发送的是一长串乱码 (就像你提供的那个
a599ac...),这立刻告诉你:"前端 JS 对密码进行了加密!"
🔑 "密钥"通常藏在请求逻辑中
你说"抓的是网页按提交时候的",这一步非常关键。
- 当你点击"提交"按钮时,浏览器会执行一段 JavaScript 代码。
- 这段代码通常会:
- 获取你输入的密码。
- 读取硬编码在前端的密钥(这就是题目说的"泄露")。
- 用 AES 或其他算法加密。
- 发送 POST 请求。
通过抓包,你不仅能看到加密后的密文,更重要的是,你可以在" Sources"(源代码)或"Network"(网络)面板里,找到那个发起请求的 JS 文件。
📌 总结一下解题思路
- 看标题:"前端密钥泄露" -> 密码肯定被前端 JS 处理了。
- 看现象:随便输个密码,点击登录。
- 抓包验证 :发现密码变成了一长串哈希值(
a599ac...)。这说明有加密。 - 找密钥 :既然加密发生在前端,密钥一定在 JS 代码里 。此时你应该去查看加载的 JS 文件(比如之前的
Flappy_js.js),在里面搜索key、AES、encrypt,就能找到出题人留下的密钥。 - 解密/伪造 :拿到密钥,你就可以自己写脚本加密
admin的密码,或者如果题目设计简单,直接把抓到的包里的用户名改成admin放包(有些题目只校验密文是否合法,或者后端有默认密码)。
一句话总结:
抓包是为了确认数据是否被加密 ,以及定位负责加密的那段前端代码,从而找到那个"泄露的密钥"。
数据库恶意下载
题目提示:mdb文件是早期asp+access构架的数据库文件,文件泄露相当于数据库被脱裤了。
问题1:mdb文件怎么打开
要打开 .mdb 文件(这是 Microsoft Access 2003 及更早版本的数据库格式),有多种方法可供选择,取决于你的操作系统和具体需求。
💻 在 Windows 系统上
Windows 平台的选择最多,从官方软件到轻量级工具都有。
1. 使用 Microsoft Access (官方首选)
这是最直接、功能最完整的方法。如果你的电脑安装了 Microsoft Office 套件中的 Access,直接双击文件或在 Access 中通过"文件">"打开"来加载即可。
2. 使用轻量级第三方工具 (无需安装 Access)
如果你没有安装 Access,或者只是想快速查看、编辑数据,这些免费工具非常方便:
- 数据库简易编辑器 : 一款国产的免费软件,无需安装 Access 即可对
.mdb文件进行查看、编辑、查询和修改,体积小巧,支持中文。 - MDB Viewer Plus: 一款免费的便携式工具,无需安装,可以直接打开并编辑 MDB 文件,非常适合临时使用。
3. 使用 Excel 导入数据
Excel 可以读取 MDB 文件中的数据表。
- 打开 Excel,进入"数据"选项卡。
- 选择"获取数据"或"从其他来源",然后选择"从 Microsoft Access 数据库"。
- 按照向导选择你的
.mdb文件,即可将数据导入到 Excel 表格中。
🍎 在 macOS 系统上
macOS 无法直接运行 Microsoft Access,但有专门的查看工具。
- MDB ACCDB Viewer: 这是 App Store 上的一款应用,专门用于在 Mac 上打开和查看 MDB 及更新的 ACCDB 格式文件。它支持查看、搜索和导出数据,但无法修改数据库或运行查询。
🐧 跨平台方案 (Windows / macOS / Linux)
如果你需要跨平台使用,开源的办公套件是不错的选择。
- LibreOffice Base / Apache OpenOffice Base: 这两款免费的开源办公套件中的数据库组件(Base)都可以连接并打开 MDB 文件,提供类似 Access 的管理功能。
🛠️ 其他高级方法
在线工具
如果你不想安装任何软件,可以使用在线文件转换工具(如 AConvert、Convertio 等)将 .mdb 文件转换为 .csv 或 .xlsx 格式,然后用 Excel 或记事本打开。
注意 :在线工具需要上传文件,切勿用于处理包含敏感或个人隐私信息的数据库。
编程语言
对于开发者,可以使用 Python (pyodbc, pandas)、Java (JDBC)、C# (OleDb) 等编程语言连接并操作 MDB 文件,实现自动化处理。
📌 方法总结
| 方法 | 适用平台 | 优点 | 缺点 |
|---|---|---|---|
| Microsoft Access | Windows | 功能最全,原生支持 | 需付费安装 Office |
| 数据库简易编辑器 | Windows | 免费、轻量、免安装 | 功能相对基础 |
| MDB ACCDB Viewer | macOS | Mac 上方便的查看工具 | 只能查看,不能编辑 |
| LibreOffice Base | 跨平台 | 免费、开源、功能较强 | 配置可能稍复杂 |
| Excel 导入 | Windows | 适合数据分析 | 只能导入数据,无法管理数据库结构 |