SSRF漏洞及相关协议学习

file协议

中文意思:

本地文件传输协议

定义:

File协议主要用于访问本地计算机中的文件。
File协议基本的格式如下:

1
file:///C:/file.txt //访问c盘下的file.txt文件

基本格式这里可以借助http网址来理解

http网址基本格式:

1
http://ip地址:端口号/文件路径

因为file协议访问的是文件,并没有主机地址,所以就省去了host那部分就变成了最终上面的部分.

1
2
3
4
5
6
7
8
9
10
11
file协议:

1. file协议主要用于读取服务器本地文件,访问的是本地的静态资源

2. http是访问本地的html文件,相当于把本机当作http服务器,通过http访问服务器,服务器再去访问本地资源。简单来说file只能静态读取,http可以动态解析

3. http服务器可以开放端口,让他人通过http访问服务器资源,但file不可以

4. file对应的类似http的协议是ftp协议(文件传输协议)

5. file不能跨域

curl支持file协议,我们接下来将借助curl工具讲解file协议的用法

首先在/etc目录下创建文件file.txt

1
echo "hello file" >/etc/file.txt

通过file协议访问

1
curl file:///etc/file.txt

Dict协议

定义:

词典网络协议,在RFC 2009中进行描述。它的目标是超越Webster protocol,并允许客户端在使用过程中访问更多字典。Dict服务器和客户机使用TCP端口2628。(摘自百度百科)

使用dict协议可以获取内网主机开放端口

通过dict协议,可以看出目标端口的指纹信息,通过返回的指纹信息,判断开启的服务.

1
curl dict://192.168.159.131:80  探测目标主机80端口是否开放及其对应服务
dict协议的使用:
1
2
3
1. dict://serverip:port/命令:参数
2. 向服务器的端口请求为【命令:参数】,并在末尾自动补上\r\n(CRLF),为漏洞利用增添了便利
3. 通过dict协议的话要一条一条的执行,而gopher协议执行一条命令就行了。

php中filter协议

定义

PHP 过滤器用于对来自非安全来源的数据(比如用户输入)进行验证和过滤。

php://filter 是php中独有的一个协议,可以作为一个中间流来处理其他流,可以进行任意文件的读取;

参数介绍:
名称 描述 备注
resource=<要过滤的数据流> 指定了你要筛选过滤的数据流。 必选
read=<读链的筛选列表> 可以设定一个或多个过滤器名称,以管道符(|)分隔。 可选
write=<写链的筛选列表> 可以设定一个或多个过滤器名称,以管道符(|)分隔。 可选
<;两个链的筛选列表> 任何没有以 read= 或 write= 作前缀 的筛选器列表会视情况应用于读或写链。
read参数值
1
2
3
4
string.strip_tags: //将数据流中的所有html标签清除
string.toupper: //将数据流中的内容转换为大写
string.tolower: //将数据流中的内容转换为小写
convert.base64-encode: //将数据流中的内容转换为base64编码
示例

这里我们通过皮卡出靶场的ssrf漏洞题目进行讲解

看到题目打开的url

1
http://192.168.159.132/pikachu/vul/ssrf/ssrf_fgc.php?file=http://127.0.0.1/pikachu/vul/ssrf/ssrf_info/info2.php 

我们可以通过php://filter协议来查看源文件内容;

首先我们在靶机当前目录下创建filter.php

内容为echo “Hello phpFilter”

然后我们通过构造payload远程访问filter文件

1
http://192.168.159.132/pikachu/vul/ssrf/ssrf_fgc.php?file=php://filter/read=convert.base64-encode/resource=filter.php 

返回一串编码,这串编码就是我们base64编码后的文件内容,

解码验证

当然我们可以通过filter协议构造恶意的payload访问服务器的隐私数据.

0x01:SSRF 漏洞描述

1
2
3
SSRF (Server-Side Request Forgery,服务器端请求伪造)是一种由攻击者构造请求,由服务端发起请求的
安全漏洞。一般情况下,SSRF 攻击的目标是外网无法访问的内部系统(正因为请求是由服务端发起的,所
以服务端能请求到与自身相连而与外网隔离的内部系统)

SSRF漏洞原理

1
2
3
SSRF 的形成大多是由于服务端提供了从其他服务器应用获取数据的功能且没有对目标地址做过滤与限制。
例如,黑客操作服务端从指定 URL 地址获取网页文本内容,加载指定地址的图片等,利用的是服务端的请
求伪造。SSRF 利用存在缺陷的 Web 应用作为代理攻击远程和本地的服务器。

SSRF漏洞防御

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

    借鉴:实训讲义

    (https://www.cnblogs.com/tig666666/p/6020460.html)