About Me

我的相片
台北市, Taiwan
我是方選,
方白科技(finebind tech.)共同創辦人,
臺大資管所畢,
希望能幫助更多的人!

FB: http://fb.com/function1122
LINE: http://bit.ly/1foeZft (手機開啟點擊網址自動加入)

最新15則讀者回應

最新文章

FUNction's 上課筆記

Label Cloud

Blog Archive

FeedBurner

追蹤者

某公司網站的駭客事件 (二)

FUNction 於 2008年1月26日 下午3:39 發表
上篇:某公司網站的駭客事件(一)
點惱殘的我,身邊伴著一台小筆電。我覺得在機櫃上找太辛苦,不只要半蹲著(說到這...為什麼每個機櫃的螢幕高度都那麼適中,站著用太矮,坐著用太高),還要把頭伸進去,於是我就要求把他們的Log 資料夾複製一份給我。

我拿著我的小筆電開心的找著,不時會有公司裡的人走過來問我找到沒。一開始,我用Dreamweaver 來找,因為他裡面有個"搜尋整個資料夾原始碼"的功能,但可能因為附檔名(.log)的關係,一樣徒勞無功。我開始腦殘了...打開Notepad++

請你記住一句名言:人,要作有挑戰性的事;任何重複的事,就交給電腦做!!

我檢視了一下Log 的格式,發現:
2005-12-16 01:29:43 192.168.1.5 GET /Default.htm - 80 - 192.168.1.101 Mozilla/4.0+(compatible;+MSIE+6.0;+Windows+NT+5.1) 200 0 0
這是查詢/Default.htm 這個網頁的記錄檔,可以看到來源IP是192.168.1.101,使用的瀏覽器是IE6.0,作業統是XP(Windows NT 5.1)

2005-12-16 03:40:23 192.168.1.5 GET /Search.asp q=FUNction's%20Blog 80 - 192.168.1.102 Mozilla/4.0+(compatible;+MSIE+6.0;+Windows+NT+5.1;+SV1) 200 0 0
這裡多了一個"q=FUNction's%20Blog",是他的查詢字串,由於前一筆資料中沒有查詢字串,所以用一槓"-"代替

好了...這很有規律


  • 檔案名稱以日期編號
  • 來源IP 在每筆資料中第九個位置
  • 瀏覽時間在每筆資料中的第二個位置
  • 查詢字串在每筆資料中的第六個位置

找到這樣的規律,只要寫個簡單的程式,就可以把所有記錄當中查詢某個特定字串的IP找出來囉 ^__^ 由於小弟學藝不精,程式語言會的不多,剛好手上有環境(小筆電裡有Apache+PHP),就用現成的環境寫寫看。

以下列出程式碼,短短66 行:

<?php
$findStr = $_GET['q'];
$fileFolder = "C:/Windows/system32/LogFiles/W3SVC1/";

//這裡指定存放Log 的資料夾
$handle = opendir($fileFolder); //開啟資料夾
echo "<h1>Query String: ".$findStr."</h1>\n";
while ($filename = readdir($handle)) {

//依序將資料夾內每個元素(檔案、資料夾)名稱取得
$fullfilename = $fileFolder.$filename;

//組合成完整檔案路徑
if(is_file($fullfilename)){
//如果是檔案的話
$fd = fopen ($fullfilename, "r"); //開啟檔案
$contents = fread($fd, filesize($fullfilename));

//將所有資料傾印到變數$contents 裡
fclose($fd);
//關閉檔案
$times = substr_count($contents, $findStr);

//計算$contents 裡出現多少次要查詢的字串
if($times > 0){ //如果出現一個以上就要查詢他的IP
echo "<h3>".$filename."</h3>\n";

//輸出檔案名稱
getIISLogIp($contents, $findStr);

//列出該檔案中有查詢的IP
}
}
}
closedir($handle); //關閉資料夾

