一.知识点
1.SSRF是什么?
SSRF(Server-Side Request Forgery:服务器端请求伪造) 是一种由攻击者构造形成由服务端发起请求的一个安全漏洞。
一般情况下,SSRF攻击的目标是从外网无法访问的内部系统。(正是因为它是由服务端发起的,所以它能够请求到与它相连而与外网隔离的内部系统)
简单来说:利用一个可以发起网络请求的服务当作跳板来攻击内部其他服务。
2.SSRF漏洞原理
SSRF 形成的原因大都是由于服务端提供了从其他服务器应用获取数据的功能且没有对目标地址做过滤与限制。
3.作用
探测内网信息
攻击内网或本地其他服务
穿透防火墙
4.SSRF怎么找
能够对外发起网络请求的地方
请求远程服务器资源的地方
数据库内置功能
邮件系统
文件处理
在线处理工具
二.实例
1.内网访问
题目中提示:尝试访问位于127.0.0.1的flag.php吧
于是进行访问 得到本题flag
2.伪协议读取文件
URL伪协议有如下这些:
- file:///
- dict://
- sftp://
- ldap://
- tftp://
- gopher://
http/s协议
作用:
探测内网主机存活
dict协议
作用:
泄露安装软件版本信息,查看端口,操作内网redis服务等
Gopher协议
作用:
Gopher协议可以说是SSRF中的万金油。利用此协议可以攻击内网的 Redis、Mysql、FastCGI、Ftp等等,也可以发送 GET、POST 请求。这无疑极大拓宽了 SSRF 的攻击面。
file://
这种URL Schema可以尝试从文件系统中获取文件:
如果该服务器阻止对外部站点发送HTTP请求,或启用了白名单防护机制,只需使用如下所示的URL Schema就可以绕过这些限制:
http://example.com/ssrf.php?url=file:///etc/passwdhttp://example.com/ssrf.php?url=file:///C:/Windows/win.ini
即
用于访问本地文件系统,在CTF中通常用来读取本地文件的且不受allow_url_fopen与allow_url_include的影响。
具体的用法参考https://www.cnblogs.com/-mo-/p/11673190.html
题目提示:尝试去读取一下Web目录下的flag.php吧
web目录一般是存放在 var/www/html/ 里面
1.)于是进行访问出现???查看源代码 找到了本题的flag
2.)bp抓包 访问提示url地址 直接可得本题flag
3.端口扫描
题目提示:来来来性感CTFHub在线扫端口,据说端口范围是8000-9000哦
给了端口范围联想到爆破 于是进行爆破 得到本题flag
4.POST请求
题目提示:
这次是发一个HTTP POST请求.对了.ssrf是用php的curl实现的.并且会跟踪302跳转.加油吧骚年
打开题目之后先bp抓包,尝试访问flag.php,提示需要从127.0.0.1发送,于是修改url为127.0.0.1,出来了一个key,构造一个payload
?url=gopher://127.0.0.1:80/_POST%2520/flag.php%2520HTTP/1.1%250D%250AHost:%2520127.0.0.1:80%250D%250AContent-Type:%2520application/x-www-form-urlencoded%250D%250AContent-Length:%252036%250D%250A%250D%250Akey=85dd6ab1a18c2fabacb046757c84de0b
1.)问题
出现了假的flag,给了提示,又开了一次环境,重新做,依旧没出现flag
参考资料