目录
ssrf介绍
以pikachu靶场为例
curl
访问外网链接
利用file协议查看本地文件
利用dict协议扫描内网主机开放端口
file_get_content
利用file协议查看本地文件:
fsockopen()
防御方式:
ssrf介绍
服务器端请求伪造,是一种由攻击者构造形成而由服务器端发起请求的一个安全漏洞。一般情况下,SSRF攻击的目标是从外网无法访问的内部系统。其目标是与服务器端相连的内部网络。
以pikachu靶场为例
curl
PHP支持的由Daniel Stenberg创建的libcurl库允许你与各种的服务器使用各种类型的协议进行连接和通讯。
libcurl目前支持http、https、ftp、gopher、telnet、dict、file和ldap协议。libcurl同时也支持HTTPS认证、HTTP POST、HTTP PUT、 FTP 上传(这个也能通过PHP的FTP扩展完成)、HTTP 基于表单的上传、代理、cookies和用户名+密码的认证。
PHP中使用cURL实现Get和Post请求的方法
curl的用法链接
https://www.runoob.com/php/php-ref-curl.html
访问外网链接
这里看到url后面跟上的是本地的php文件地址,尝试访问正常连接
http://127.0.0.1/pikachu-master/vul/ssrf/ssrf_curl.php?url=http://127.0.0.1/pikachu-master/vul/ssrf/ssrf_info/info1.php
尝试方法问百度界面,发现可以正常访问
利用file协议查看本地文件
http://127.0.0.1/pikachu-master/vul/ssrf/ssrf_curl.php?url=file:///h:zd/6.txt#或者http://192.168.1.14/pikachu-master/vul/ssrf/ssrf_curl.php?url=file:///h:zd/6.txt
利用dict协议扫描内网主机开放端口
可以看到这几个长度不一样的都是开放端口的
file_get_content
---> 将整个文件读入一个字符串
先利用大小写判断服务器的操作系统类别,在访问测试的文件判断是否存在ssrf:
测试漏洞访问的文件:
windows --> c:\Windows\win.ini
linux ---> /etc/passwd or /etc/shadow
利用file协议查看本地文件:
http://127.0.0.1/pikachu-master/vul/ssrf/ssrf_fgc.php?file=file:///c:windows/win.ini
fsockopen()
---> 打开一个网络连接
?url=www.baidu.com //显示连接百度页面
?url=127.0.0.1:3306 //利用探测3306是否开启
防御方式:
对用户的输入进行私有地址过滤。
限制用户访问的端口,只能访问 80 和 443 端口。
禁用不必要的协议 file dict 等。