Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Потрепаться";
Текущий архив: 2005.08.21;
Скачать: [xml.tar.bz2];

Вниз

Buffer overflow   Найти похожие ветки 

 
Burmistroff   (2005-07-27 17:56) [0]

Здраствуйте товарищи! Подскажите плиз, кто-нибудь в курсе, что подразумевают под buffer overflow атакой (типичный сценарий) и как более-менее правдоподобно ее воспроизвести (в частности как разместить данные перед кодом)?

Вопрос возник всвязи с интересом к заявлениям многих программ о том, что они предотврящают "buffer overflow attacks". Интересно понять что под этим они подразумевают.


 
oldman ©   (2005-07-27 17:59) [1]


> подразумевают под buffer overflow атакой


Именно это и подразумевают...
Атаку для переполнения буфера...


 
BiN ©   (2005-07-27 18:03) [2]

var
 S: String[10];
 M: String;
begin
 S:=Socket.RecieveText; //вот здесь есть уязвимость перед BO-атакой
 M:=Socket.RecieveText; //а здесь уже нет
end;

Ферштейн?


 
DiamondShark ©   (2005-07-27 18:04) [3]


>  S:=Socket.RecieveText; //вот здесь есть уязвимость перед
> BO-атакой

Нету здесь уязвимости.


 
Burmistroff   (2005-07-27 18:05) [4]

нет, можно чууть по подробнее? в моем представлении это запись в буфер длины N, данных длинной N+M так, что лишние M байт залезают на код (или каким-либо другим образом начинают потом исполняться). Я правильно понимаю это? Есть ли другие разновидности?


 
oldman ©   (2005-07-27 18:06) [5]


> DiamondShark ©   (27.07.05 18:04) [3]


Согласен... Но - имхо...


 
Андрей Жук ©   (2005-07-27 18:07) [6]

а может мне кто-то объяснить, как дальше переполнение используется?


 
Antonn ©   (2005-07-27 18:09) [7]

Андрей Жук ©   (27.07.05 18:07) [6]
"заглядываем" в чужое адрессное простанство?


 
DiamondShark ©   (2005-07-27 18:09) [8]


> как дальше переполнение используется?

Исполняется код в контексте атакуемого процесса.


 
oldman ©   (2005-07-27 18:09) [9]


> лишние M байт залезают на код (или каким-либо другим образом
> начинают потом исполняться).


Это как?


 
Burmistroff   (2005-07-27 18:10) [10]

>BiN нихт ферштейн :)
Скажу более конкретно суть части моей проблемы - как выделить буфер (статично/динамически/через ухищрения с DLL - без разницы) чтобы он шел ДО кода?


 
DiamondShark ©   (2005-07-27 18:12) [11]


> чтобы он шел ДО кода?

А ему не надо идти до кода.
Он должен быть выделен в стеке, а передаваемые данные должны затереть стек до места, где хранится адрес возврата, заменив его.


 
Burmistroff   (2005-07-27 18:13) [12]

>oldman
Ну залезают на код процедуры, которая потом где-то вызывается, и, таким образом формально начинают исполняться те записанные M минус сколько-то байт?


 
Burmistroff   (2005-07-27 18:14) [13]

>DiamondShark О! Пасибо :)


 
BiN ©   (2005-07-27 18:17) [14]

DiamondShark ©   (27.07.05 18:04) [3]
Нету здесь уязвимости.


Да, вроде компилятор отлавливает подобные случаи со строками.

тогда так:

var
 S: Pointer;
begin
 GetMem(S, 10);
 Socket.ReceiveBuf(S^, Socket.ReceiveLength)
 FreeMem(S);
end;


 
Андрей Жук ©   (2005-07-27 18:18) [15]

>>Он должен быть выделен в стеке
А что, можно исполнять код в стеке?


 
Джо ©   (2005-07-27 18:22) [16]


> [14] BiN ©   (27.07.05 18:17)

GetMem же память на куче выделяет? И стек так не запортишь, вроде? Или я переработался? Жара....


 
Джо ©   (2005-07-27 18:24) [17]


> [15] Андрей Жук ©   (27.07.05 18:18)
> >>Он должен быть выделен в стеке
> А что, можно исполнять код в стеке?

А чего ему исполняться? В стеке подменяется адрес возврата, который будет использован ближайшим же ret-ом..


 
BiN ©   (2005-07-27 18:26) [18]

