Server-Side Request Forgery:服务器端请求伪造
目标:网站的内部系统
形成的原因
攻击者构造形成由服务器端发起请求的译者安全漏洞。
由于服务端提供了从其他服务器应用获取数据的功能,且没有对目标地址做过滤与限制。比如从指定URL地址获取网页文本内容,加载指定地址的图片,文档,等等。
发现漏洞
黑盒:URL分享网页内容,转码,在线翻译,图片加载下载,图片文章收藏功能,未公开的API
白盒:从URL关键字找:share,wap,url,src,source.target.u,3g,display,image,domain
用途
1、获取banner信息
2、攻击运行在内网或本地的应用程序,比如溢出
3、对内网WEB应用指纹识别
4、攻击内外网WEB应用
5、利用file协议读取本地文件
常用攻击函数
curl_init 初始化
file_get_contents php内置函数,以字符串的形式获取指定文件的内容。使用该函数可以读取本地的文件、远程文件和 HTTP 请求的响应等内容
fsockopen php内置函数,建立基于TCP和UDP协议的客户端和服务器之间的连接通道。该函数通过Socket API实现网络通信,支持多种应用层协议,如HTTP、SMTP、FTP等。$fp = fsockopen("www.baidu.com", 80, $errno, $errstr, 30)是连接百度
防御方法
1、地址白名单,设定只允许访问的列表
2、禁用不需要的协议。仅仅允许http和https请求。可以防止类似于file:///,gopher://,ftp:// ,dict:// 等引起的问题
3、过滤私有IP地址段10.0.0.0/8,172.16.0.0/12,192.168.0.0/16,localhost私有地址,IPV6地址
4、内容识别,识别的关键字没有就报错
绕过方法
更改IP为8进制,16进制,10进制
利用接卸URL把ip写到网址后面
演示实验
使用pikachu网站,
curl_init演示,$URL变量没有过滤,存在SSRF漏洞。
可以支付协议FTP, FTPS, HTTP, HTTPS, GOPHER, TELNET, DICT, FILE以及LDAP
file_get_contents示例,$filename变量没有过滤,存在SSRF漏洞。
可以读本地,
验证有没有漏洞
读PHP文件
redis漏洞获取未授权访问
redis是存放日志的,端口默认是6379,默认的是不能远程连接,
在bp测试器设置字典,把端口都改一下,如果包的大小和其他不一样说明有这个端口开放。
用MSF打内网,SSRF来攻击redis反弹shell