本文将介绍通过破解反向代理请求处理方式,实现流量从内部服务器重定向到个人服务器。
在此之前,介绍一下正向代理与反向代理。
正向代理与反向代理
1、正向代理,意思是一个位于客户端和原始服务器之间的服务器,为了从原始服务器取得内容,客户端向代理发送一个请求并指定目标(原始服务器),然后代理向原始服务器转交请求并将获得的内容返回给客户端。客户端才能使用正向代理。
2、反向代理服务器位于用户与目标服务器之间,但是对于用户而言,反向代理服务器就相当于目标服务器,即用户直接访问反向代理服务器就可以获得目标服务器的资源。同时,用户不需要知道目标服务器的地址,也无须在用户端作任何设定。
3、正向代理其实是客户端的代理,帮助客户端访问其无法访问的服务器资源。反向代理则是服务器的代理,帮助服务器做负载均衡,安全防护等。
4、反向代理服务器没有保存任何网页的真实数据,所有的静态网页或者 CGI 程序,都保存在内部的 Web 服务器上。通过反向代理,我们可以设置访问规则,例如基于 IP 地址、地理位置、用户代理等信息,来限制或者拒绝特定客户端的访问。
5、常见的反向代理有 Nginx、Apache、HAProxy 等。
那么,当解析器存在正则表达式和逻辑错误时,我们就能绕过代理服务器,实现流量从内部服务器重定向到个人服务器。
正文
在浏览一个网站的请求时,我发现了一个看起来很有趣的 API 端点,所以我使用以下一些常见的路径遍历 payload 运行了 ffuf(一款快速模糊测试工具)。
/experience/..;/
/experience/../
/experience/..%2f
/experience/%2e%2e%2f
几乎所有的路径都返回了 403 错误,但 /experience/..%2f 返回了 404 错误。
这是一个很好的指标,表明我们可能正在接近 API 的内部根源。
为了进一步测试,我返回到上一级目录看看是否有任何变化:
返回了400,也知道到了服务器类型为 nginx。
通过扫描,发现了 /api 路径和一个文件 dashboard.html。
尝试访问路径 /experience/..%2fdashboard.html,
通过回显确认了它为 NGINX Plus API:
为了确认这是内部资源,我需要验证 dashboard.html 和 /api 是否在 Web 根目录下是不可访问的。
访问 http://example.com/dashboard.html 和 http://example.com/api,均回显403,所以这意味着我们成功访问了内部资源(即使不可见)。
虽然 dashboard.html 上没有太多内容,但我仍然查看了找到的 /api 路径,发现其中包含了一些 JSON 格式的数字。我查阅了 Nginx 的 API 文档,并确定了这些数字代表 API 的不同版本。
Nginx API文档
http://nginx.org/en/docs/http/ngx_http_api_module.html#example
访问其中一个版本后,发现了一些非常有趣的内容,可以实现对不同路径的访问:
/experience/..%2f/api/7/
/experience/..%2f/api/7/nginx
/experience/..%2f/api/7/connections
/experience/..%2f/api/7/http/requests
/experience/..%2f/api/7/http/server_zones/server_backend
/experience/..%2f/api/7/http/caches/cache_backend
/experience/..%2f/api/7/http/upstreams/backend
/experience/..%2f/api/7/http/upstreams/backend/servers/
/experience/..%2f/api/7/http/upstreams/backend/servers/1
/experience/..%2f/api/7/http/keyvals/one?key=arg1
/experience/..%2f/api/7/stream/
/experience/..%2f/api/7/stream/server_zones/server_backend
/experience/..%2f/api/7/stream/upstreams/
/experience/..%2f/api/7/stream/upstreams/backend
/experience/..%2f/api/7/stream/upstreams/backend/servers/1
为了扩大攻击范围,我决定尝试向 API 写入数据。经过仔细研究 API 文档,我发现很多路径支持 POST 和 GET 请求,但文档中提到默认情况下禁用了对 API 的写入操作。
尽管如此,我并没有放弃,继续尝试其他参数,最终成功创建了自己的上游并向 API 写入数据。
POC:
Response:
最终,我们可以将流量重新路由到自己的服务器,并导致内部服务中断。
玲珑安全免费公开课网址:
https://space.bilibili.com/602205041
玲珑安全QQ交流群:191400300
原文始发于微信公众号(芳华绝代安全团队):破解反向代理实现重定向服务器流量
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论