昨天在做题的时候遇到这个漏洞,简单的了解了一下,今天打算进行系统性的学习,参考了别人的文章,比较全面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
URL Bypass
看到题目描述
给出链接
补充:
使用HTTP 基本身份认证绕过:
HTTP 基本身份认证允许 Web 浏览器或其他客户端程序在请求时提供用户名和口令形式的身份凭证的一种登录验证方式。
也就是:http://www.xxx.com@www.yyy.com
形式
得到flag