Вообщем в программе объявленны переменные и в функции 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
> И локальные переменные будут всем (в смысле тебе) по фигу. И как раз в этом случае локальные переменные будут совсем не по фигу, особенно если они участвуют в формировании какого-нибудь вызова system.
А тип у переменной какой?02.12.03 10:20 Автор: Ktirf <Æ Rusakov> Статус: Elderman
число требуемое было приведено в десятичной системе, то там будут байты "\xB1\x68\xDE\x3A"
надеюсь, мне не пошьют соучастие в чем-то наказуемом? ;-)
Не думаю, что представление числа 987654321 на процессорах Intel является какой-то там тайной :)02.12.03 11:03 Автор: Ktirf <Æ Rusakov> Статус: Elderman
если ее сопроводить (правдивым) комментарием, что это пароль к ресурсу X сервера Y, которого я знать не должен, то вроде уже и не совсем порядок получается :-)
как часто бывает, смысл зависит от контекста :-)
Ты же не указал конкретное место, где надо написать это число ;)02.12.03 11:43 Автор: Ktirf <Æ Rusakov> Статус: Elderman
Полагаю, что переполнение буфера используется для ДОС атак.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
> Про неисполняемый стек и тому подобные способы защиты от > исполнения того, что исполняться не должно. Архитектура 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