SSRF漏洞

昨天在做题的时候遇到这个漏洞,简单的了解了一下,今天打算进行系统性的学习,参考了别人的文章,比较全面CTF SSRF 漏洞从0到1 - FreeBuf网络安全行业门户

一、漏洞原理

SSRF(服务器端请求伪造):服务器端请求伪造,由攻击者构造请求,服务器发起请求。可以利用一个网络请求的服务,当跳板进行攻击,攻击者在访问A时,利用A的特定功能构造特殊payload,由A发起对内部网络中系统B(内网隔离,外部不可访问)的请求,从而获取敏感信息。此时A被作为中间人(跳板)进行利用

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

二、漏洞相关函数

file_get_contents():将整个文件或一个url所指向的文件读入一个字符串中。

readfile():输出一个文件的内容。

fsockopen():打开一个网络连接或者一个Unix 套接字连接。

curl_exec():初始化一个新的会话,返回一个cURL句柄,供curl_setopt(),curl_exec()和curl_close() 函数使用。

fopen():打开一个文件文件或者 URL。

三、漏洞利用的相关协议

1.file协议: 在有回显的情况下,利用 file 协议可以读取任意文件的内容

2.dict协议:泄露安装软件版本信息,查看端口,操作内网redis服务等

3.gopher协议:gopher支持发出GET、POST请求。可以先截获get请求包和post请求包,再构造成符合gopher协议的请求。gopher协议是ssrf利用中一个最强大的协议(俗称万能协议)。可用于反弹shell

4.http/s协议:探测内网主机存活

其中

1.file协议
?url=file:///etc/passwd
?url=file:///var/www/html/flag.php

2.http/s协议

读取/etc/hosts、/proc/net/arp、/proc/net/fib_trie等文件

域网IP地址范围分三类,以下IP段为内网IP段:

C类:192.168.0.0 - 192.168.255.255

B类:172.16.0.0 - 172.31.255.255

A类:10.0.0.0 - 10.255.255.255

四、绕过

1.限制类型

限制请求的端口只能为Web端口,只允许访问HTTP和HTTPS的请求。

限制域名只能为jttp://www.xx.com

限制不能访问内网的IP,以防止对内网进行攻击。

屏蔽返回的详细信息。

2.漏洞利用方式

页面ssrf.php实现的功能是获取GET参数URL,然后将URL的内容返回网页上

3.绕过方法

(1)@          http://abc.com@127.0.0.1
(2)添加端口号      http://127.0.0.1:8080
(3)短地址        https://0x9.me/cuGfD
(4)可以指向任意ip的域名  xip.io
(5)ip地址转换成进制来访问 192.168.0.1=3232235521(十进制)
(6)非HTTP协议
(7)DNS Rebinding

练习

ctfhub之SSRF

1.协议利用
内网访问

打开看到题目要求,是从内网访问本地文件

直接构造payload,得到flag

伪协议读取文件

想到file协议读取文件

构造payload,查看源代码得到flag

端口扫描

打开看到题目描述,发现是8000-9000端口之间,选择抓包爆破

选定爆破数值

确认范围后开始爆破

爆出端口,从回显中得到flag

2.其他
URL Bypass

看到题目描述

给出链接

补充:

使用HTTP 基本身份认证绕过:

        HTTP 基本身份认证允许 Web 浏览器或其他客户端程序在请求时提供用户名和口令形式的身份凭证的一种登录验证方式。
        也就是:http://www.xxx.com@www.yyy.com形式

得到flag

数字IP Bypass

题目描述中给出127和172.被禁这样的说法,尝试用其他方法表达数字

127.0.0.1的十进制:2130706433  ==>?url=http://2130706433/flag.php

127.0.0.1的十六进制:0x7F000001  ==>?url=http://0x7F000001/flag.php

发现两种都可以得到payload

302跳转 Bypass

法一:

先尝试访问127.0.0.1/flag.php,发现被ban了

像上一题一样,尝试通过改变数字的表达方式绕过,发现可以得到flag

法二:

使用?url=localhost/flag.php

补充:

localhost原理和作用及环回地址
1.原理

localhost 始终是自己的计算机。且windows自动将localhost解析为127.0.0.1

2.作用

开发人员使用本地主机来测试Web应用程序和程序。网络管理员使用环回来测试网络连接。localhost的另一个用途是hosts文件,你可以使用环回来阻止恶意网站。

3.环回地址

主机用于向自身发送通信的一个特殊地址(不再通过数据链路层传递数据,而是直接在自己的网络层,运输层进行传递数据)

Ipv4的环回地址为127.0.0.0到127.255.255.255(只有两个特殊的保留),此地址中的任何地址都不会出现在网络中

127.0.0.1是保留地址之一,经常被用来检验本机TCP/IP协议栈
Localhost是一个域名,也是本机地址,它可以被配置为任意的IP地址(可以通过hosts这个文件进行修改),不过通常情况下都指向IPV4:表示127.0.0.1
IPV6:用[::1]表示

localhot(local)是不经网卡(用来允许计算机在计算机网络上进行通讯,拥有mac地址,也就是局域网地址)传输!这点很重要,它不受网络防火墙和网卡相关的限制。
127.0.0.1是通过网卡传输,依赖网卡,并受到网络防火墙和网卡相关的限制。
一般设置程序时本地服务用localhost是最好的,localhost不会解析成ip,也不会占用网卡、网络资源。

DNS重绑定 Bypass

补充:

DNS的作用

计算机域名服务器,在Internet上域名与IP地址之间是一一对应的,DNS就是用来根据域名查出IP地址。相当于自己的通讯录。

举例来说,如果你要访问域名math.stackexchange.com,首先要通过DNS查出它的IP地址是151.101.129.69

首先尝试?url=127.0.0.1/flag.php,发现被ban

查看附件,发现属于DNS Rebinding

补充:

DNS Rebinding

在网页浏览过程中,用户在地址栏中输入包含域名的网址。浏览器通过DNS服务器将域名解析为IP地址,然后向对应的IP地址请求资源,最后展现给用户。而对于域名所有者,他可以设置域名所对应的IP地址。当用户第一次访问,解析域名获取一个IP地址;然后,域名持有者修改对应的IP地址;用户再次请求该域名,就会获取一个新的IP地址。对于浏览器来说,整个过程访问的都是同一域名,所以认为是安全的。这就造成了DNS Rebinding攻击。

先用cmd查看本机ip地址

使用附件中给的链接运用DNS解析域名

传参后得到flag

  • 17
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值