一、漏洞原理
SSRF 服务端请求伪造
原理:在某些网站中提供了从其他服务器获取数据的功能,攻击者能通过构造恶意的URL参数,恶意利用后可作为代理攻击远程或本地的服务器。
二、SSRF的利用
1.对目标外网、内网进行端口扫描。
2.攻击内网或本地的程序或应用
3.利用file协议读取本地文件
4.利用get攻击外网或内网的web应用
三、防御方式
1.对提交的URL进行过滤,如过滤格式为127.0.0.1的ip
2.规定结尾的后缀
3.短链接
4.@符号
5.将十进制数改为其他进制
6.文件上传
四、常见协议利用
http:查看内网主机端口是否存在。
file:读取服务器本地文件,访问本地的静态资源
dict:协议探测端口和服务指纹,攻击redis,写入定时任务,进行反弹shell
gopher:发送POST或GET请求,用来攻击内网应用redis,mysql,fastCGI,smtp等
五、靶场实践
内网访问
提示信息:尝试访问位于127.0.0.1的flag.php吧
首先在网站页面构造一个Payload访问百度,结果是进入到了百度页面,那么说明此处存在SSRF漏洞
根据提示信息,访问127.0.0.1下的flag.php文件
?url=http://127.0.0.1/flag.php
伪协议读取文件
提示信息:尝试去读取一下Web目录下的flag.php吧
var/www/html目录是Web服务器(linux)的默认根目录,也被称为Web根目录
根据提示信息构造payload
?url=file:var/www/html/flag.php
端口扫描
提示信息:来来来性感CTFHub在线扫端口,据说端口范围是8000-9000哦。
*说明flag是在127.0.0.1网址某个端口下
构造payload
?url/http:127.0.0.1:xxxx #使用burp进行端口爆破,返回拒绝连接错误,说明端口存在
在此,根据长度的不同便可知知道此网站的正确的端口为8899
最终payload
?url/http:127.0.0.1:8894