Решил так сказать осовить тему переполнения, и вот, что мне интерсено, каким образом узнать, когда стек полностью переполнится, т.е. например я объявил переменную mess типа char емкостью 10, т.е. char mess[10], так вот опытным путем, выяснил, что переполнение произойдет после заполнения этой переменной 29 символами, так вот вопрос, можно это как-то вычислить не подставляя значения, или как? Код (Text): #include <stdio.h> void main(int argc, char *argv[]) { char mess[10] = ""; strcpy(mess, argv[1]); printf("You entered: %c\n", argv[1]); } далее компилю: cc buff.c -o buff ну и запускаю: 1) ./buff shit You entered: shit 2) ./buff `perl -e 'print "A" x 11'` You entered: AAAAAAAAAAA 3)2) ./buff `perl -e 'print "A" x 12'` You entered: AAAAAAAAAAAA и т.д. потом: ./buff `perl -e 'print "A" x 29'` You entered: AAAAAAAAAAAAAAAAAAAAAAAAAAAAA Segmentaion fault (core dumped) вот так... еще вопрос, например я переполняю этими символами стек, и штобы в eip записать адрес куда нужно перейти мне нужно дописать к 29 символам (во всяком случае в Lin), еще 4, так вот в коде у меня есть ф-я, которая не вызывается, я узнал адрес 00402000, так вот что мне писать после 29 символов, не просто же 00402000, это нужнно как-то перевести, а вот как, плиз выручайте...
under Читай статьи и книгу о переполнении буфера, много вопросов отпадут. Книга лежит в документах на сайте.
Байты в обратном порядке, т.е. 00402000 -> 00204000. Их нужно записать вместо адреса возврата, т.е. в [ebp + 4] для stdcall и в [esp] для C.
to koderr, я имею ввиду как их преобразовать, если писать адрес непосредственно в командной строке... to IceStudent я читал http://www.wasm.ru/print.php?article=1020001, к сожалению не все понял...
напрмер я делаю так: ./buff `perl -e 'print "A" x 29'` You entered: AAAAAAAAAAAAAAAAAAAAAAAAAAAAA Segmentaion fault (core dumped) если написать так: ./buff `perl -e 'print "A" x 29'`ZZZZ то в eip попадет в hex Z, так вот в проге есть ф-я, ее адрес 00402000, как мне преобразовать его, чтобы вписать в командной строке, или как написать эксплойт??
Точнее, не книга (книга у Касперски) - сборкник статей. Боюсь, ввести адрес с командной строки не выйдет - нужны байты 00,20,40,00, а си-строки оканчиваются нулём. Придётся вводить код только теми байтами, которые не имеют нуля.
Это определяется стековый кадр. Чтоб потом можно было обращатся к переменным и параметрам через ebp. Почитай Зубкова. Ну там ещё некоторые символы есть, например 0x0D.