Webhacking.kr old-37
Challenge
Redirect the flag-bearing request from the server to a listener under your control.
将携带 flag 的服务端请求重定向到可控的监听端点。
1 | https://webhacking.kr/challenge/web-18/ |
Solution
服务端先创建 tmp/tmp-<time>,写入
127.0.0.1,再根据上传文件名创建同名文件并写入客户端地址。随后服务端从
tmp/tmp-<time> 读取 host,并把 flag
放入请求路径发送到该 host 的 7777 端口。
上传文件名需要与服务端当前秒生成的 tmp/tmp-<time>
对齐,覆盖发生在服务端读取 host
之前。上传请求和监听器应使用同一公网可达地址;监听 7777
后,接收到的请求路径包含 flag。
1 | #!/usr/bin/env python3 |
题目服务端不会读取上传内容,而是把它看到的 REMOTE_ADDR
写入临时文件。因此监听端点必须是题目服务端可访问的地址;常见做法是在路由器上把公网
7777 端口转发到本机,并从公网可达环境发起请求。仅在本机监听
127.0.0.1:7777 不足以完成利用。
1 | $ nc -nvlp 7777 |
Host 头取自服务端读取的临时文件,flag
位于请求路径中。