一行程式碼解決iframe掛馬(伺服器端注入、客戶端ARP注入等)
一行程式碼解決iframe掛馬(包含伺服器端注入、客戶端ARP注入等)
本文原創:linr@cncert.net 請轉載時保留版權資訊
相信大多數朋友都是iframe木馬的受害者,有朋友的網站被注入了N回iframe,心情可想而知。而且現在ARP攻擊,注入iframe也是輕而易舉的事,僅區域網裡都時刻面臨威脅,哎,什麼世道。
靈兒曾經在經典論壇上發過貼子:《一行程式碼解決網站防掛IFRAME木馬方案》http://bbs.blueidea.com/thread-2785512-1-1.html ,有不少朋友都聯絡了靈兒,有的表示感謝,不過更多的是疑問了,今天把原理細細地講一下吧:
IE Only——一般只有IE害怕iframe這樣的掛馬,所以靈兒就拿IE開刀。
在閱讀本文之前,我們先了解一下expression;
IE5及其以後版本支援在CSS中使用expression,用來把CSS屬性和JavaScript指令碼關聯起來,這裡的CSS屬性可以是元素固有的屬性,也可以是自定義屬性。就是說CSS屬性後面可以是一段JavaScript表示式,CSS屬性的值等於Javascript表示式執行的結果。在表示式中可以直接引用元素自身的屬性和方法,也可以使用其他瀏覽器物件。這個表示式就好像是在這個元素的一個成員函式中一樣。
很多朋友都知道CSS可以直接描述一個可視標記的外觀。例如:p{color:red} 則網頁裡所有p標記裡的文字顏色都會變成紅色;iframe不也是一個標記嗎?開始跟靈兒寫程式碼吧,呵呵:
iframe{…這裡寫描述外觀的CSS程式碼;};
仔細想想要防止iframe裡的東東被下載的最好辦法是什麼?核心來了,那就是切斷iframe裡的請求,切斷請求就是要迅速銷燬iframe物件。如何實現呢,上面不是介紹了expression嗎?expression是可以執行JS指令碼的哈。語法格式如下二種:
標記固有的CSS屬性名:expression(JS表示式);
或 自定義屬性名:expression(JS表示式);
在這裡我們選擇第二種,程式碼應該大致是這樣
iframe{v:expression(JS表示式);}
接下來的問題是如何銷燬網頁裡所有的iframe物件;使用JS實現的原理是這樣的:使iframe裡的請求地址變成空白頁(about:blank),再將iframe物件從DOM(文件物件模型)中移除就可以切斷所有iframe裡的請求了。移除DOM節點的方法比較多,我這裡就用 outerHTML這個屬性吧。CSS程式碼如下:
iframe{v:expression(this.src=`about:blank`,this.outerHTML=“);}
說明:前面的v字是靈兒自己定義的一個CSS屬性,這裡的this代表所有將要描述外觀的iframe物件,中間的逗號代表二句程式碼一起執行,沒有執行優先順序,這可是強有力的保證噢。about:blank代表空白頁,大家都知道的。outerHTML屬性是DOM物件包含自身的HTML程式碼,而 innerHTML則是DOM物件(不含本身)裡面所包含的HTML程式碼。
爽快,程式碼寫好了,就讓我信來測試一下有沒有效果。
首先,新建一個網頁,插入以上的CSS程式碼(或在您現有的CSS程式碼里加入上面那句):
<style type=”text/css”>
iframe{v:expression(this.src=`about:blank`,this.outerHTML=“);}
</style>
然後在這個頁面插入幾個IFRAME程式碼,假設它們是被掛的木馬網頁。程式碼如下:
<iframe src=”http://www.baidu.com”></iframe> 百度
<iframe src=”http://www.126.com/”></iframe> 126郵箱
<iframe src=”http://www.163.com”></iframe> 網易
儲存為noiframe.htm,開啟瀏覽器測試一下(本地測試需要啟用頂部禁用的指令碼的提示條哦)。我這裡使用抓包工具來測試,不過也沒有必要使用抓包工具,一個最簡單有效的方法是開啟IE的快取資料夾,先清空它,再重新整理這個頁面,看看快取資料夾裡有沒有這三個網站裡的檔案。如果沒有,說明沒有任何請求結果被返回——測試結果是令人滿意的,我的臉上有些微笑 ^^*,這時同事遞給我一塊餅,蠻好吃的。
提示:Windows XP SP2的快取資料夾位置 C:/Documents and Settings/Administrator/Local Settings/Temporary Internet Files
細心的朋友發現問題來了,如果我自己的網頁裡要使用iframe這個東東怎麼辦?
答:如果要使自己的iframe顯示在網頁裡,而別人掛的IFRAME馬都不起作用,在CSS里加一個
#f126{v:expression() !important}
對應的IFRAME程式碼為:
<iframe id=”f126″ name=”f126″ src=”http://www.126.com/”></iframe>
就OK了。
提示:IE7中優先執行標註有“!important”描述的樣式,IE6不認識!important,採用就近原則,所以IE6的這個程式碼放在CSS的最後就可以了。
這裡的f126,有很多朋友有疑問,他們問我為什麼取”f126″,我這樣回答——這個f126是隨意取的,只要下面的iframe裡的ID屬性和CSS裡的一致就行了。同事又要遞一塊餅我吃,我說飽了哈..嘻嘻..
當然掛馬者可以構造這樣的程式碼
<iframe style=”v:expression() !important” src=”URL”></iframe>
使我的防禦方式失效,不過它得特意去看我的CSS程式碼裡iframe裡的字首v,如果我的v是變化的呢,哈哈,是不是也不管用呢!
小結:以上的方法只是停止了iframe的請求並銷燬了它本身,但以後的掛馬方式改變了,例如改成
<script></script>
方式掛,就不能用這種方法來解決了;此這個方法不是最終的解決案,最終的解決方案是找出真正被掛IFRAME的原因,堵住源頭。這可不是我的事哈,呵~
相關文章
- NEO 客戶端外掛客戶端
- Java Netty伺服器客戶端聊天示範程式碼JavaNetty伺服器客戶端
- 程式碼注入
- Redis原始碼剖析——客戶端和伺服器Redis原始碼客戶端伺服器
- FTP客戶端c程式碼功能實現FTP客戶端C程式
- 「iOS」行車服務app 「客戶端、後端思路+程式碼」iOSAPP客戶端後端
- Java UDP伺服器和客戶端原始碼 -javarevisitedJavaUDP伺服器客戶端原始碼
- 網路暗黑世界的“域影”攻擊:運營商劫持LOL等客戶端海量級掛馬客戶端
- MQTT伺服器搭建服務端和客戶端MQQT伺服器服務端客戶端
- ASP程式設計中Session物件失效的客戶端解決方法程式設計Session物件客戶端
- TCP通訊客戶端和服務端簡單程式碼實現TCP客戶端服務端
- 服務端,客戶端服務端客戶端
- 客戶端,服務端客戶端服務端
- 編寫 Netty / RPC 客戶端【框架程式碼分析】NettyRPC客戶端框架
- win10最強注入工具,遠端執行緒注入、訊息鉤子注入、輸入法注入、EIP注入、登錄檔注入、APC注入(APC好像不能用)Win10執行緒
- golang實現tcp客戶端服務端程式GolangTCP客戶端服務端
- [程式碼已開源]叢集聊天伺服器與客戶端開發伺服器客戶端
- Android so庫防客戶端破解的解決方案Android客戶端
- 客戶端影片渲染目前最理想的解決方案客戶端
- 程式注入之DLL注入
- 服務端和客戶端 RESTful 介面上傳 Excel 的 Python 程式碼服務端客戶端RESTExcelPython
- 遠端除錯伺服器python程式碼解決方案除錯伺服器Python
- dubbo客戶端客戶端
- Pulsar客戶端客戶端
- mqtt 客戶端MQQT客戶端
- Spring注入:配置注入(set注入和構造器注入)與註解注入Spring
- 無密碼驗證:客戶端密碼客戶端
- nuxt反向代理,解決客戶端服務端兩者之間衝突UX客戶端服務端
- 程式碼注入之遠端呼叫執行緒的一些問題執行緒
- React 伺服器端渲染和客戶端渲染效果對比React伺服器客戶端
- Redis 6.0 客戶端快取的伺服器端實現Redis客戶端快取伺服器
- SAP UI渲染模式:客戶端渲染 VS 伺服器端渲染UI模式客戶端伺服器
- Curator(ZoooKeeper客戶端)使用詳解客戶端
- 客戶端 post ,get 訪問伺服器客戶端伺服器
- Easyvision中的伺服器與客戶端伺服器客戶端
- LINUX下完整的TCP epoll 伺服器和客戶端程式碼,用作備份LinuxTCP伺服器客戶端
- 雲伺服器ASP判斷客戶端是手機或電腦程式碼伺服器客戶端
- Nacos - 客戶端心跳續約及客戶端總結客戶端
- [指令碼]百度網盤直接下載助手:解決客戶端限制指令碼客戶端