В сабже речь не от стеке, а о переполнении буффера. Сейчас нас всех удалят -)


 
Андрей Жук ©   (2005-07-27 18:28) [19]


> А чего ему исполняться? В стеке подменяется адрес
> возврата, который будет использован ближайшим же
> ret-ом..

Шо-то не доходит... Где об этом почитать можно?


 
Джо ©   (2005-07-27 18:29) [20]

Разбирайтесь, тут, приду - почитаю. Заработался... Все, поехал на речку купаться.


 
DiamondShark ©   (2005-07-27 18:45) [21]

http://www.securitylab.ru/34179.html


 
Alexander Panov ©   (2005-07-27 18:53) [22]

В примере [2] нет уязвимости перед для переполнения буфера.
Уязвимость будет в таком примере:

var
  Buffer: PChar;
begin

  Socket.ReceiveBuf(Buffer[0],Socket.ReceiveLength);


 
Alexander Panov ©   (2005-07-27 18:54) [23]

Либо, если ближе к жизни:
var
 Buffer: array[0..127] of Char;
begin
 Socket.ReceiveBuf(Buffer[0],Socket.ReceiveLength);


 
oldman ©   (2005-07-27 19:00) [24]


> Ну залезают на код процедуры, которая потом где-то вызывается,
> и, таким образом формально начинают исполняться те записанные
> M минус сколько-то байт?


Если буфер переполнен, имхо, данные никуда не залезают...
И уж тем более, не "формально начинают исполняться"...
Еще раз - имхо...


 
Андрей Жук ©   (2005-07-27 19:02) [25]

т.е., при использовании string в Delphi, или std::string в С++ переполнение возникнуть не может?


 
DiamondShark ©   (2005-07-27 19:09) [26]


> Андрей Жук ©   (27.07.05 19:02) [25]

В дельфи не может.
В Ц++... А кто его знает, кто там унутрях того класса копался.


 
Burmistroff   (2005-07-28 01:11) [27]

Нет, ну почему не может? Может, но только уже не стек будет запорчен?

>oldman
Нет, ну раз уж он переполнен, то это другими словами означает, что данные вылезли за отведенные им границы. Что там за этим границами - мы не знаем. Можно ухитриться и записать код после буфера, и тогда, при переполнении буфера, потрется часть кода.


 
Qwertyk ©   (2005-07-28 01:19) [28]

Может кто сможет привести конкретный пример? Программы с уязвимостью ПБ и программы, которая использует эту уязвимость? (для наглядности :))


 
Alexander Panov ©   (2005-07-28 01:37) [29]

В [23] - конкретный пример.


 
oldman ©   (2005-07-28 04:45) [30]


> Burmistroff   (28.07.05 01:11) [27]


Я лично переполнения ни разу не видел, но (имхо) если буфер переполнен, то данные, которые в него не убрались НИКУДА не пишутся, а просто отсекаются. Еще раз - имхо. Эксперименты проводить что-то мне ну о-о-о-очень неохота...
Береженого бог бережет :)


 
Burmistroff   (2005-07-28 18:57) [31]

Ага, там чертик такой сидит и все байтики, что не влазят в границы выкидывает :)


 
Qwertyk ©   (2005-07-31 14:08) [32]

Андрей Жук ©   (27.07.05 18:07) [6]
DiamondShark ©   (27.07.05 18:09) [8]
Ну и каким образом исполняется код в чужом адресном пространстве?
var s:string[2];
begin
 readln(s)
end
Вот к примеру на этом примере? (как выполнить код в контексте процесса этой программы?) Что-то понять никак не могу :\


 
Вася Пупкин ©   (2005-07-31 14:44) [33]

http://www.uinc.ru/articles/14/


 
panov ©   (2005-07-31 14:59) [34]

Обучением "какерству" занимайся в другом месте.



Страницы: 1 вся ветка

Форум: "Потрепаться";
Текущий архив: 2005.08.21;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.52 MB
Время: 0.031 c
3-1120865175
igorek2003
2005-07-09 03:26
2005.08.21
Справочник и Jpeg


14-1122196456
romychk
2005-07-24 13:14
2005.08.21
сеть не работает надежно


14-1122495978
Qwertyk
2005-07-28 00:26
2005.08.21
Как избавиться от разводов


11-1105381064
kliff
2005-01-10 21:17
2005.08.21
Trace into и KOL


1-1122616813
Viktop
2005-07-29 10:00
2005.08.21
Вопрос по DevExpress





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский