【T00ls精华文】SSRF漏洞(原理&绕过姿势)

  • A+
所属分类:安全文章

【T00ls精华文】SSRF漏洞(原理&绕过姿势)0x00 前言
文章不足之处,望多指正。


0x01 概述
SSRF(Server-Side Request Forgery, 服务端请求伪造)利用漏洞可以发起网络请求来攻击内网服务。
利用SSRF能实现以下效果:
1)扫描内网(主机信息收集,Web应用指纹识别)
2)根据所识别应用发送构造的Payload进行攻击
3)Denial of service

0x02 漏洞利用 

a)SSRF in PHP

1.环境搭建

【T00ls精华文】SSRF漏洞(原理&绕过姿势)


【T00ls精华文】SSRF漏洞(原理&绕过姿势)

        方便大家更直观了解,上述代码用来模拟ssrf,使用curl发起网络请求然后返回客户端,这里我请求加载图片

【T00ls精华文】SSRF漏洞(原理&绕过姿势)



2.利用方式
        一般发起网络请求中会使用libcurl库,来看下它所支持的协议

【T00ls精华文】SSRF漏洞(原理&绕过姿势)


除了http/https,还有一些可利用的协议如下:
  DICT

【T00ls精华文】SSRF漏洞(原理&绕过姿势)

除了泄露安装软件版本信息,还可以查看端口,操作内网redis服务等。


  File

【T00ls精华文】SSRF漏洞(原理&绕过姿势)


  Gopher
万能协议(利用Gopher攻击Redis、攻击Fastcgi 等)

  FTP(S)/SMB(S)
匿名访问及爆破

  Tftp
UDP协议  发送UDP数据包


  Telnet
SSH/Telnet匿名访问及爆破

【T00ls精华文】SSRF漏洞(原理&绕过姿势)


【T00ls精华文】SSRF漏洞(原理&绕过姿势)


3.总结

【T00ls精华文】SSRF漏洞(原理&绕过姿势)

        以上三个函数使用不当会造成SSRF漏洞

【T00ls精华文】SSRF漏洞(原理&绕过姿势)


修复方案:
•限制协议为HTTP、HTTPS
•禁止30x跳转
•设置URL白名单或者限制内网IP

        需要注意的是,回显是能否成功利用的重要的条件,在某些场景协议限定为HTTP模式且没有回显,利用会相对复杂了。

b)SSRF in Java


1.环境搭建

【T00ls精华文】SSRF漏洞(原理&绕过姿势)

        编写脚本扫描内网开放端口的主机


【T00ls精华文】SSRF漏洞(原理&绕过姿势)


        通过ssrf 探测到内网中redis服务器 ‘172.19.0.2:6379’正常访问构造脚本写入 目录‘/etc/crontab‘

【T00ls精华文】SSRF漏洞(原理&绕过姿势)

        进行url编码:

【T00ls精华文】SSRF漏洞(原理&绕过姿势)

        反弹shell

【T00ls精华文】SSRF漏洞(原理&绕过姿势)


2.利用方式
        网络请求支持的协议如下
http,https,file,ftp,mailto,jar,netdoc

对比php的ssrf,java这块利用相对局限,


3.总结
        以下几种类引用不当会造成SSRF Request类,URL类的openStream,HttpClient类,URLConnection和HttpURLConnection类,

修复方案:
•限制协议为HTTP、HTTPS
•不用限制302重定向
•设置URL白名单或者限制内网IP

c)SSRF in Python


1.环境搭建
        HTTP Header Injection in Python urllib,当使用了Python 的urllib库,请求url为用户可控时,就可能存在ssrf漏洞,且可以通过漏洞python urllib http头注入实现对内网未授权仿问的redis 服务器getshell
       Python 测试脚本代码:test.py

【T00ls精华文】SSRF漏洞(原理&绕过姿势)

        测试一下通过http头注入来向redis写入普通的文本: 

【T00ls精华文】SSRF漏洞(原理&绕过姿势)


【T00ls精华文】SSRF漏洞(原理&绕过姿势)

2.漏洞利用
        通过Redis的通讯协议来突破空格的限制
3.总结
修复方案:
1.解析目标URL,获取其Host
2.解析Host,获取Host指向的IP地址
3.检查IP地址是否为内网IP
4.请求URL
5.如果有跳转,拿出跳转URL,执行1

0x03 挖掘漏洞
        对外发起网络请求的地方都可能存在SSRF漏洞,列举图片加载下载,分享页面,在线翻译,未公开的api(从远程服务器请求资源文件处理,编码处理, 属性信息处理)
  Ffpmg
  ImageMaic
  
数据库内置功能
  PostgreSQL
  MongoDB
  CouchDB


【T00ls精华文】SSRF漏洞(原理&绕过姿势)


0x04 绕过技巧
@
添加端口号
短网址绕过
指向任意IP的域名xip.io
10.0.0.1.xip.io   resolves to   10.0.0.1
www.10.0.0.1.xip.io   resolves to   10.0.0.1
mysite.10.0.0.1.xip.io   resolves to   10.0.0.1
foo.bar.10.0.0.1.xip.io   resolves to   10.0.0.1
IP限制绕过
十进制转换 八进制转换 十六进制转换  不同进制组合转换
协议限制绕过
栗子
当url协议限定只为http(s)时,可以利用follow redirect 特性
构造302跳转服务,
结合dict:// file:// gopher://

DNS rebinding
        DNS重绑定可以利用于ssrf绕过 ,bypass 同源策略等,,,这里介绍三种方法
1.特定域名实现TTL=0
2.域名绑定两条A记录
【T00ls精华文】SSRF漏洞(原理&绕过姿势)

1/4的概率,当第一次解析为外网ip,第二次解析为内网ip,就会成功。
3.自建DNS服务器
步骤如下:添加一条ns记录和一条a记录

【T00ls精华文】SSRF漏洞(原理&绕过姿势)


        Ns记录表示这个子域名test.h0pe.site指定由ns.h0pe.site域名服务器解析,
        A记录表示ns.h0pe.site位置在ip地址xxx.xxx.xxx.xxx上
        在这个ip地址上搭建DNS服务器,采用python库中的twisted库中的name模块,核心代码如下:

【T00ls精华文】SSRF漏洞(原理&绕过姿势)

【T00ls精华文】SSRF漏洞(原理&绕过姿势)

Root 权限运行

【T00ls精华文】SSRF漏洞(原理&绕过姿势)

本文始发于微信公众号(T00ls):【T00ls精华文】SSRF漏洞(原理&绕过姿势)

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: