文章目录
SSRF(Server-Side Request Forgery:服务器端请求伪造)
其形成的原因大都是由于服务端提供了从其他服务器应用获取数据的功能,但又没有对目标地址做严格过滤与限制,导致攻击者可以传入任意的地址来让后端服务器对其发起请求,并返回对该目标地址请求的数据
数据流:攻击者----->服务器---->目标地址
根据后台使用的函数的不同,对应的影响和利用方法又有不一样
php
PHP中下面函数的使用不当会导致SSRF:
file_get_contents()
fsockopen()
curl_exec()
如果一定要通过后台服务器远程去对用户指定("或者预埋在前端的请求")的地址进行资源请求,则请做好目标地址的过滤。
SSRF(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和用户名+密码的认证。
点击链接,看看会发生什么变化
http://192.168.80.139/pikachu/vul/ssrf/ssrf_curl.php
地址栏的url
多了一个?url参数
?url=http://127.0.0.1/pikachu/vul/ssrf/ssrf_info/info1.php
curl支持很多协议我们可以通过以下几个方法来测试:
网址访问
?url=https://github.com/
通过file协议访问本地文件
?url=file:///c:/test/www.txt
dict协议扫描内网主机开放端口
使用dict协议可以获取内网主机开放端口相应服务的指纹信息
?url=dict://192.168.80.139:80
pikachu靶场地址
?url=dict://192.168.80.141:80
?url=dict://192.168.80.141:22
SSRF(file_get_content)
http://192.168.80.139/pikachu/vul/ssrf/ssrf_fgc.php
点击链接,观察地址栏的url变化
发现 ?url参数
变成了?file参数
,可以试着访问百度页面
网站访问
?file=http://www.baidu.com
http协议请求内网资源
也可以访问?file=http://127.0.0.1/pikachu/vul/ssrf/ssrf_info/info1.php
通过file协议访问本地文件
?file=file:///c:/test/www.txt