米斯特白帽培訓(xùn)講義(v2)漏洞篇 SSRF

米斯特白帽培訓(xùn)講義 漏洞篇 SSRF

講師:gh0stkey

整理:飛龍

協(xié)議:CC BY-NC-SA 4.0

很多 Web 應(yīng)用都提供了從其他服務(wù)器上獲取數(shù)據(jù)的功能。使用用戶指定的 URL叭喜,web 應(yīng)用可以獲取圖片蚪拦,下載文件堤尾,讀取文件內(nèi)容等驻右。這個功能如果被惡意使用损搬,可以利用存在缺陷的 Web 應(yīng)用作為代理闪唆,攻擊遠(yuǎn)程和本地服務(wù)器盅粪。這種形式的攻擊成為服務(wù)器請求偽造(SSRF)。

原理

<?php
$url = @$_GET['url'];
if($url) {
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_HEADER, 0);
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
    curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
    $co = curl_exec($ch);
    curl_close($ch);
    echo $co;
}

這段代碼從 URL 中讀取url參數(shù)悄蕾,之后訪問url參數(shù)所指向的 URL 資源票顾,最后把資源顯示在頁面上。(當(dāng)然這個代碼有些簡陋了帆调,不是真正的代理奠骄,有些資源可能處理不好。)

我們將其保存為ssrf.php并部署番刊。之后我們訪問localhost/ssrf.php?url=http://www.baidu.com

可以看到顯示正常含鳞。這個漏洞還可以用于訪問本地的圖片,我們再訪問file:///C:/Windows/win.ini

頁面上是亂的芹务,但是我們查看源代碼蝉绷,也可以正常顯示鸭廷。

利用

可以對服務(wù)器所在內(nèi)網(wǎng)以及本地進(jìn)行端口掃描,獲取服務(wù)的指紋信息熔吗。指紋識別通過訪問默認(rèn)文件來實現(xiàn):

這張圖中靴姿,我們訪問了10.50.33.43的 Tomcat 服務(wù)的默認(rèn)文件。10.50.33.43是內(nèi)網(wǎng)磁滚,我們直接訪問是訪問不了的佛吓,但是通過 SSRF 就可以。并且垂攘,我們通過訪問 Tomcat 的默認(rèn)文件確定了這臺機子上部署了 Tomcat 服務(wù)维雇。

確定了所部署的服務(wù)之后,我們就可以有針對性的攻擊內(nèi)網(wǎng)部署的應(yīng)用晒他。比如 ST2 和 SQL 注入這種通過 GET 方法實施的攻擊吱型。

我們還可以利用該漏洞讀取服務(wù)器中的配置文件,比如上面的win.ini陨仅。

挖掘

以下業(yè)務(wù)場景容易出現(xiàn)這種漏洞:

  1. 應(yīng)用從用戶指定的 URL 獲取圖片津滞,然后把它用一個隨機名稱保存在硬盤上,并展示給用戶:

  2. 應(yīng)用獲取用戶指定 URL 的數(shù)據(jù)(文件或者 HTML)灼伤。這個函數(shù)會使用 socket 和 服務(wù)器建立 TCP 連接触徐,傳輸原始數(shù)據(jù)。

  3. 應(yīng)用根據(jù)用戶提供的 URL狐赡,抓取用戶的 Web 站點撞鹉,并且自動生成移動 Wap 站。

  4. 應(yīng)用提供測速功能颖侄,能夠根據(jù)用戶提供的 URL鸟雏,訪問目標(biāo)站點,以獲取其在對應(yīng)經(jīng)緯度的訪問速度览祖。

Web 功能

我們從上面的概述可以看出孝鹊,SSRF 是由于服務(wù)端獲取其它服務(wù)器的相關(guān)信息的功能中形成的,因此我們可以列舉幾種在 Web 應(yīng)用中展蒂,常見的從服務(wù)端獲取其它服務(wù)端信息的功能又活。

1)分享:通過 URL 分享網(wǎng)頁內(nèi)容

