首页 > 其他分享 >SSRF(服务器请求伪造)

SSRF(服务器请求伪造)

时间:2024-03-24 21:26:52浏览次数:19  
标签:请求 SSRF url 端口 访问 file 服务器 伪造

相关函数(php)

file_get_contenes()

fsockopen()

curl_exec()

fopen()

发掘漏洞

  • 当一个服务器有可以解析或读取一个url的时候
  • 抓包发现某些参数带有url关键字 可能存在ssrf漏洞
  • 有某个参数的值是http://的链接

原理

  • 由于函数使用不当造成的
    • file_get_contents()
    • fsockopen()
    • curl_exec() 让php可以访问web网页内容
  • 当前服务器通过http协议去获取其他服务器的文件

利用方法

常见利用协议

  • file:// :读取本地文件常用协议

    • ?url=file://c:\windows\system32\drivers\etc\hosts
  • dict:// : 端口扫描常用文件

    • ?url=dict://127.0.0.1:3306

gopher:// :

危害

  • 端口扫描 :
    • 如果A服务器访问B服务器的请求 攻击者可控 把目标地址改为127.0.0.1 就会变成A服务器访问自己 如果访问3306端口 有消息回应 就可以判断3306端口开启
      image.png

image.png

  • 访问内网用户的信息

    • 如果受害者处于内网环境中 可以更改别的设备的ip来查看 别的服务器是否开放了某些端口 如果在10.9.23.100的主机 就可以尝试访问10.9.23.200是否开了80
  • 读取内部文件的内容

    • file://c:\windows\system32\drivers\etc\hosts
    • image.png

防御

  • 因为ssrf漏洞有关键字

    • 请求报文中有url地址为127的
  • 限制协议

    • 只允许HTTP和https请求
  • 限制ip

    • 禁止127.0.0.1 禁止lock host等关键字
    • 避免获取内网数据
  • 限制端口

    • 限制常用的端口 80 443 8080 8090
      • 白名单限制只有80端口可以访问
  • 过滤返回信息

    • 验证远程服务器的请求响应
      • 返回信息中有关键字的都拒绝
  • 统一错误信息

    • 避免用户根据错误信息来判断端口状态
      • 把错误信息都返回到另一个网页 不显示404

防御代码 白名单

explode($delimiter,$string)函数会按照数值截断数据。
- `$delimiter`:分隔符,用于指定在哪些字符处分割字符串。
- `$string`:要分割的字符串。

    $b = explode(".",$URL);
    $a = explode(":",$URL);
    if($a[0]!=="http"&&"https"){
            die("no");
    }else if($b[1]!=="php"){
        die("noo");
    }else{

标签:请求,SSRF,url,端口,访问,file,服务器,伪造
From: https://www.cnblogs.com/XingZin/p/18093067

相关文章

  • CSRF & SSRF
    CSRF&SSRFCSRFCSRF(Cross-SiteRequestForgery)(跨站请求伪造漏洞)原理用户访问网站,网站给用户cookie,此时攻击者给用户发送了一个诱惑链接,链接里有对该网站的访问代码,用户点击攻击者的链接后,触发恶意代码,攻击者就利用用户的cookie,执行了对网站的请求(以接口形式调用请求)......
  • SSRF学习
    形成原因SSRF(服务端请求伪造漏洞)是由于服务端提供了从其他服务器应用(url)获取数据的功能,并把请求的数据返回到前端,但又没有对目标地址做严格过滤与限制,导致攻击者可以传入任意的地址来让后端服务器对其发起请求,导致访问到了不该访问的数据。引起ssrf的函数有几个:函......
  • 补充--关于nginx服务器多个网站如何设置404的问题?
    补充--关于nginx服务器多个网站如何设置404的问题?需求1:设置多个网站404页面为一个都需配置网站的nginx.conf,以上面的多网站为例,404发布目录下,每个的nginx.conf1.知道每个网站的(nginx.conf)配置路径www.it.com/usr/local/nginx/conf/nginx.confbbs.it.com/usr/loc......
  • Windows下安装git服务器
    Windows平台下Git服务器搭建该文章转自:https://www.cnblogs.com/android-joker/p/4513125.html安装和配置Java运行环境1:下载Java运行环境,下载地址:https://www.java.com/zh-CN/download/manual.jsp2:安装jre,配置java环境变量3:右键”计算机”=>"属性"=>"高级系统设置"......
  • 自己编译RustDesk,并将自建ID服务器和key信息写入客户端
    前言:搭建RustDesk编译环境    今天总算是把编译环境给折腾清楚了,编译出来了至少能用,但说不上好用,问题还不少,官方的客户端就是要手工填写ID服务器地址和key才可以用,而且还容易被别人白嫖你搭建的服务器,当然如果拿到你编译后的客户端,也是存在被白嫖的可能。这方面还没......
  • 小程序配置服务器域名
    首先登录小程序,点击左侧的开发管理菜单然后找到服务器域名点击后面的修改按钮在弹框中验证管理员的身份后出现如图所示的界面:修改自己的域名后保存提交即可......
  • 游戏开发:服务器部署监控告警
    线上服务器的监控告警,我们暂且从三个层级上分析;业务层:业务相关的日志告警机制。跟业务设计强相关,比如客户端的业务上行请求数据异常之类的告警,业务上定义日志级别(INFO/WARN/ERROR),输出到指定日志文件并通过业务层逻辑抛出,数据分析的埋点、业务行为相关的辅助日志都在这里实现;一套......
  • 阿里云服务器安装mysql后本地连接失败
    阿里云服务器安装mysql后本地连接失败一、问题描述在阿里云安装mysql后,想在本地电脑用可视化工具连接mysql,但是提示连接失败错误如图所示:二、问题分析1、检查3306端口首先,检查阿里云服务器的安全组是否开放了3306端口可以看到,我已经放行了3306端口。2、检查防火墙我选......
  • 实现通过 Python 检查服务器的 443 端口是否接通
    实现通过Python检查服务器的443端口是否接通importsocketdefcheck_port(host,port):try:#创建socket对象s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)#设置连接超时时间为3秒s.settimeout(3)#连接......
  • 【恒源智享云】在云服务器上安装tensorflow_gpu教程
    在云服务器上安装tensorflow_gpu1.创建实例在恒源智享云中创建新的实例时,可以选择需要使用的框架,并且框架版本和cuda版本、python版本都是对应的:2.新建一个conda虚拟环境condacreate-ntensorflow_gpupython==3.8.0conda指令详见博客:【恒源智享云】conda虚拟环境......