SSRF入门

文章的内容包括SSRF的原理与应用
入门小白进阶SSRF的文章

SSRF(Server-Side Request Forgery)服务端请求为伪造,产生的原因是由于服务端提供了从其他服务器应用获取数据的功能且没有对地址和协议等做过滤和限制,是一种由攻击者构造形成由服务端发起请求的一个安全漏洞。

1.SSRF介绍

1.1 SSRF原理

  SSRF(Server-Side Request Forgery)服务端请求为伪造,SSRF是一种由攻击者构造形成由服务端发起请求的一个安全漏洞。 一般情况下,SSRF攻击的目标是从外网无法访问的内部系统。(正是因为它是由服务端发起的,所以它能够请求到与它相连而与外网隔离的内部系统) SSRF漏洞形成的原因大多是因为服务端提供了从其他服务器应用获取数据的功能且没有对目标地址作过滤和限制。

1.2 SSRF危害
  • 端口扫描
  • 内网Web 应用指纹识别
  • 攻击内网Web 应用
  • 读取本地文件

2.SSRF利用

2.1 访问正常文件
1
访问正常文件,提交参数[?url=http://www.baidu.com/robots.txt]
2.2 端口扫描(扫描内网机器)
1
2
3
4
5
6
7
当访问未开放端口,脚本会显示空白或者报错,提交参数[?url=dict://127.0.0.1:1234]

当访问开放端口时,脚本会显示bannner 信息。

[?url=dict://127.0.0.1:80]

[?url=dict://127.0.0.1:3306]
2.3读取系统本地文件
1
2
3
利用file协议可以任意读取本地系统文件,提交参数

[?url=file://c:\windows\system32\drivers\etc\hosts]
2.4内网web指纹识别

识别内网应用使用的框架,平台,模块以及CMS 可以为后续的渗透测试提供很多的帮助。大多数Web 应用框架都有一些独特的文件和目录。通过这些文件可以识别出应用的类型,甚至详细的版本。根据这些信息就可以针对性的搜集漏洞进行攻击。

1
2
3
比如可以通过访问下列文件来判断phpMyadmin 是否安装以及详细版本

[?url=http://192.168.1.200/phpmyadmin/README]
2.5攻击内网应用

内网安全通常都很薄弱,溢出、弱口令等一般都是存在的。通过ssrf 攻击,可以实现对内网的访问,从而可以攻击内网应用或者本地机器,获得shell,这里的应用包括服务、Web 应用。

仅仅通过get 方法可以攻击的Web 应用有很多,比如structs2 命令执行等。weblogic 从ssrf 到redis 未授权访问 到getshell、redis 数据库 未授权访问 不需要用户名和密码就可以访问数据库,读写文件,root权限。


3.SSRF挖掘

3.1 SSRF挖掘点

从URL关键字中寻找:

  • Share、wap、url、link、src、source、target、u、3g、display、 sourceURL、imageURL、domain
  • 分享:通过URL地址分享网页内容
  • 转码服务
  • 在线翻译
  • 图片加载与下载:通过URL地址加载或下载图片
  • 图片、文章收藏功能
  • 未公开的api实现以及其他调用URL的功能
  • 从URL关键字中寻找
3.2 SSRF漏洞验证
  1. 我们先验证,请求是否是服务器端发出的,可以右键图片,使用新窗口打开图片,如果浏览器上地址栏是http://www.baidu.com/img/bd_logo1.png,说明不存在SSRF漏洞。必须图片存到服务器中,而不是远程的链接。在页面源码中查找访问的资源地址,如果该资源地址类型为 www.baidu.com/xxx.php?image=(地址)的就可能存在SSRF漏洞。
  2. 可以在Firebug 或者burpsuite抓包工具,查看请求数据包中是否包含 http://www.baidu.com/img/bd_logo1.png这个请求。由于SSRF是服务端 发起的请求,因此在加载这张图片的时候本地浏览器中不应该存在图片的 请求。
  3. 在验证完是由服务端发起的请求之后,此处就有可能存在SSRF,接下 来需要验证此URL是否可以来请求对应的内网地址。首先我们要获取内网 存在HTTP服务且存在favicon.ico文件地址,才能验证是否是SSRF。此处找内网地址可以通过从漏洞平台中的历史漏洞寻找泄露的内网地址。

SSRF1


4.SSRF防御

  • 限制协议

仅允许http和https请求。

  • 限制IP

避免应用被用来获取内网数据,攻击内网。

  • 限制端口

限制请求的端口为http 常用的端口,例如80/443/8080/8090

  • 过滤返回信息

验证远程服务器对请求的响应是比较简单的方法。

  • 统一错误信息

避免用户可以根据错误信息来判断远端服务器的端口状态

Weblogic 从ssrf 到getshell

SSRF2

谢谢大家欣赏文章!
------ 本文结束感谢您的阅读 ------