早期分享應(yīng)用,為了更好地提供用戶體驗玄货,WEB 應(yīng)用在分享功能匯總皇钞,通過會獲取目標(biāo) URL 地址網(wǎng)頁內(nèi)容中的<title>標(biāo)簽或者<meta name="description" />標(biāo)簽中的文本內(nèi)容,作為顯示松捉,來提供更好的用戶體驗夹界。例如,人人網(wǎng)分享功能中:

http://widget.renren.com/****?resourceUrl=****

通過目標(biāo) URL 地址獲取了title標(biāo)簽和相關(guān)文本內(nèi)容。如果在此功能中沒有對目標(biāo)地址范圍做過濾與限制可柿,就存在 SSRF 漏洞鸠踪。

根據(jù)這個功能,我們可以發(fā)現(xiàn)許多互聯(lián)網(wǎng)公司都有這樣的功能复斥,下面是我們從百度分享集成的截圖营密,如下:

從國內(nèi)某漏洞提交平臺上提交的 SSRF 漏洞,可以發(fā)現(xiàn)包括淘寶目锭、百度评汰、新浪等國內(nèi)知名公司都曾發(fā)現(xiàn)過分享功能上存在 SSRF 漏洞。

2)轉(zhuǎn)碼服務(wù):通過 URL 地址把原地址的網(wǎng)頁內(nèi)容調(diào)優(yōu)使其適合手機屏幕瀏覽

由于手機屏幕大小的關(guān)系痢虹,直接瀏覽網(wǎng)頁內(nèi)容時會造成許多不便被去,因此有些公司提供了轉(zhuǎn)碼功能,把網(wǎng)頁內(nèi)容通過相關(guān)手段轉(zhuǎn)為適合手機屏幕瀏覽的演示奖唯。例如百度惨缆、騰訊、搜狗等公司都提供在線轉(zhuǎn)碼服務(wù)丰捷。

3)在線翻譯:通過 URL 地址翻譯對應(yīng)文本的內(nèi)容坯墨。提供此功能的國內(nèi)公司有百度、有道等

4)圖片加載與下載:通過 URL 地址加載或下載圖片

此功能用到的地方很多病往,但大多比較隱秘捣染,比如有些公司加載自家圖片服務(wù)器上的圖片用于展示。(有些公司會把外站圖片轉(zhuǎn)存到自家服務(wù)器荣恐,所以在 HTTP 讀取圖片時就可能造成 SSRF 問題液斜。)

5)圖片累贤、文章收藏功能

此處的文章收藏類似于分享功能中獲取 URL 地址中的標(biāo)題以及內(nèi)容作為顯示叠穆,目的還是為了更好的用戶體驗。圖片收藏就類似于圖片加載臼膏。

6)未公開的 API 實現(xiàn)以及其他調(diào)用 URL 的功能

此處類似的功能有 360 提供的網(wǎng)站評分硼被,以及有些網(wǎng)站通過 API 獲取遠(yuǎn)程地址 XML 文件來加載內(nèi)容。

這些功能中除了分宜和轉(zhuǎn)換服務(wù)為公共服務(wù)渗磅,其他功能均有可能在企業(yè)應(yīng)用開發(fā)過程中遇到嚷硫。

URL 關(guān)鍵詞尋找

根據(jù)對存在 SSRF 漏洞的 URL 地址特征的觀察,通過我一段時間的手機始鱼,大致有一下關(guān)鍵字:

  • share
  • wap
  • url
  • image
  • link
  • src
  • source
  • target
  • u
  • 3g
  • display
  • sourceUrl
  • imageUrl
  • domain

如果利用 google 語法(inurl:url=)加上這些關(guān)鍵字去尋找 SSRF 漏洞仔掸,耐心的驗證,現(xiàn)在還是可以找到存在的 SSRF 漏洞医清。

漏洞驗證

例如:

http://www.douban.com/***/service?image=http://www.baidu.com/img/bd_logo1.png

排除法一:

你可以直接右鍵圖片起暮,在新窗口打開圖片,如果瀏覽器上 URL 地址欄中是http://www.baidu.com/img/bd_logo1.png会烙,則不存在 SSRF负懦。

排除法二:

