• ssrf漏洞基础


    ssrf server-side request forgery
    服务端请求伪造 , 由服务器发起请求,服务器提供了向其他服务器索取数据的功能,索取数据的服务器未
    对索取主机、索取资源进行限制;
    输入 url 访问站点 xxx.com------------ xxx.com 接收请求后 -------- xx2.com 发送索取数据请求
    csrf&ssrf: 用户为受害者 & 用户为攻击者
    php 中常见于 curl_exec file-get-content 函数使用不当
    ssrf 与协议:
    php
    function curl ( $url ){
    $ch = curl_init ();
    curl_setopt ( $ch , CURLOPT_URL , $url );
    curl_setopt ( $ch , CURLOPT_HEADER , 0 );
    curl_exec ( $ch );
    curl_close ( $ch );
    }
    @$url = $_GET [ 'url' ];
    curl ( $url );
    ?>
    通过 curl 获取资源
    url= 任意网站 url
    url= 访问自身的敏感文件
    读取文件 file:// 绝对路径
    探测本地端口 http:// dict://
    gopher 协议与 ssrf
    使用限制
    php>5.3 curl 低版本无法使用, java jdk<1.7
    查看自己的 web 服务器是否支持 gopher 协议:
    gopher // 协议格式
    gopher://:/_ 数据 注 :_ 可被除了 $ # 等特殊字符以外的任意字符替
    gopher 默认端口 70
    发送 GET/POST 请求时对特殊符号需要 url 编码
    gopher 协议发送 GET 请求数据包
    get.php 源码如下
    对数据包进行 url 编码
    http 数据包中,需要 %0d%0a 来分隔每一行
    gopher 协议发送 POST 请求数据包
    post 源码如下
    注: post 请求需要请求头中的 content-type application/x-www-form-urlencoded
    请求体和请求头之间需要两组 %0d%0a
    gopher 协议结合 ssrf 漏洞时要对特殊字符等进行二次 url 编码
    二次 url
    %25%34%37%25%34%35%25%35%34%25%32%30%25%32%66%25%36%37%25%36%35%25%37%34%25%32%6
    5%25%37%30%25%36%38%25%37%30%25%33%66%25%36%31%25%33%64%25%33%31%25%33%32%25%33%
    33%25%33%34%25%33%34%25%33%34%25%33%35%25%33%35%25%33%35%25%33%35%25%33%35%25%33
    %35%25%33%35%25%33%35%25%33%35%25%33%35%25%33%35%25%33%35%25%33%35%25%32%30%25%3
    4%38%25%35%34%25%35%34%25%35%30%25%32%66%25%33%31%25%32%65%25%33%31%25%30%64%25%
    30%61%25%34%38%25%36%66%25%37%33%25%37%34%25%33%61%25%32%30%25%33%31%25%33%39%25
    %33%32%25%32%65%25%33%31%25%33%36%25%33%38%25%32%65%25%33%31%25%33%30%25%32%65%2
    5%33%31%25%33%32%25%33%38%25%30%64%25%30%61
    一次 url
    %47%45%54%20%2f%67%65%74%2e%70%68%70%3f%61%3d%31%32%33%34%34%34%35%35%35%35%35%3
    5%35%35%35%35%35%35%35%20%48%54%54%50%2f%31%2e%31%0d%0a%48%6f%73%74%3a%20%31%39%
    32%2e%31%36%38%2e%31%30%2e%31%32%38%0d%0a
    原始数据
    GET /get.php ?a = 1234445555555555555 HTTP/1.1
    Host: 192 .168.10.128
    第一层 url 会在漏洞服务端解析,第二层 url 则在内网的 web 服务器中解析
  • 相关阅读:
    部署Django报错-requires SQLite 3.8.3 or higher
    【C++面向对象侯捷】2.头文件与类的声明
    Docker部署单节点Kafka
    Cracking the Safes之Linux系统下gdb调试
    Flutter快学快用16 布局设计:如何将 Flutter 布局设计沉淀为理论规范
    95-Java的对象序列化、反序列化
    C++学习第二十八天----引用变量的特别之处
    YMatrix 5.0 与天翼云完成产品兼容性认证
    短信验证码接口风险分析
    计算机网络的故事——HTTP首部
  • 原文地址:https://blog.csdn.net/hakksjss/article/details/138106386