Легенда:
новое сообщение
закрытая нитка
новое сообщение
в закрытой нитке
старое сообщение
|
- Напоминаю, что масса вопросов по функционированию форума снимается после прочтения его описания.
- Новичкам также крайне полезно ознакомиться с данным документом.
| | |
А тебя не волнует, что ты *не вернешься* из strcpy? 02.12.03 15:43 Число просмотров: 994
Автор: amirul <Serge> Статус: The Elderman
|
> "\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90[Тут дальше должно > быть значение 987654321 вот это мне и надо предстваить]"; И локальные переменные будут всем (в смысле тебе) по фигу.
|
<programming>
|
Подмена данных путём переполнения буфера. 02.12.03 08:29 [amirul]
Автор: choor Статус: Elderman
|
Мне нужно переполнить стек так что бы вместо значения 12345678 стало 987654321 вот как представить 987654321 в виде шелл кода?
|
|
->beginners 02.12.03 15:40
Автор: amirul <Serge> Статус: The Elderman
|
|
|
может я чего-то не понял, но для меня вопрос выглядит странно 02.12.03 09:53
Автор: LLL <Алексей> Статус: Member
|
Обычно вроде шелл-код представляют в виде байтов, которыми переполняется буфер. Но как можно число (тоже байты наверно) представить в виде шелл-кода?
|
| |
Вообщем в программе объявленны переменные и в функции strcpy... 02.12.03 10:12
Автор: choor Статус: Elderman
|
Вообщем в программе объявленны переменные и в функции strcpy идёт копирование не проверяющихся на вход данных. Идёт копирование в массив размером в 20 байт это я NOP'ами заполню, а дальше до стэку лежит переменная F вот её и нужно сделать чтобы она стала равна 987654321 Кароче вот примерно:
static char shellcode[]="\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90"
"\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90[Тут дальше должно быть значение 987654321 вот это мне и надо предстваить]";
|
| | |
А тебя не волнует, что ты *не вернешься* из strcpy? 02.12.03 15:43
Автор: amirul <Serge> Статус: The Elderman
|
> "\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90[Тут дальше должно > быть значение 987654321 вот это мне и надо предстваить]"; И локальные переменные будут всем (в смысле тебе) по фигу.
|
| | | |
Это зависит от того, что стоит дальше. 03.12.03 00:20
Автор: Ktirf <Æ Rusakov> Статус: Elderman
|
Если следом за 987654321 стоит \0, то вернется.
> И локальные переменные будут всем (в смысле тебе) по фигу. И как раз в этом случае локальные переменные будут совсем не по фигу, особенно если они участвуют в формировании какого-нибудь вызова system.
|
| | |
А тип у переменной какой? 02.12.03 10:20
Автор: Ktirf <Æ Rusakov> Статус: Elderman
|
|
| | | |
int 02.12.03 10:24
Автор: choor Статус: Elderman
|
|
| | | | |
если 32-битный int, да еще с интеловской разрядностью и 02.12.03 10:55
Автор: LLL <Алексей> Статус: Member
|
число требуемое было приведено в десятичной системе, то там будут байты "\xB1\x68\xDE\x3A"
надеюсь, мне не пошьют соучастие в чем-то наказуемом? ;-)
|
| | | | | |
Не думаю, что представление числа 987654321 на процессорах Intel является какой-то там тайной :) 02.12.03 11:03
Автор: Ktirf <Æ Rusakov> Статус: Elderman
|
|
| | | | | | |
строка SecretPassword тоже не является чем-то таинственным, однако ж... 02.12.03 11:25
Автор: LLL <Алексей> Статус: Member
|
если ее сопроводить (правдивым) комментарием, что это пароль к ресурсу X сервера Y, которого я знать не должен, то вроде уже и не совсем порядок получается :-)
как часто бывает, смысл зависит от контекста :-)
|
| | | | | | | |
Ты же не указал конкретное место, где надо написать это число ;) 02.12.03 11:43
Автор: Ktirf <Æ Rusakov> Статус: Elderman
|
|
| | | | | | | | |
зато это место было обозначено автором вопроса (после 20-го \x90) :-) 02.12.03 12:25
Автор: LLL <Алексей> Статус: Member
|
|
|
Полагаю, что переполнение буфера используется для ДОС атак. 02.12.03 09:50
Автор: DPP <Dmitry P. Pimenov> Статус: The Elderman Отредактировано 02.12.03 09:52 Количество правок: 1
|
> Мне нужно переполнить стек так что бы вместо значения > 12345678 стало 987654321 вот как представить 987654321 в > виде шелл кода? То есть не конкретным значением, а не важно чем, лишь бы что-то за пределами буфера испортилось. Использовать переполнение для того, чтобы куда надо занести нужное значение, является довольно сложной задачей.
Для переполнения необходимы два главных условия: наполнение буфера должно быть быстрее его опустошения и при наполнении должна отсутствовать проверка границ. Не всегда наполнение происходит порциями требуемого размера. Стало быть при переполнении может еще что-то измениться/испортиться, а это приведет к неконтролируемости процесса.
Руки надо отрывать тому, кто пришет программы, подверженные переполнению буфера. Этого ведь очень тяжело добиться. Например переполнить стэк так, чтобы нужным образом изменились какие-то данные очень тяжело. Обычно для стэка (программного) выделяется довольно узкое адресное пространство, и при попытке программы занести что-то за пределы этого пространства произойдет прерывание (ошибка при доступе в память), в результате чего работа программы будет аварийно завершена. Типичная ДОС атака.
Хуже дело обстоит, если стэк, дэк или какой либо еще способ организации хранения данных в памяти реализован исключительно программно. В этом случае нужно просто, как минимум, проверять границы рабочего фрагмента памяти. Обычно сегменты данных и кода разнесены. Мало того, программе довольно сложно дотянуться до своего сегмента кода. И этого мало, обычно сегмент кода не доступен на изменение. А чаще всего он доступен только на выполнение. Стало быть очень тяжело переполнением буфера изменить код, если это не интерпретатор и ОС использует соответствующие возможности процессора.
Мне просто хотелось показать, что это очень сложная задача. Чтобы в этом убедиться попробуйте написать программу, которая делает что-нибудь разумное, и заставить изменить ее что-то в своей области данных/кода по средством переполнения буфера/стэка.
|
| |
Переполнение буфера используется не только для ДОС атак, но... 02.12.03 10:14
Автор: choor Статус: Elderman
|
Переполнение буфера используется не только для ДОС атак, но и для получения высших привилегий. И реализовать переполнение не так уж и сложно :) Надо просто уметь и понимать!
|
| | |
Слышал я про это... 02.12.03 11:04
Автор: DPP <Dmitry P. Pimenov> Статус: The Elderman
|
> Переполнение буфера используется не только для ДОС атак, но > и для получения высших привилегий. И реализовать > переполнение не так уж и сложно :) Надо просто уметь и > понимать! Таких программистов нужно в судебном порядке лишать права писать программы и вообще близко подходить к компьютеру, а так же лишать права заниматься преподавательской и репититорской деятельностью.
Переменная, которая отвечает за права и привелегии находится в адресном пространстве программы, которая не должна иметь доступ к ней!
|
| | | |
Это старая и грустная тема 02.12.03 11:11
Автор: Ktirf <Æ Rusakov> Статус: Elderman
|
Про неисполняемый стек и тому подобные способы защиты от исполнения того, что исполняться не должно.
|
| | | | |
Ага. Я тоже по этому поводу хотел сказать 02.12.03 15:51
Автор: amirul <Serge> Статус: The Elderman
|
> Про неисполняемый стек и тому подобные способы защиты от > исполнения того, что исполняться не должно. Архитектура IA32 - такое болото, что добиться там неисполняемого стека можно только за счет накладных расходов по управлению сегментами. Сейчас во всех более-менее распространенных и производительных ОС на базе x86 используется FLAT-модель для сегментов, а страничная защита не позволяет запретить исполнение для страницы (на фига два разных механизма защиты памяти, один из которых так и остается невостребованным, а другой неполным - я до сих пор не понимаю).
В общем, как уже было сказано - это грустная тема и обсуждалась неоднократно (в том числе и на БТ)
|
| | | | |
Это старая и грустная тема, но ведь до сих пор такие системы есть, существуют и используются, и программисты до сих пор ляпают такие ошибки. 02.12.03 11:56
Автор: DPP <Dmitry P. Pimenov> Статус: The Elderman Отредактировано 02.12.03 11:57 Количество правок: 2
|
> Про неисполняемый стек и тому подобные способы защиты от > исполнения того, что исполняться не должно.
Вспоминается старая RSX-11. Всего один битик. Причем в области данных ядра, в структуре сеанса. Добраться туда так трудно. Какое к четру переполнение стэка. Может сейчас модно привелегии в ENVIRONMENTе или в заголовке задачи хранить. Почему бы при создании новых ОС не посмотреть как это сделано в других "бородатых" и морально устарелых ОС.
|
| | | | | |
Дело не только и не столько в ОС, а еще и в архитектуре процессоров... 02.12.03 12:42
Автор: Ktirf <Æ Rusakov> Статус: Elderman
|
|
|
|