SSRF-知识点

SSRF

简介

服务端请求伪造(Server Side Request Forgery, SSRF)指的是攻击者在未能取得服务器所有权限时,利用服务器漏洞以服务器的身份发送一条构造好的请求给服务器所在内网。SSRF攻击通常针对外部网络无法直接访问的内部系统。

形成原因

SSRF漏洞形成的原因大多是因为服务端提供了从其他[服务器/应用]获取数据的功能,且没有对目标地址作过滤和限制。

用途:

  1. 可以对外网、服务器所在内网、本地进行端口扫描 获取一些服务的banner信息
  2. 攻击运行在内网或本地的应用程序 比如溢出
  3. 对内网web应用进行指纹识别 通过访问默认文件实现
  4. 攻击内外网的web应用 主要是使用get参数就可以实现的攻击(比如struts2,sqli等)
  5. 利用file协议读取本地文件等

绕过和防御:

绕过:

  • 更改IP地址写法:一些开发者会通过对传过来的 URL 参数进行正则匹配的方式来过滤掉内网 IP但是过滤的不严格,可以将IP地址写成各种进制格式
  • 利用解析url出现的问题:在某些情况下,后端程序可能会对访问的 URL 进行解析,对解析出来的 host 地址进行过滤。这时候可能会出现对 URL 参数解析不当,导致可以绕过过滤。如 http://www.baidu.com@192.168.0.1/
  • 利用跳转:如果后端服务器在接收到参数后,正确的解析了URL的host,并且进行了过滤,我们这个时候可以使用跳转的方式来进行绕过。可以通过短地址的方式来绕过。常用的跳转有302跳转和307跳转,区别在于307跳转会转发POST请求中的数据等,但是302跳转不会。
  • 通过各种非HTTP协议:如果服务器端程序对访问URL所采用的协议进行验证的话,可以通过非HTTP协议来进行利用。比如通过gopher,可以在一个url参数中构造POST或者GET请求,从而达到攻击内网应用的目的。
  • 利用IDN:一些网络访问工具如Curl等是支持国际化域名(Internationalized Domain Name,IDN)的,国际化域名又称特殊字符域名,是指部分或完全使用特殊的文字或字母组成的互联网域名。例如 ⓔⓧⓐⓜⓟⓛⓔ.ⓒⓞⓜ 和 example.com 等同。

防御:

  • 过滤返回的信息
  • 统一错误信息
  • 限制请求的端口
  • 禁止不常用的协议
  • 对DNS Rebinding,考虑使用DNS缓存或者Host白名单
  • 可以的话使用地址白名单
  • 过滤 10.0.0.0/8 、172.16.0.0/12、192.168.0.0/16、localhost 私有地址、IPv6 地址
  • 内网服务开启鉴权(Memcached, Redis, Elasticsearch and MongoDB)
  • 需要使用互联网资源(比如贴吧使用网络图片)而无法使用白名单的情况:首先禁用CURLOPT_FOLLOWLOCATION 然后通过域名获取目标ip,并过滤内部 ip;最后识别返回的内容是否与假定内容一致

SSRF-知识点
https://coutcin-xw.github.io/2022/04/23/SSRF-知识点/
作者
CoutCin
发布于
2022年4月23日
许可协议