zl程序教程

您现在的位置是:首页 >  Java

当前栏目

SSRF-服务器端请求伪造-相关知识

2023-02-18 16:36:25 时间

SSRF漏洞介绍:

SSRF漏洞(服务器端请求伪造):是一种由攻击者构造形成由服务端发起请求的一个安全漏洞。一般情况下,SSRF攻击的目标是从外网无法访问的内部系统,正是因为它是由服务端发起的,所以它能够请求到与它相连而与外网隔离的内部系统,利用漏洞可以发起网络请求来攻击内网服务

SSRF漏洞原理:

SSRF形成的原因大都是由于服务端提供了从其他服务器应用获取数据的功能且没有对目标地址做过滤与限制,比如从指定URL地址获取网页文本内容,加载指定地址的图片以及下载等等,利用的是服务端的请求伪造 SSRF是利用存在缺陷的web应用作为代理攻击远程和本地的服务器 SSRF是要目标网站的内部系统

SSRF漏洞可以做哪些事情

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

SSRF漏洞挖掘点:

SSRF攻击结果由涵数本身来决定,涵数功能越强大,攻击成功的机会就越高,如PHP的:curl_init、file_get_contents、fsockopen

网站功能:

  • 在线翻译
  • 转码服务
  • 图片、文章收藏功能
  • 图片加载与下载:通过URL地址加载或下载图片
  • 分享:通过URL地址分享网页内容
  • 未公开的api实现以及其他调用URL的功能
  • 所有调外部资源的参数都有可能存在ssrf漏洞

网站url参数:

  • share
  • wap
  • url
  • link
  • src
  • source
  • target
  • u
  • 3g
  • display
  • sourceURl
  • imageURL
  • domain

绕过方法:

利用解析URL所出现的问题

利用解析URL所出现的问题比如:http://www.xxx.com@192.168.0.1/

更改IP地址写法

改写成 8进制、16进制等,IP地址是一个32位的二进制数,通常被分割为4个8位二进制数,通常用“点分十进制”表示成(a.b.c.d)的形式,所以IP地址的每一段可以用其他进制来转换

比如将 http://192.168.66.133 转换为8进制:http://0300.0250.0102.0205 比如将 http://192.168.66.133 转换为16进制:http://0xc0.0xa8.0x42.0x85

比如将 http://127.0.0.1 转换为8进制:http://0177.0000.0000.0001 比如将 http://127.0.0.1 转换为16进制:http://0x7f.0x00.0x00.0x01

防范方法:

  • 白名单过滤
  • 对返回的内容进行识别
  • 过滤file:///、dict://、gopher://、ftp:// http:// https:// php:///危险schema
  • 过滤10.0.0.0/8 、172.16.0.0/12、192.168.0.0/16、localhost私有地址、IPv6地址

用pikachu靶场演示SSRF漏洞

SSRF(curl)

前端传进来的url被后台使用curl_exec()进行了请求,然后将请求的结果又返回给了前端,这关支持的协议挺多的:FTP, FTPS, HTTP, HTTPS, GOPHER, TELNET, DICT, FILE以及LDAP

读取文件: Linux系统读取

file:///etc/passwd  

我在C盘下建立了一个ssrf文本文件,就读取这个文本 我用的 file:///C://ssrf.txt

根据banner返回,错误提示,时间延迟扫描端口:

http://192.168.1.15:22

这里探测 3306 是否开启,有结果就是开启了,没结果换换协议换协议还没有就是没探测出来或则没开端口

SSRF(file_get_content)

读取PHP文件的源码:

php://filter/read=convert.base64-encode/resource=ssrf.php