Легенда:
новое сообщение
закрытая нитка
новое сообщение
в закрытой нитке
старое сообщение
|
- Напоминаю, что масса вопросов по функционированию форума снимается после прочтения его описания.
- Новичкам также крайне полезно ознакомиться с данным документом.
Полагаю, что переполнение буфера используется для ДОС атак. 02.12.03 09:50 Число просмотров: 1163
Автор: DPP <Dmitry P. Pimenov> Статус: The Elderman Отредактировано 02.12.03 09:52 Количество правок: 1
|
> Мне нужно переполнить стек так что бы вместо значения > 12345678 стало 987654321 вот как представить 987654321 в > виде шелл кода? То есть не конкретным значением, а не важно чем, лишь бы что-то за пределами буфера испортилось. Использовать переполнение для того, чтобы куда надо занести нужное значение, является довольно сложной задачей.
Для переполнения необходимы два главных условия: наполнение буфера должно быть быстрее его опустошения и при наполнении должна отсутствовать проверка границ. Не всегда наполнение происходит порциями требуемого размера. Стало быть при переполнении может еще что-то измениться/испортиться, а это приведет к неконтролируемости процесса.
Руки надо отрывать тому, кто пришет программы, подверженные переполнению буфера. Этого ведь очень тяжело добиться. Например переполнить стэк так, чтобы нужным образом изменились какие-то данные очень тяжело. Обычно для стэка (программного) выделяется довольно узкое адресное пространство, и при попытке программы занести что-то за пределы этого пространства произойдет прерывание (ошибка при доступе в память), в результате чего работа программы будет аварийно завершена. Типичная ДОС атака.
Хуже дело обстоит, если стэк, дэк или какой либо еще способ организации хранения данных в памяти реализован исключительно программно. В этом случае нужно просто, как минимум, проверять границы рабочего фрагмента памяти. Обычно сегменты данных и кода разнесены. Мало того, программе довольно сложно дотянуться до своего сегмента кода. И этого мало, обычно сегмент кода не доступен на изменение. А чаще всего он доступен только на выполнение. Стало быть очень тяжело переполнением буфера изменить код, если это не интерпретатор и ОС использует соответствующие возможности процессора.
Мне просто хотелось показать, что это очень сложная задача. Чтобы в этом убедиться попробуйте написать программу, которая делает что-нибудь разумное, и заставить изменить ее что-то в своей области данных/кода по средством переполнения буфера/стэка.
|
|
|