你可以使用 Burp 等抓包工具來判斷是否是 SSRF筒捺,首先 SSRF 是由服務(wù)端發(fā)起的請求,因此在加載圖片的時候纸厉,是由服務(wù)端發(fā)起的系吭,所以我們本地瀏覽器中的請求就不應(yīng)該存在圖片的請求,在此例子中颗品,如果刷新當(dāng)前頁面肯尺,有如下請求,則可判斷不是 SSRF躯枢。

比如蟆盹,圖片是百度上的,你調(diào)用的是搜狗闺金,瀏覽器向百度請求圖片逾滥,那么就不存在 SSRF 漏洞。如果瀏覽器向搜狗請求圖片败匹,那么就說明搜狗服務(wù)器發(fā)送了請求寨昙,向百度請求圖片,可能存在 SSRF掀亩。

此處說明下舔哪,為什么這邊用排除法來判斷是否存在 SSRF。舉個例子:

現(xiàn)在大多數(shù)修復(fù) SSRF 的方法基本都是區(qū)分內(nèi)外網(wǎng)來做限制槽棍。如果我們請求:

http://read.******.com/image?umageUrl=http://10.10.10.1/favicon.ico

而沒有內(nèi)容顯示捉蚤,我們就無法判斷此處不存在 SSRF,或者http://10.10.10.1/favicon.ico被過濾了炼七,還是根本就沒有這個圖片缆巧。因為我們事先不知道這個地址的文件是否存在,我們判斷不出是哪個原因豌拙,所以使用排除法陕悬。

實例驗證:

經(jīng)過簡單的排除驗證之后,我們就要驗證看看此URL是否可以來請求對應(yīng)的內(nèi)網(wǎng)地址按傅。在此例子中捉超,首先我們要獲取內(nèi)網(wǎng)存在HTTP服務(wù)且存在favicon.ico文件的地址,才能驗證是否是SSRF漏洞唯绍。

找存在HTTP服務(wù)的內(nèi)網(wǎng)地址:

一拼岳、從漏洞平臺中的歷史漏洞尋找泄漏的存在web應(yīng)用內(nèi)網(wǎng)地址

二、通過二級域名暴力猜解工具模糊猜測內(nèi)網(wǎng)地址

example:ping xx.xx.com.cn

可以推測10.215.x.x此段就有很大的可能:http://10.215.x.x/favicon.ico存在况芒。

再舉一個特殊的例子來說明:

http://fanyi.baidu.com/transpage?query=http://www.baidu.com/s?wd=ip&source=url&ie=utf8&from=auto&to=zh&render=1

此處得到的IP 不是我所在地址使用的IP惜纸,因此可以判斷此處是由服務(wù)器發(fā)起的http://www.baidu.com/s?wd=ip請求得到的地址,自然是內(nèi)部邏輯中發(fā)起請求的服務(wù)器的外網(wǎng)地址(為什么這么說呢,因為發(fā)起的請求的不一定是fanyi.baidu.com堪簿,而是內(nèi)部其他服務(wù)器),那么此處是不是SSRF痊乾,能形成危害嗎? 嚴(yán)格來說此處是SSRF椭更,但是百度已經(jīng)做過了過濾處理哪审,因此形成不了探測內(nèi)網(wǎng)的危害。

防御

通常有一下 5 個思路:

  1. 過濾返回信息虑瀑,驗證遠(yuǎn)程服務(wù)器對請求的相應(yīng)湿滓,是比較容易的方法。如果 Web 應(yīng)用獲取某種類型的文件舌狗,那么可以在把返回結(jié)果展示給用戶之前先驗證返回信息是否符合標(biāo)準(zhǔn)叽奥。

  2. 統(tǒng)一錯誤信息,避免用戶根據(jù)錯誤信息來判斷遠(yuǎn)程服務(wù)器端口狀態(tài)痛侍。

  3. 限制請求的端口為 HTTP 常用端口朝氓,比如 80、443主届、8080赵哲、8090。

  4. 黑名單內(nèi)網(wǎng) IP君丁,避免應(yīng)用被用來獲取內(nèi)網(wǎng)數(shù)據(jù)枫夺,攻擊內(nèi)網(wǎng)。

  5. 禁用不需要的協(xié)議绘闷。僅僅允許 HTTP 和 HTTPS 請求橡庞。可以防止類似于file://印蔗、gopher://ftp://等引起的問題扒最。

