multipart/form-data是一種瀏覽器用來發送Form資料的方法,特別的是,它支援binary code的檔案傳輸
今天試著要用XMLHttpRequest來來模擬multipart/form-data發送資料(因為要上傳檔案)
今天找很久的資料後,決定還是用Wireshark來捕捉一下封包,看看到底是如何運作的
搭配 RFC1867 成功的進行了模擬,上傳資料
XMLHttpRequest open後,必須先設置header,告訴伺服器你是multipart/form-data
http.setRequestHeader("Content-Type","multipart/form-data; boundary=----1AwOmRxb2KluSNh90S1qesEo")
multipart/form-data; 告訴伺服以multipart/form-data傳送資料
boundary=----1AwOmRxb2KluSNh90S1qesEo 則定義boundary,用來當作分隔字串用的(每個資料都以boundary=XXX 後面那串分隔)
接著設定要傳送的資料
var param="";
param+='------1AwOmRxb2KluSNh90S1qesEo\r\n';
param+='Content-Disposition: form-data; name="filedata"\r\n';
param+='\r\n';
param+=data+'\r\n';
param+="------1AwOmRxb2KluSNh90S1qesEo--\r\n"
資料以分隔字串開頭(之後分隔字串前面都加上兩個--,原因還不清楚),用\r\n進行換行(很重要)
接著用Content-Disposition: form-data; name="filedata"\r\n定義欄位名稱
再接一個\r\n後
下一行為你要發為你要發送的欄位資料,後面還是得接\r\n
就這樣一組一組定義欄位跟資料(每組前面記得要有一個前面加--的分隔字串)
最後定義完後,以------1AwOmRxb2KluSNh90S1qesEo--\r\n結尾
基本上是 -- + 分隔字串 + -- + \r\n
最後用XMLHttpRequest的send方法發送param出去即可
Saturday, July 31, 2010
Monday, July 26, 2010
TestFilter-TestMiniFilter Driver載入Rule
為了改善Program複雜度跟強化安全性,今天決定要由Driver來讀取規則檔並且載入規則
一開始便發現到Driver由於是SERVICE_BOOT_START,過早啟動導致系統很多部分都還沒有載入完成,導致讀規則檔有一定難度。後來的將啟動順序改為SERVICE_SYSTEM_START延緩載入(系統也準備的差不多了)
一開始便發現到Driver由於是SERVICE_BOOT_START,過早啟動導致系統很多部分都還沒有載入完成,導致讀規則檔有一定難度。後來的將啟動順序改為SERVICE_SYSTEM_START延緩載入(系統也準備的差不多了)
Thursday, July 22, 2010
TestFilter-TestMiniFilter Rule檔讀取和動態載入
修復了兩個本來沒有發現,非常奇怪的Bug
一個是沒有注意到驅動中的Stack有限,宣告了過大的區域變數導致Stack Overflow(之前WinDbg一直顯示問題在一個DbgPrint呼叫,後來拿掉DbgPrint後,真正的Stack Overflow問題才浮現)
一個是漏看了MSDN文件的一小部分,導致FltSendMessage傳入的ReplyLength參數值大於緩衝區的大小,造成緩衝區溢位,也學到了MSDN文件一定要看清楚
一個是沒有注意到驅動中的Stack有限,宣告了過大的區域變數導致Stack Overflow(之前WinDbg一直顯示問題在一個DbgPrint呼叫,後來拿掉DbgPrint後,真正的Stack Overflow問題才浮現)
一個是漏看了MSDN文件的一小部分,導致FltSendMessage傳入的ReplyLength參數值大於緩衝區的大小,造成緩衝區溢位,也學到了MSDN文件一定要看清楚
Wednesday, July 21, 2010
TestFilter-TestMiniFilter Create Read Write Delete權限過濾+Client部分管理功能
今天完成了Create Read Write Delete四個主要權限過濾
Client則完成了捕捉Filter傳回的Deny事件
在下午增加權限控制時,外面突然下起大雷雨,也發現到,要在每五秒就一個閃電的環境下很難寫程式
Client則完成了捕捉Filter傳回的Deny事件
在下午增加權限控制時,外面突然下起大雷雨,也發現到,要在每五秒就一個閃電的環境下很難寫程式
Tuesday, July 13, 2010
Wednesday, July 7, 2010
Echeneidae IDS 網頁操作介面
上一個版本發布後,便開始著手於網頁操作介面的設計
使用了大量的JavaScript結合基本的AJAX技術做了個簡單明瞭的操作介面
使用了大量的JavaScript結合基本的AJAX技術做了個簡單明瞭的操作介面
Dashboard,顯示出基本資料
點選View Log後,顯示出各個規則的記錄檔
Saturday, July 3, 2010
Echeneidae IDS 2 Alpha 3 Release
感謝upside網友測試,發現一般直接使用ADSL的用戶在網路連結層方面定義不太一樣,已經加入支援PPPoE了
http://xcfileapp.appspot.com/download/echeneidae2alpha3.zip?fileid=1278147197.27
http://xcfileapp.appspot.com/download/echeneidae2alpha3.zip?fileid=1278147197.27
Echeneidae IDS 2 Alpha 2 Release
經過長時間的Debug後,我終於解決了那個隱藏的Bug,原來是對IP碎片封包組合出了點錯誤,導致IDS卡死(事實上也發現了我對IP碎片理解的錯誤,所以重組模組幾乎是重新改寫)
接著雙擊echeneidae.py啟動IDS,如果無法開啟,請執行run.bat(裡面的python.exe路徑預設為C:\Python31\python.exe,如果你裝在別的路徑,請修改)
Alpha 2中我強化了簡陋的規則,目前能追蹤TCP連線,檢測TCP Scan跟UDP Scan(通過Nmap基礎測式),會將紀錄檔存在log資料夾下,並且加上時間和哪條規則觸發的詳細資訊
也修補了不少小地方的Bug,讓IDS更加穩定
目前還有的問題是,IP碎片重組後不會驗證是否所有碎片已到齊,這功能將會在下一版中加入
其它特色我在Echeneidae IDS 2 Alpha 1 Release已經說明了
使用方法有些改變,如下
- 由於會有一個packet.swap當暫存檔(610MB),所以建議至少準備1GB以上硬碟空間
記憶體建議至少有128MB的空間(1G以上最好) - 建議把IDS放在英文目錄下
- 需要Winpcap捕捉封包,並且需要Python 3.1.2(32bit版本,可裝在64bit OS上)來執行IDS
- 下載IDS http://xcfileapp.appspot.com/download/echeneidae2alpha2.zip?fileid=1278128714.7
接著雙擊echeneidae.py啟動IDS,如果無法開啟,請執行run.bat(裡面的python.exe路徑預設為C:\Python31\python.exe,如果你裝在別的路徑,請修改)
這時它會詢問你要監控哪一張網卡,請輸入上面列出網卡旁的編號
接著它會問你是否要把紀錄顯示在螢幕上(這樣會比較耗CPU),一般建議選0,不要顯示
Enter後,便會停住,這時IDS已經開始運作了,請不要關閉這個視窗(關閉它代表停止IDS)
要看紀錄可以去log資料下,會有紀錄檔
關於規則的寫法,我之後會公布,有興趣的人可以先去研究一下rule資料夾下的規則檔
基本上Python是這個IDS的效能致命傷,我已經盡量改善了,建議在多核心CPU上運行,這樣可以發揮經過設計的平行運算效能
Subscribe to:
Posts (Atom)