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
2
3
4
curl -sk \
--resolve "make.love.not.war.com:443:$IP" \
-b 'WC=...' \
'https://make.love.not.war.com/challenge/training/net/nodns/etc/hosts.php'

参数含义:

  • --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。