繞過

URL

http://username:password@www.xxx.com:80/
 |       |       |        |           |
協(xié)議   用戶名   密碼     主機        端口

所以我們就可以使用這個格式來繞過:

http://www.baidu.com@www.qq.com/

IP 轉(zhuǎn)換

轉(zhuǎn)為數(shù)字:

127.0.0.1

轉(zhuǎn)為十六進(jìn)制:

0x7F.0x00.0x00.0x01
0x7F000001

轉(zhuǎn)為八進(jìn)制;

0177.0000.0000.0001
C:\Users\asus\Desktop> ping 0x7F.0x00.0x00.0x01

正在 Ping 127.0.0.1 具有 32 字節(jié)的數(shù)據(jù):
來自 127.0.0.1 的回復(fù): 字節(jié)=32 時間<1ms TTL=128
來自 127.0.0.1 的回復(fù): 字節(jié)=32 時間<1ms TTL=128
來自 127.0.0.1 的回復(fù): 字節(jié)=32 時間<1ms TTL=128
來自 127.0.0.1 的回復(fù): 字節(jié)=32 時間<1ms TTL=128

127.0.0.1 的 Ping 統(tǒng)計信息:
    數(shù)據(jù)包: 已發(fā)送 = 4喻鳄,已接收 = 4扼倘,丟失 = 0 (0% 丟失),
往返行程的估計時間(以毫秒為單位):
    最短 = 0ms除呵,最長 = 0ms,平均 = 0ms
C:\Users\asus\Desktop> ping 0x7F000001

正在 Ping 127.0.0.1 具有 32 字節(jié)的數(shù)據(jù):
來自 127.0.0.1 的回復(fù): 字節(jié)=32 時間<1ms TTL=128
來自 127.0.0.1 的回復(fù): 字節(jié)=32 時間<1ms TTL=128
來自 127.0.0.1 的回復(fù): 字節(jié)=32 時間<1ms TTL=128
來自 127.0.0.1 的回復(fù): 字節(jié)=32 時間<1ms TTL=128

127.0.0.1 的 Ping 統(tǒng)計信息:
    數(shù)據(jù)包: 已發(fā)送 = 4爪喘,已接收 = 4颜曾,丟失 = 0 (0% 丟失),
往返行程的估計時間(以毫秒為單位):
    最短 = 0ms秉剑,最長 = 0ms泛豪,平均 = 0ms
C:\Users\asus\Desktop> ping 0177.0000.0000.0001

正在 Ping 127.0.0.1 具有 32 字節(jié)的數(shù)據(jù):
來自 127.0.0.1 的回復(fù): 字節(jié)=32 時間<1ms TTL=128
來自 127.0.0.1 的回復(fù): 字節(jié)=32 時間<1ms TTL=128
來自 127.0.0.1 的回復(fù): 字節(jié)=32 時間<1ms TTL=128
來自 127.0.0.1 的回復(fù): 字節(jié)=32 時間<1ms TTL=128

127.0.0.1 的 Ping 統(tǒng)計信息:
    數(shù)據(jù)包: 已發(fā)送 = 4,已接收 = 4,丟失 = 0 (0% 丟失)诡曙,
往返行程的估計時間(以毫秒為單位):
    最短 = 0ms臀叙,最長 = 0ms,平均 = 0ms

URL 跳轉(zhuǎn)

<?php header("Location: $_GET['url']"); ?>

保存為urllocation.php然后部署价卤,之后可以用http://<host>/urllocation.php?url=<url>來跳轉(zhuǎn)劝萤。

短網(wǎng)址

百度:http://dwz.cn/

xip.io

            gg                       gg
            ""                       ""
,gg,   ,gg  gg   gg,gggg,            gg     ,ggggg,
 ""8b,dP"   88   I8P"  "Yb           88    dP"  "Y8ggg
   ,88"     88   I8'    ,8i          88   i8'    ,8I
 ,dP"Y8,  _,88,_,I8 _  ,d8'   d8b  _,88,_,d8,   ,d8'
dP"   "Y888P""Y8PI8 YY88888P  Y8P  8P""Y8P"Y8888P"
                 I8
                 I8    wildcard DNS for everyone 
                 ""
    
