Текущий архив: 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.52 MB
Время: 0.034 c