#讀取其中一日的記錄,標明哪些IP 有送出我們要追聰的查詢
function getIISLogIp($contents, $findStr){
$lineArr = explode("\r\n", $contents);

//使用換行切開檔案(每筆記錄一行)
$iptmp;
$output;
foreach($lineArr as $line){ //逐行檢查
$tmp = explode(" ", $line);

//使用空白" "切開每一行的資料
$time = $tmp[1]; //時間在第二個位置
if($tmp[8] != null){
$ip = $tmp[8]; //IP在第九個位置
$sub = strstr($tmp[5], $findStr);

//查詢字串在第六個位置
//strstr(文字, 查詢目標)
if($sub){//如果有找到
if($iptmp[$ip] == null){

//這裡是優化,如果這個IP 不是曾經查過的,則進行反解
$hostName = gethostbyaddr($ip);

//使用類似nslookup 查詢該IP的主機名稱
$iptmp[$ip] = $hostName;

//將該IP 為key ,把主機名稱存入優化陣列
$output[$ip] = $hostName." (".$ip.") - ".$time;

//建立要輸出字串
}else{

//如果曾經反解過,就不要在查了...反解超浪費時間
$output[$ip] .= ", ".$time;

//將時間接在輸出字串之後
}
}
}
}

//如果有輸出字串,則對輸出字串的ISP 做分析
if(sizeof($output) > 0) getISPColor($output);

}

#針對普遍的ISP,進行輸出變色
function getISPColor($ipArray){
echo "<ul>";
foreach($ipArray as $ipData){
if(strstr($ipData, "hinet")){

//中華電信為紅色
echo "<li><span style=\"background-color:#FF0000; color: #FFFFFF;\">".$ipData."</span></li>\n";
}elseif(strstr($ipData, "seed")){

//Seednet為綠色
echo "<li><span style=\"background-color:#00FF00;\">".$ipData."</span></li>\n";
}elseif(strstr($ipData, "giga")){

//Giga網路為藍色
echo "<li><span style=\"background-color:#0000FF;\">".$ipData."</span></li>\n";
}elseif(strstr($ipData, "tfn")){

//TFN網路為黃色
echo "<li><span style=\"background-color:#FFFF00;\">".$ipData."</span></li>\n";
}elseif(strstr($ipData, "apol")){

//亞太電信為亮藍色
echo "<li><span style=\"background-color:#00FFFF;\">".$ipData."</span></li>\n";
}elseif(strstr($ipData, "so-net")){

//So-Net為紫色
echo "<li><span style=\"background-color:#FF00FF;\">".$ipData."</span></li>\n";
}else{
echo "<li>".$ipData."</li>\n";
}
}
echo "</ul>";
}
?>

這隻程式可以檢查整個資料夾裡的IIS Log ,以"每日"為單位將當日送出某查詢字串的IP 與要求時間列出來,此外,還有將幾個主流的ISP 所提供的IP 標上顏色(例如中華電信是紅色),以方便閱讀。 但是...因為DNS反查非常的浪費時間...3XX MB的Log 檔配合8M/640的網路加上Intel 雙核心處理器會花將近20 分鐘執行的時間,所以如果Log 檔案多的時候,記得要先調整機器上的php.ini 喔。

程式執行結果:


查出IP 之後,就要去電信公司查該時段該IP的使用者是誰了,但是據說中華電信會保護顧客隱私,不一定會有結果...接下來已經不關我的事了,但是其實我也很想知道中華電信到底會不會給呢。經歷這件事,讓我覺得我還是比較喜歡當"系統工程師",雖然人家都說程式設計師比較有前途,但是系工還是比較有成就感啊!! :-)

下篇:某公司網站的駭客事件(三) Tags: , ,

讀者回應 ( 4 意見 )

wow....u r really amazing.....

謝謝你:)
不過我也只會這些阿,唉... Q__Q

只在高中寫過一點點C語言程式...
只有前幾行和和面一點點看的懂
還有一些不能省略的符號...
其他,對我根本是張天書= =
你好神喔~
真的!!

感動耶 你居然去看程式碼><
光是這樣我就已經感謝萬分了...真的
我想應該沒多少人對這東西有興趣
謝謝你喔

張貼留言

如果沒有帳戶,建議使用「名稱/網址」留言喔^^