网页读取器

可以注意到白名单 whitelist_hostname 有题目所给的两个样例。

URI 的语法(摘自官方题解)

scheme:[//authority]path[?query][#fragment]

其中用 [] 围住的是可选的。然后我们来看一下各部分:

  • 协议 (scheme):访问资源使用的协议,比如说 http, https 之类的。

  • 来源 (authority):来源中包含了主机名,和可选的用户信息和端口号,比如 www.ustc.edu.cn, admin:admin@www.example.com:2333(使用用户名为 admin,密码为 admin,访问 www.example.com 的 2333 端口获取资源)。

  • 路径 (path):比如说 /cgi-bin, /a/b/c/d/e/f/g 等,有等级 (hierarchical) 关系。

  • 查询 (query):没有等级 (non-hierarchical) 关系的数据。一般来说,查询中的参数会被网站的后端获取到,然后进行对应的处理,比如 ?q=keyword,?a=1&b=2。

  • 片段 (fragment):指向一个更低级别的资源,例如 #Examples,浏览器访问时会滚动到 id 为 Examples 的标签。如果写过单页面应用 (SPA) 的同学可能会知道,一些框架处理路由时使用 hash 模式,这里的 hash 就是片段开头的 #。

让 check_hostname 解释出主机名为 example.com 的同时,让 requests.get() 实际访问我们想要的地址。

http://web1/flag#@example.com

检验时忽略掉了@前的所有内容,但实际上访问的是http://web1/flag

输入后获得flag。

Last updated