首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么Portswigger对实验室的解决方案“基于白名单的输入过滤器的SSRF”起作用?

为什么Portswigger对实验室的解决方案“基于白名单的输入过滤器的SSRF”起作用?
EN

Security用户
提问于 2020-03-03 01:45:34
回答 2查看 790关注 0票数 2

练习的网址是:https://portswigger.net/web-security/ssrf/lab-ssrf-with-whitelist-filter

解决办法是:

http://localhost:80%2523@stock.weliketoshop.net/admin/delete?username=carlos

稍微简化一下(没有指定端口):

http://localhost%2523@stock.weliketoshop.net/admin/delete?username=carlos

我们可以简单地集中精力:

http://localhost%2523@stock.weliketoshop.net

为什么凭据组件(@之前的所有内容)被处理得好像@之后的所有东西都是URL片段的一部分一样?在对#字符进行双重编码之前,URL如下所示:

http://localhost#@stock.weliketoshop.net

为什么@甚至是必要的,即使在我们对#进行双重编码之后?为什么http://localhost%2523stock.weliketoshop.net (不是no '@')不能工作?url片段语句是否优先于凭证语句?为什么@会被忽略而支持#呢?

EN

回答 2

Security用户

发布于 2020-03-03 06:24:59

根据RFC 3986的规定:

userinfo子组件可以由用户名和(可选)特定于方案的信息组成,这些信息涉及如何获得访问资源的授权。用户信息(如果存在的话)后面是一个商业标识("@"),将其与主机分隔开来。

分3986部分-3.2.1

票数 1
EN

Security用户

发布于 2021-01-14 23:23:09

我最近玩过这个。SSRF过滤器正在检查参数值是否为具有stock.weliketoshop.net主机名的实际URL。这不是一个简单的字符串检查。这就是为什么如果我们使用http://localhost%2523stock.weliketoshop.net,它会将其视为http://localhost#...而不起作用。

如果添加“@”,则筛选器将看到http://username@stock.weliketoshop.net,这是已接受的主机名。现在,如果我们使用传递过滤器的http://localhost%2523@stock.weliketoshop.net,并且web服务器将其定向到http://localhost#...

神秘的部分是为什么http://localhost%2523@stock.weliketoshop.net/admin工作。看起来还有另一个过滤器从%25开始删除所有内容,直到它看到/并连接起来,这将导致http://localhost/admin。正常的web服务器应该在结束时忽略/admin,因为它在#段之后。

我列举了所有字符,发现%252 f和$253 f也可以工作,哪个是?分别使用。我尝试了http://localhost%252fadmin%2523@stock.weliketoshop.net,它仍然通过过滤器并且更有意义,但是结果是%25之后的所有东西都被剥离了,所以它只属于http://localhost

我的结论是,Portswigger为本教程创建了一个自定义过滤器,它并不完全类似于真实的SSRF过滤器。

票数 0
EN
页面原文内容由Security提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://security.stackexchange.com/questions/226714

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档