zoukankan      html  css  js  c++  java
  • 4.5 SSRF

    https://book.hacktricks.xyz/pentesting-web/ssrf-server-side-request-forgery

    简介

    原理

    SSRF Server Side Request Forgery,服务端请求伪造。

    通常出现在网站请求 url 资源的情况下。如果服务端对用户传入的 url 未适当检查,就可以使网站服务器请求自身敏感资源或者探测内网内其它机器(探针),或利用可以通过 url 触发的漏洞(利用)。

    即端口扫描、与漏洞利用。

    实际中的限制

    进行端口扫描时,受限于不同编程语言对 url 协议的支持程度与配置情况。详见文末

    例如,php 可禁用 allow_url_fopen ,以禁止对 url 风格的文件的支持。

    如何攻击

    主要是寻找攻击面,然后尝试突破防御,最后进行利用。

    • 攻击面:留意数据包中的 url 参数。可以结合参数名和参数值根据经验判断。

    • 突破常见代码防御,见下文。

    • 进行利用,见下文。

    如何防御

    ssrf 属于输入验证不当,可以从这点进行防御,设定过滤规则良好的正则表达式。

    此外还可以通过禁用某些参数,例如 php 中 allow_url_fopen 等。

    常见防御绕过

    更多 URL 绕过方式

    • 不严谨的 url 检验方式。

    • 更改其它协议。

    • 常见的 本地 ip 替换形式,参考

      # 本地ip 127.0.0.1 的替代形式
      
      127.1
      localhost
      127.127.127.127 # cdir
      0x7f000001      # 16 进制
      2130706433		# 10 进制
      017700000001	# 8 进制
      
    • DNS 解析指向本地 ip ,参考

      # 以下域名进行解析都会返回 127.0.0.1
      
      127.0.2.1.nip.io
      customer1.app.localhost.my.company.127.0.0.1.nip.io
      spoofed.burpcollaborator.net
      
    • dns 重绑定。

      大致原理:当防御机制进行检测时,第一次请求 dns 时,返回正常ip。然后更改 dns 将其重绑定为 127.0.0.1,当代码中第二次请求时,就会返回 127.0.0.1。

      参考 完整技术细节 、可用工具:singularitydnsFookup

    利用手法

    ssrf 利用工具

    端口扫描

    因为 url 格式中有多种协议,可以利用不同的协议进行探测。不同编程语言对 url 协议的支持度不同。

    scheme:[//[user[:password]@]host[:port]][/path][?query][#fragment]
    

    只要不显式 connect refuse ,那么就是 开放端口。

    下表是利用中常见的一些协议,详见 这篇文章

    http://		#获取敏感功能网页(对外不开放),扫描端口
    file://		#获取服务器本地文件
    dict://		#端口扫描
    SFTP://		#端口扫描
    LDAP://		#端口扫描
    Gopher://	#可以构造其它协议请求 参考 https://zhuanlan.zhihu.com/p/112055947
    

    若要探测版本信息,需要符合应用层协议,可以参考 nmap 中 banner 脚本

    应用层协议属于应用程序通讯语法规则,若应用程序收到非法数据包,依据应用程序的处理规则可能进行响应,也可能不会响应。

    漏洞利用

    因为 ssrf 本质是发送 url 请求,所以只能利用可以通过 url 触发的漏洞。例如 Struts2-045

    可以通过 url 触发的漏洞 。云主机、云服务器的 利用方式

    盲 ssrf ,几乎无法利用,只能碰运气。可以用已知的通过 url 利用的漏洞盲打。

    其它

    关于 URL 处,可能也存在 url 重定向漏洞,用于钓鱼攻击。

    不同编程语言支持的不同协议。

    QQ图片20210405223544

  • 相关阅读:
    hibernate对应的annocation版本
    Struts 2 OGNL
    Struts2的Stack Context和ValueStack
    Struts2中的OGNL详解
    struts2中根对象以及ognl .
    在Struts 2中实现IoC
    Struts2的属性驱动与模型驱动的区别
    Struts2的模型驱动
    Java中线程的锁和数据库中的事务隔离级别
    为什么socket编程要用到多线程
  • 原文地址:https://www.cnblogs.com/starrys/p/14660342.html
Copyright © 2011-2022 走看看