如何入侵Pocket內網(wǎng)

責任編輯:editor005

作者:Sphinx

2015-08-25 14:34:39

摘自:FreeBuf

最近,Pocket應用的開發(fā)人員修復了幾個泄露數(shù)據(jù)的漏洞,黑客可從服務器上獲取敏感信息。通過修改server-status 的GET參數(shù),攻擊者可以強制然Pocket重新下載頁面,這樣黑客就有可能獲取到不同服務器的信息。

最近,Pocket應用的開發(fā)人員修復了幾個泄露數(shù)據(jù)的漏洞,黑客可從服務器上獲取敏感信息。這里獻上教程,供大家學習交流。

如何入侵Pocket內網(wǎng)

  Pocket是什么

我已經(jīng)很多年沒把Firefox當作我的主力瀏覽器了,所以其實之前我都沒有聽說過Pocket,直到我在Bugzilla看到這么篇帖子,講的就是Mozilla基金會在所有版本的Firefox中預裝了Pocket插件,并且這個插件無法卸載。盡管這引起了用戶們的強烈抗議,基金會還是固執(zhí)地綁定Pocket。

Pocket的功能就是讓用戶保存網(wǎng)頁“稍后閱讀”。Pocket可以將你要閱讀或者一時沒有讀完的網(wǎng)頁標記下來,接著同步到服務器端,然后你就可以在不同的設備上閱讀。作為信息安全從業(yè)者,我發(fā)現(xiàn)這種功能通常都會導致安全問題,所以我就打算檢查一下Pocket有沒有問題。

事實上,這些漏洞中,大部分就可以被攻擊者利用了。攻擊者想要利用這些漏洞都不需要什么復雜的工具,甚至連腳本的知識都不需要。

嘗試1:協(xié)議處理程序

用戶可以通過Pocket網(wǎng)站上的隊列管理功能添加URL到隊列中。由于應用的用途主要是瀏覽網(wǎng)上的網(wǎng)頁,所以這些URL理應被限制,應該只允許http和https鏈接。所以首先我嘗試在隊列中添加以下鏈接:

file:///etc/passwd

ssh://localhost

telnet://localhost:25

很遺憾,經(jīng)過測試,這些都沒成功

嘗試2:利用Pocket功能作為內網(wǎng)代理

我之前在Apache服務器的狀態(tài)頁面看到過一條Apache錯誤信息。這種錯誤信息通常是.htaccess或者Apache配置文件限制了localhost或一些信任的網(wǎng)段訪問server-status的時候才會出現(xiàn)的:

Forbidden

You don't have permission to access /server-status on this server.

我在我的Pocket隊列中加了一條新鏈接:http://127.0.0.1/server-status。加入后,后端服務器就會發(fā)送HTTP請求獲取內容。Apache會信任來自localhost的請求嗎?

事實證明,這一招很管用,之后我就在Pocket隊列中看到了如下信息:

Apache Server Status for 127.0.0.1

Server Version: Apache/2.2.29 (Unix) DAV/2

Server Built: Mar 12 2015 03:50:17

Current Time: Tuesday, 28-Jul-2015 10:07:45 CDT

Restart Time: Tuesday, 28-Jul-2015 03:20:12 CDT

Parent Server Generation: 12

Server uptime: 6 hours 47 minutes 32 seconds

Total accesses: 241913 - Total Traffic: 4.1 GB

CPU Usage: u1209.24 s110.06 cu0 cs0 - 5.4% CPU load

9.89 requests/sec - 177.5 kB/second - 17.9 kB/request

40 requests currently being processed, 14 idle workers

...

服務器狀態(tài)情況的全部輸出被同步到了我的Android上。Apache的mod_status可以顯示出大量有用的信息,包括內部來源和目標IP地址,發(fā)送的請求中的URL的參數(shù),還有查詢參數(shù)。對于Pocket應用,請求的URL包括Pocket用戶們正在瀏覽的URL,因為這些請求是通過HTTP GET方式進行的。

要隱藏上述的這些服務器信息,我們可以關閉Apache中的ExtendedStatus。大部分Pocket的后端服務器都關閉了ExtendedStatus,但是很小一部分的服務器還是開著,所以就導致攻擊者可以獲取到這些有用的信息。

另外,通過修改server-status 的GET參數(shù),攻擊者可以強制然Pocket重新下載頁面,這樣黑客就有可能獲取到不同服務器的信息。

http://127.0.0.1/server-status?meaningless_parameter=1

http://127.0.0.1/server-status?meaningless_parameter=2

http://127.0.0.1/server-status?meaningless_parameter=3

Pocket搭建在亞馬遜EC2上

