Challenge
在本机或公网服务器搭建 HTTP
服务器,从外部可访问,提供指定路径和内容的文件。WeChall
会从你登录时的来源 IP 发起回调验证。
挑战页面会给出具体的参数(每个 session 不同):
- URL 路径:
http://<IP>:<port>/<USER>/<USER>.html
- 文件内容:
My name is <USER> and iChall.(精确字节数)
- 字节数要求精确,不能多换行符
Solution
核心问题: WeChall 根据你登录时的来源 IP 发起回调验证。如果你的机器在
NAT/VPN 后面没有公网 IP,就无法直接验证。
解决方案: 在一台有公网 IP 的服务器上(VPS)搭建 Web
服务,从该服务器登录 WeChall 并提交。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
| mkdir -p /tmp/<USER> echo -n 'My name is <USER> and iChall.' > /tmp/<USER>/<USER>.html
cd /tmp && python3 -m http.server <PORT> &
python3 -c " import urllib.request, urllib.parse, http.cookiejar
cj = http.cookiejar.MozillaCookieJar() opener = urllib.request.build_opener(urllib.request.HTTPCookieProcessor(cj)) opener.addheaders = [('User-Agent', 'Mozilla/5.0')]
# Login (填入自己的 WeChall 账号) opener.open('https://www.wechall.net/en/login', timeout=30) data = urllib.parse.urlencode({'username':'<WC_USER>','password':'<WC_PASS>','login':'Login'}).encode() opener.open(urllib.request.Request('https://www.wechall.net/en/login', data=data), timeout=30)
# Submit port data = urllib.parse.urlencode({'port':'<PORT>','go':'I have set it up. Please check my server.'}).encode() opener.open(urllib.request.Request('https://www.wechall.net/en/challenge/training/www/basic/index.php', data=data), timeout=30) "
|