Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.08.21;
Скачать: CL | DM;

Вниз

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;
Скачать: CL | DM;

Наверх




Память: 0.54 MB
Время: 0.045 c
14-1122461517
dreamse
2005-07-27 14:51
2005.08.21
Программа для автоматического добавления софта в каталоги


1-1122638899
bat00n
2005-07-29 16:08
2005.08.21
Генерирование строки


4-1119512600
Igit
2005-06-23 11:43
2005.08.21
Динамический импорт функции из DLL


6-1115995387
Просто Джо
2005-05-13 18:43
2005.08.21
TIdFTPServer.FTPFileSystem


4-1119859178
delphistik
2005-06-27 11:59
2005.08.21
Terminate Task