概述
SSRF(Server-Side Request Forgery:服务器端请求伪造)
其形成的原因大都是由于服务端提供了从其他服务器应用获取数据的功能,但又没有对目标地址做严格过滤与限制
导致攻击者可以传入任意的地址来让后端服务器对其发起请求,并返回对该目标地址请求的数据
数据流:攻击者----->服务器---->目标地址
根据后台使用的函数的不同,对应的影响和利用方法又有不一样
PHP中下面函数的使用不当会导致SSRF:
file_get_contents()
fsockopen()
curl_exec()
如果一定要通过后台服务器远程去对用户指定("或者预埋在前端的请求")的地址进行资源请求,则请做好目标地址的过滤。
什么是php 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请求的方法
这些函数在PHP 4.0.2中被引入。
简单来说就是支持 http、https、ftp、gopher、telnet、dict、file和ldap协议向服务端的操作。
SSRF(curl)
点击链接,弹出小诗,发现url中出现了传递url参数的url 0.0!
可以使用file协议查看本地文件C:\Windows\System32\drivers\etc\hosts的内容
http://192.168.1.157/pikachu-master/vul/ssrf/ssrf_curl.php?url=file:///c:/windows/system32/drivers/etc/hosts
同样,可以利用别的协议实现不同的利用。
什么是file_get_contents()
file_get_contents() 把整个文件读入一个字符串中。
该函数是用于把文件的内容读入到一个字符串中的首选方法。如果服务器操作系统支持,还会使用内存映射技术来增强性能。
简单来说,他的功能就是读取文件用的。
SSRF(file_get_content)
和上一个一样,利用file协议读取一下本地文件
http://192.168.1.157/pikachu-master/vul/ssrf/ssrf_fgc.php?file=file:///c:/windows/win.ini
还可以使用php伪协议中php://filter/来读php源代码。
还可以使用http协议去请求内网资源,这里就都不做演示了。