IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> PHP知识库 -> 浅析SSRF漏洞 -> 正文阅读

[PHP知识库]浅析SSRF漏洞

一、概念

SSRF(Server-Side Request Forgery:服务器端请求伪造)

SSRF漏洞(服务器端请求伪造):是一种由攻击者构造形成由服务端发起请求的一个安全漏洞。一般情况下,SSRF攻击的目标是从外网无法访问的内部系统。(正是因为它是由服务端发起的,所以它能够请求到与它相连而与外网隔离的内部系统)

我的理解是,正常情况下,我们无法访问内网,或者说无法向内网发送报文,但是ssrf是通过服务器访问内网,由于服务器属于内部系统,那么内网就不会拒绝服务器的请求,从而达到一个访问内网的目的。

正常我们发送请求的过程:
客户端----->服务器(未过滤)------>目标 地址

可以看到,最后发送目标地址的报文是由服务器发出的,倘若服务器对客户端的url不加以过滤处理,就可能造成srrf漏洞

二、ssrf漏洞实例

理解一个漏洞的最快方法就是通过实例取了解它

这里有一个网站,它希望我们通过GET输入其他的网站,从而跳转到我们输入的网页
在这里插入图片描述如果我们输入www.baidu.com,那我们就来到了百度的页面
在这里插入图片描述
倘若我不按规矩走,输入它内网的地址以及文件既127.0.0.1/flag.php,就有可能访问到flag.php里面的内容

在这里插入图片描述这就是一个简单的ssrf漏洞例子

产生漏洞后,产生的危害有
任意访问内网的文件
DOS攻击(请求大文件,始终保持连接占用服务器资源)
攻击web应用等

三、ssrf漏洞产生原因

这里有一个网上大佬总结的ssrf漏洞的图,总结的很详细

在这里插入图片描述
主要谈一下利用方式,主要就是这四种协议

首先这是我搭建的一个网页,它的想法是希望我们输入一个url,从而跳转到那个网页

在这里插入图片描述

下面是后端代码

<?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()可以利用的协议有很多 file,duct,gopher都可以

?url=file://127.0.0.1/1.txt
file协议可以用来读取任意文件

?url=dict://127.0.0.1:8081
dict协议可以查看端口开放情况(可以结合BP爆破端口号)

?gopher://<host>:<port>/<gopher-path>
gopher协议可以反弹shell,也就是通过服务器向内网发送报文

使用dict爆破端口
在这里插入图片描述
通过gopher协议向内网的其他flag.php传送POST数据(甚至可以通过POST上传图片码等文件)
在这里插入图片描述

在gopher协议中,由于是服务器通过curl向内网发生报文,我们需要对gopher-path内容进行两次编码
因为报文内容会在客户端的url上解码一次,服务器通过curl发送报文时解码一次,共两次

同时还要注意编码过程中换行符%0A要全部替换成%0D%0A,其原因时在linux系统里面换行符的url编码是%0A,而windos是%0D0A,国内大部分在线编码器都是转换成%0A

注意
以上的方法全部都是伪协议
伪协议成立的条件还是下面两个函数必须是打开状态,以及版本大于7.3.4

allow_url_include=On
allow_url_fopen=On

关于渗透的方式这里有一个大佬写的非常好,甚至很多我都不会,看来仍需学习,链接放这儿了ssrf渗透方法

常见的过滤与绕过

常见的过滤

  1. 过滤开头不是http://xxx.com的所有链接
  2. 过滤格式为ip的链接,比如127.0.0.1
  3. 结尾必须是某个后缀

绕过方法

  1. http基础认证(加上@)
    也就是url格式改成http://abc.com@127.0.0.1(等同于/?127.0.0.1)
  2. 使用短链接
    短链接指向的地址就是内网地址
  3. 更改为其他进制的ip
    IP地址转换成十进制:
    127.0.0.1=2130706433

关于ssrf漏洞可能出现的场景

  1. 首先就是通过url分享网页,也就是这篇笔记中我开头说的例子,这里就不多做解释了

  2. 图片下载与加载
    一个页面,上面有很多图片,而这些图片可能是保存在他们本地服务器的图片,然后在网页上调用,这样是安全的。
    同时还有另一种情况就是,程序员为了偷懒,或者是节省空间,在网上借用图片是不是下载在本地,而是直接把图片连接地址放上去,这种方法就有可能是有ssrf漏洞的
    例如下面这种就是可能存在ssrf漏洞的加载

    http://www.douban.com/***/service?image=http://www.baidu.com/img/bd_logo1.png
    
  3. 在线翻译
    通过url地址翻译文本内容可能存在ssrf漏洞

ssrf漏洞的防范

一、首先就是要对获取url进行一个过滤,过滤掉内网ip,最好是设置一个白名单

二、对进制不需要的协议,仅允许http和https请求

三、禁止302跳转,或每跳转一次检查新的host是否为内网ip,后禁止

<?php
function curl($url){
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, True);
    // 限制为HTTPS、HTTP协议
    curl_setopt($ch, CURLOPT_PROTOCOLS, CURLPROTO_HTTP | CURLPROTO_HTTPS);
    curl_setopt($ch, CURLOPT_HEADER, 0);
    curl_exec($ch);
    curl_close($ch);
}

$url = $_GET['url'];
curl($url);
?>

以上代码就对各种伪协议加上了限制,同时设置跳转重定向为True(也就是默认不跳转)

四、限制请求的端口为HTTP常用的端口,比如 80,443,8080,8088等

  PHP知识库 最新文章
Laravel 下实现 Google 2fa 验证
UUCTF WP
DASCTF10月 web
XAMPP任意命令执行提升权限漏洞(CVE-2020-
[GYCTF2020]Easyphp
iwebsec靶场 代码执行关卡通关笔记
多个线程同步执行,多个线程依次执行,多个
php 没事记录下常用方法 (TP5.1)
php之jwt
2021-09-18
上一篇文章      下一篇文章      查看所有文章
加:2021-09-11 18:34:35  更:2021-09-11 18:34:43 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/20 15:31:55-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码