What is xip.io?
xip.io is a magic domain name that provides wildcard DNS
for any IP address. Say your LAN IP address is 10.0.0.1.
Using xip.io,

          10.0.0.1.xip.io   resolves to   10.0.0.1
      www.10.0.0.1.xip.io   resolves to   10.0.0.1
   mysite.10.0.0.1.xip.io   resolves to   10.0.0.1
  foo.bar.10.0.0.1.xip.io   resolves to   10.0.0.1

...and so on. You can use these domains to access virtual
hosts on your development web server from devices on your
local network, like iPads, iPhones, and other computers.
No configuration required!
    
How does it work?
xip.io runs a custom DNS server on the public Internet.
When your computer looks up a xip.io domain, the xip.io
DNS server extracts the IP address from the domain and
sends it back in the response.
    
Does xip.io cost anything?
Nope! xip.io is a free service from Basecamp, the
creators of Pow. We were tired of jumping through hoops
to test our apps on other devices and decided to solve
the problem once and for all.
    
? 2012-2014 Sam Stephenson, Basecamp

附錄

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市慎璧,隨后出現(xiàn)的幾起案子床嫌,更是在濱河造成了極大的恐慌,老刑警劉巖胸私,帶你破解...
    沈念sama閱讀 221,635評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件厌处,死亡現(xiàn)場離奇詭異,居然都是意外死亡岁疼,警方通過查閱死者的電腦和手機阔涉,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,543評論 3 399
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來捷绒,“玉大人洒敏,你說我怎么就攤上這事「砑荩” “怎么了凶伙?”我有些...
    開封第一講書人閱讀 168,083評論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長它碎。 經(jīng)常有香客問我函荣,道長,這世上最難降的妖魔是什么扳肛? 我笑而不...
    開封第一講書人閱讀 59,640評論 1 296
  • 正文 為了忘掉前任傻挂,我火速辦了婚禮,結(jié)果婚禮上挖息,老公的妹妹穿的比我還像新娘金拒。我一直安慰自己,他們只是感情好套腹,可當(dāng)我...
    茶點故事閱讀 68,640評論 6 397
  • 文/花漫 我一把揭開白布绪抛。 她就那樣靜靜地躺著,像睡著了一般电禀。 火紅的嫁衣襯著肌膚如雪幢码。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,262評論 1 308
  • 那天尖飞,我揣著相機與錄音症副,去河邊找鬼店雅。 笑死,一個胖子當(dāng)著我的面吹牛贞铣,可吹牛的內(nèi)容都是我干的闹啦。 我是一名探鬼主播,決...
    沈念sama閱讀 40,833評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼辕坝,長吁一口氣:“原來是場噩夢啊……” “哼窍奋!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起圣勒,我...
    開封第一講書人閱讀 39,736評論 0 276
  • 序言:老撾萬榮一對情侶失蹤费变,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后圣贸,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體挚歧,經(jīng)...
    沈念sama閱讀 46,280評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,369評論 3 340
  • 正文 我和宋清朗相戀三年吁峻,在試婚紗的時候發(fā)現(xiàn)自己被綠了滑负。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,503評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡用含,死狀恐怖矮慕,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情啄骇,我是刑警寧澤痴鳄,帶...
    沈念sama閱讀 36,185評論 5 350
  • 正文 年R本政府宣布,位于F島的核電站缸夹,受9級特大地震影響痪寻,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜虽惭,卻給世界環(huán)境...
    茶點故事閱讀 41,870評論 3 333
  • 文/蒙蒙 一橡类、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧芽唇,春花似錦顾画、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,340評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至疚膊,卻和暖如春义辕,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背寓盗。 一陣腳步聲響...
    開封第一講書人閱讀 33,460評論 1 272
  • 我被黑心中介騙來泰國打工灌砖, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人傀蚌。 一個月前我還...
    沈念sama閱讀 48,909評論 3 376
  • 正文 我出身青樓基显,卻偏偏與公主長得像,于是被迫代替她去往敵國和親善炫。 傳聞我的和親對象是個殘疾皇子撩幽,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,512評論 2 359

推薦閱讀更多精彩內(nèi)容