WeChall - Training - No DNS
Challenge
题目要求访问:
1 | https://make.love.not.war.com/challenge/training/net/nodns/etc/hosts.php |
名字叫 No DNS——核心是让请求到达这个域名指向的服务器,而不依赖正常 DNS
流程。域名 make.love.not.war.com 在 WeChall
上是一个虚拟主机,你需要合适的方式把解析指向 WeChall 服务器。
Solution
用 curl --resolve 最干净:只影响这一条请求,不需要改系统
/etc/hosts。
不要在 writeup 中硬编码老 IP。WeChall 的解析 IP 可能变化,运行时动态取当前 IP:
1 | IP=$(dig +short www.wechall.net A | head -n1) |
然后让 curl 对目标域名使用这个 IP:
1 | curl -sk \ |
参数含义:
--resolve HOST:PORT:IP:只为当前 curl 请求手动指定解析结果,不发起 DNS 查询-k:忽略证书校验(证书是 wechall.net 签发的,域名不匹配)-b 'WC=...':携带 WeChall 登录 cookie
等价方法是临时写
/etc/hosts,但这会修改系统状态,完成后需要恢复;优先用
--resolve。
--resolve 在各协议层的影响:
| 层 | 直接连 IP | --resolve |
|---|---|---|
| DNS | 不查 | 不查(被 curl 的映射表劫持) |
| TCP 目标 | 你给的 IP | 你给的 IP |
| TLS SNI | IP(或无) | 原始域名 ✅ |
| HTTP Host | IP | 原始域名 ✅ |
--resolve 只劫持了 DNS 解析入口——修改的是 curl
进程自己的 DNS 缓存表,不是内核协议栈。TCP 层的目标 IP
跟着你的指定走了,但上层的 TLS SNI 和 HTTP Host header
都保持原始域名不变。这正是"No DNS"的精髓:不在 DNS
层面做任何事(域名不存在),但让上层协议以为请求经过了正常解析。
访问成功后页面会返回成功消息,挑战自动标记为 solved。