先在网络上找一个定义:服务器端请求伪造;利用一个可以发起网络请求的服务,可以当做跳板来攻击其他服务。SSRF攻击通常针对外部网络无法直接访问的内部系统进行攻击。
先简单讲讲我个人的理解,ssrf主要是在外网通过能与外部交互的服务器提供的访问内网的功能从而达到攻击内网主机的目的。因为在内网环境下,并不会允许外网上的用户直接访问内网的每一台机器,但是内网中会存在能与外界交互的主机,而这台主机又可以与内网其他主机进行信息通信,相当于这台与外网通信的主机可以充当攻击者攻击内网跳板的作用。
ssrf可以做到:
1.内外网的端口和服务扫描
2.攻击运行在内网或本地的应用程序
3.对内网web应用进行指纹识别,识别企业内部的资产信息。
4.攻击内网的web应用,主要是使用GET参数就可以实现的攻击(比如Struts2漏洞利用,SQL注入等)
5.利用file协议读取本地敏感数据文件等
PHP中的 curl_exec()、 file_get_contents()、fsockopen()等函数若使用不当便会造成SSRF漏洞。
举例:
它是由一个链接动态生成的图片验证码,每刷新一下生成一个验证码。URL结构如下:
xx:8007/get_number 在这里可以把端口号进行修改用来探测端口号是否开放。
直接请求xx:8007/会显示404,修改端口号为其他值则可能是403也可能是
当然最好是使用工具来扫描1-65535的端口号。
防御方法
1、过滤返回信息,验证远程服务器对请求的响应是比较容易的方法。如果web应用是去获取某一种类型的文件。那么在把返回结果展示给用户之前先验证返回的信息是否符合标准。
2,、统一错误信息,避免用户可以根据错误信息来判断远端服务器的端口状态。
3、限制请求的端口为http常用的端口,比如,80,443,8080,8090。
4、黑名单内网ip。避免应用被用来获取获取内网数据,攻击内网。
5、禁用不需要的协议。仅仅允许http和https请求。可以防止类似于file:///,gopher://,ftp:// 等引起的问题。