用户
搜索
  • TA的每日心情
    开心
    2021-4-12 18:32
  • 签到天数: 177 天

    连续签到: 4 天

    [LV.7]常住居民III

    i春秋作家

    Rank: 7Rank: 7Rank: 7

    13

    主题

    42

    帖子

    1928

    魔法币
    收听
    0
    粉丝
    4
    注册时间
    2018-6-2

    i春秋签约作者

    发表于 2021-3-20 13:28:02 111262
    本帖最后由 dll_s 于 2021-3-20 13:30 编辑

    0x60 Burpsuite练兵场-SSRF(一)


    SSRF(Server-Side Request Forgery,服务器端请求伪造),攻击者通过诱导服务器端应用程序向攻击者选择的任意域发出HTTP请求以进行攻击。在SSRF攻击中,攻击者可以促使服务器连接其自身,或组织基础结构内的其他基于web的服务,或外部第三方系统。SSRF攻击常常利用信任关系从易受攻击的应用程序升级攻击,并执行未经授权的操作。这些信任关系可能存在于服务器本身的关系中,或者存在于同一组织中的其他后端系统的关系中。

    实验内容

    实验一:针对服务器本身的SSRF攻击

    实验提示:该应用程序存在一个库存检索功能,可通过更改查询URL访问具有权限控制的用户管理界面(位于http://localhost/admin)

    实验要求:删除carlos用户

    img

    考虑这样一个场景:有一个应用商城网站,用户可以在上面查询某一商店中的商品是否有存货。为了实现这一查询功能,应用程序需要发送特定查询参数到后端的REST APIs(可以简单的理解为查询接口),它的具体实现为通过前端的HTTP请求将URL传递给相关后端API端点来完成这一查询过程。当用户查询某一商品时,浏览器会构造这一一个POST请求

    POST /product/stock HTTP/1.0
    Content-Type: application/x-www-form-urlencoded
    Content-Length: 118
    
    stockApi=http://stock.weliketoshop.net:8080/product/stock/check%3FproductId%3D6%26storeId%3D1

    服务器会向指定的URL中发送查询请求,检索库存状态并将结果返回给用户

    在这种情况下,攻击者就可以尝试构造一个ssrf攻击请求如下

    POST /product/stock HTTP/1.0
    Content-Type: application/x-www-form-urlencoded
    Content-Length: 118
    
    stockApi=http://localhost/admin

    在这种情况下,服务器会请求本地的/admin页面内容并返回给用户,而通常情况下这一页面是存在权限控制的,攻击者通过这种针对服务器本身的SSRF攻击,使得服务器认为这一请求似乎来自一个受信任的位置,就成功绕过一访问控制措施

    至于为什么服务器会隐性地信任来自本地机器的请求,有以下几种原因:

    • 访问控制检查可能在应用程序服务器之前的另一个组件中实现,以此导致当连接直接返回到服务器本身时检查将被绕过
    • 出于灾难恢复的目的,应用程序可能允许管理员访问来自本地机器的任何用户,而无需登录。这为管理员在丢失凭证时恢复系统提供了一种方法。这里的假设是,只有完全可信的用户才会直接来自服务器本身。
    • 管理界面可能正在监听与主应用程序不同的端口号,因此用户可能无法直接访问。

    这种类型的信任关系(来自本地机器的请求的处理方式与普通请求不同)往往使SSRF成为一个关键的漏洞

    回到实验,任意点击物品,寻找库存检索功能,点击按钮后拦截报文进行分析

    img

    将报文发送到Repeater模块,修改POST数据中的URL为http://localhost/admin,发送后就成功返回了用户管理界面信息

    img

    实验需要我们删除carlos账户,将数据改为

    stockApi=http://localhost/admin/delete?username=carlos

    发送即可完成实验

    img

    实验二:针对其他后端系统的SSRF攻击

    实验提示:该应用程序存在一个库存检索功能,会从内部系统中检索数据

    实验要求:使用SSRF扫描192.168.0.X IP段的8080接口,并删除carlos用户

    image-20210318110018491

    与服务器端请求伪造一起经常出现的另一种信任关系类型是,应用程序服务器能够与用户不能直接访问的其他后端系统交互,这些系统通常有不可路由的私有IP地址。由于后端系统通常受到网络拓扑结构的保护,因此它们的安全性通常较弱。在许多情况下,内部后端系统包含敏感功能,任何能够与系统交互的人都可以无需身份验证就可以访问这些功能。

    假设后端服务器的私网IP为https://192.168.0.68/admin,攻击者就可以使用这样的POST请求执行SSRF攻击

    POST /product/stock HTTP/1.0
    Content-Type: application/x-www-form-urlencoded
    Content-Length: 118
    
    stockApi=http://192.168.0.68/admin

    回到实验,同样关注关键报文并发送到Repeater模块

    img

    借助Decoder Improved方便编码转换

    img

    配置Intruder对192.168.0.X 段进行扫描

    img

    img

    执行Intruder attack,确定用户管理界面所位于的服务器IP地址

    img

    发送到Repeater,修改post数据并发送以删除carlos账户

    img

    绕过常见的SSRF防御

    实验三:黑名单绕过

    实验提示:该应用程序存在一个库存检索功能,会从内部系统中检索数据,同时存在简单的SSRF防范措施

    实验要求:访问http://localhost/admin并删除carlos用户

    一些应用程序会阻止包含主机名(如127.0.0.1和localhost)或敏感url(如/admin)的输入。在这种情况下,通常可以使用各种技术绕过过滤器:

    • 使用127.0.0.1的替代方式如2130706433(十进制),017700000001(八进制)或者127.1
    • 注册一个解析到127.0.0.1的域名,然后用这一域名进行ssrf攻击
    • 使用URL编码或大小写变化绕过字符串屏蔽

    回到实验,同样拦截关键报文并发送到Repeater模块,尝试简单修改并发送会发现失效了

    img

    使用127.1绕过ssrf防御

    img

    将admin中的a使用双次URL编码绕过ssrf防御

    img

    修改post数据,删除carlos账户完成实验

    img

    实验四:白名单绕过

    实验提示:该应用程序存在一个库存检索功能,会从内部系统中检索数据,且部署了SSRF防御机制

    实验要求:访问http://localhost/admin并删除carlos用户

    img

    有些应用程序只允许匹配以白名单开头或包含白名单的输入。在这种情况下,有时可以利用URL解析中的不一致性来绕过筛选器。URL规范包含了许多在实现URL的特别解析和验证时容易被忽略的特性:

    • 使用@字符将凭证嵌入到主机名之前的URL中例如:https://expected-host@evil-host
    • 使用#字符表示URL片段例如:https://evil-host#expected-host
    • 利用DNS命名层次结构将所需的输入放置到被自己所控制的域名之中(作为子域)例如:https://expected-host.evil-host
    • 对URL进行编码以混淆URL解析代码,如果过滤器中的解析代码和后端的解析代码逻辑不同则此种方式特别有效
    • 对以上技术组合使用

    回到实验,拦截关键报文并发送到Repeater模块,解码一下post数据中的URL

    img

    这一API的URL关键信息为stock.weliketoshop.net:8080

    尝试使用http://127.0.0.1/会发现失败了

    img

    使用http://username@stock.weliketoshop.net/查看应用程序是否支持凭据

    img

    成功返回,可知应用程序支持@解析,尝试使用#注释凭据内容(对#进行二次URL编码以绕过检测)

    http://127.0.0.1%2523@stock.weliketoshop.net/admin

    img

    成功返回用户界面,编辑URL删除carlos账户即可完成实验

    img

    最新的ssrf绕过技巧:https://portswigger.net/research/top-10-web-hacking-techniques-of-2017#1
    PPT:https://www.blackhat.com/docs/us-17/thursday/us-17-Tsai-A-New-Era-Of-SSRF-Exploiting-URL-Parser-In-Trending-Programming-Languages.pdf

    实验五:利用开放重定向绕过SSRF防御

    实验提示:该应用程序存在一个库存检索功能,会从内部系统中检索数据,且使用了严格检测仅允许本地查询

    实验要求:访问位于http://192.168.0.12:8080/admin的用户界面删除carlos账户

    img

    有时利用开放重定向漏洞可以规避ssrf防御检测,假设后端程序严格验证了用户提交的URL以防止ssrf攻击,但是查询API支持重定向,那么就可以构造一个满足过滤条件的重定向URL,使得可以将重定向请求发送到所需的后端目标服务器

    例如,应用程序包含一个开放重定向漏洞,接收的URL如下

    /product/nextProduct?currentProductId=6&path=http://evil-user.net

    重定向到http://evil-user.net

    利用这一重定向漏洞就可以绕过防御构造ssrf攻击请求

    POST /product/stock HTTP/1.0
    Content-Type: application/x-www-form-urlencoded
    Content-Length: 118
    
    stockApi=http://weliketoshop.net/product/nextProduct?currentProductId=6&path=http://192.168.0.68/admin

    此请求包含的数据中前段URL完全符和过滤器要求,因此可以成功接收,之后触发重定向使得攻击者成功向内网服务器发送了请求

    回到实验,通过观察报文可以发现应用程序具有重定向功能

    img

    拦截关键报文,发送到Repeater模块,直接尝试将post数据中的url修改为重定向

    /product/nextProduct?path=http://192.168.0.12:8080/admin

    发送报文返回了用户管理界面

    修改参数,发送报文删除carlos账户即可完成实验

    img

    总结


    这一章节主要介绍了SSRF的一些基础攻击以及绕过技巧,下面给一些有用的payload吧

    基础的SSRF漏洞攻击方法

    http://127.0.0.1:80
    http://127.0.0.1:443
    http://localhost:80
    http://localhost:443
    https://127.0.0.1/
    https://localhost/
    http://[::]:80/
    http://0000::1:80/
    http://[0:0:0:0:0:ffff:127.0.0.1]

    黑白名单绕过防御

    http://0/
    http://127.1
    http://127.0.1
    http://127.0.0.1/%61dmin
    http://127.0.0.1/%2561dmin
    http://ⓔⓧⓐⓜⓟⓛⓔ.ⓒⓞⓜ

    利用开放重定向绕过防御

    http://spoofed.burpcollaborator.net
    http://localtest.me
    http://customer1.app.localhost.my.company.127.0.0.1.nip.io  #nip.io会把ip地址当作dns映射,此条就对应127
    http://mail.ebc.apple.com redirect to 127.0.0.6 == localhost
    http://bugbounty.dod.network redirect to 127.0.0.2 == localhost
    发表于 2021-3-22 10:30:33
    感谢师傅分享
    使用道具 举报 回复
    发新帖
    您需要登录后才可以回帖 登录 | 立即注册