既然Pocket存在漏洞可以讓用戶獲取到Pocket后端服務器的相關信息,我們就看看利用這個漏洞我們還能獲取到哪些信息。簡單使用dig命令,我們就可以知道Pocket用的是亞馬遜的EC2服務器。亞馬遜的EC2有個實例元數(shù)據(jù)服務。這個服務只能從內部訪問,無需驗證,在所有的EC2實例上都有。我們可以嘗試使用這個服務獲取更多的信息:

http://169.254.169.254/latest/meta-data/

http://169.254.169.254/latest/meta-data/hostname

http://169.254.169.254/latest/meta-data/ami-id

在Pocket隊列中添加了上面的這些鏈接后,我就能看到完整的服務器回應了。EC2的元數(shù)據(jù)包括很多對攻擊者有用的信息,包括IAM登錄信息,還有關于這個instance的細節(jié)信息,包括可用區(qū)、instance類型、網(wǎng)絡類型、MAC地址,塊存儲器的信息等。

攻擊者還可以干什么呢?

對localhost的HTTP服務進行端口掃描,這可以繞過EC2的防火墻規(guī)則

對端口掃描的結果進行分析,識別開啟的web應用

在Pocket內部環(huán)境下進行漏洞利用

很多大企業(yè)或者小公司都會有只能通過內部訪問的web應用,這些應用通常無需驗證,因此很容易會被攻擊者利用。

server-status中的這些內部IP地址能用來干什么呢

從亞馬遜EC2元數(shù)據(jù)上可以看出,Pocket使用的EC2服務器是在us-east-1(美東1區(qū))區(qū)域,網(wǎng)絡類型是classic(EC2有兩種網(wǎng)絡類型可選:EC2-Classic 和VPC。VPC更好一些,有些實例類型也只有VPC上才有。VPC在創(chuàng)建子網(wǎng)絡和訪問控制列表(ACL)的時候更加靈活)。

由于Pocket用的是EC2-Classic,要訪問server-status中的內部IP地址,只需要在us-east-1區(qū)域租個2美分/小時的t1.micro實例。這樣攻擊者就可以使用RFC-1918地址訪問這些實例上運行的服務了,例如ssh和http,甚至還可以進行端口掃描。

使用這些內部IP地址訪問后端服務器有幾個優(yōu)點:

可以繞過前端負載平衡器和前端的WAF防火墻之類的東西,在有前端負載平衡器的情況下,攻擊者可以通過設置X-Forwarded-For修改源IP地址,黑客可以通過這種方法避開ACL或者偽造log。

輸入重定向

像Pocket這一類的應用在處理HTTP重定向鏈接的時候很有可能會忽視某些問題,造成安全隱患。那在URL隊列中加入重定向鏈接會發(fā)生什么呢?我輸入了file:///etc/passwd,后果很嚴重:

HTTP/1.1 301 Moved Permanently

Location: file:///etc/passwd

Content-Length: 52

Date: Tue, 28 Jul 2015 18:42:58 GMT

Connection: keep-alive

Moved Permanently. Redirecting to file:///etc/passwd

我在Android機上刷新了Pocket應用后,隊列中就增加了file:///etc/passwd。點擊之后,/etc/passwd完整的內容就呈現(xiàn)在了我眼前。

應Pocket的要求,/etc/passwd內容已刪除

漏洞能夠造成什么影響可以留給讀者考慮。

有了/etc/passwd之后能干什么

在測試Pocket的時候,我用這個重定向漏洞請求了file:///proc/self/status文件,這個文件可以用來獲取正在運行的進程的更多信息。

下面就是部分進程狀態(tài)信息:

Uid: 0 0 0 0

Gid: 0 0 0 0

以root身份運行這個進程能夠造成什么后果也留給讀者考慮。

把漏洞結合起來

Pocket針對我的報告快速做出了回應,所以我沒能夠把這些漏洞結合起來。但是設想如果真的有個心懷不軌的攻擊者發(fā)現(xiàn)了這些漏洞,他能做些什么呢?

1. 通過301重定向獲取file:///etc/passwd文件,然后獲取EC2用戶的home目錄

2. 從用戶home目錄獲取ssh私鑰

3. 使用/server-status獲取內部IP地址

4. 租一個EC2實例,地區(qū)設置在US-EAST-1地區(qū)

5. 用獲取的到的ssh私鑰連接Pocket后端服務器的IP地址

接下來能做什么,你懂的^_^

Pocket的漏洞披露政策還是很負責的,我把所有的漏洞細節(jié)第一時間提交給了Pocket官方,而漏洞披露時間是由提交者自行決定的,不過要在漏洞提交后的21天后,好讓Pocket有時間處理漏洞?,F(xiàn)在漏洞都已經(jīng)修復。

鏈接已復制,快去分享吧

企業(yè)網(wǎng)版權所有?2010-2024 京ICP備09108050號-6京公網(wǎng)安備 11010502049343號