Переполнение буфера для перехода к части кода - PullRequest
0 голосов
/ 27 сентября 2011

Мой учитель дал мне некоторый код, и я должен запустить его и заставить его перейти в раздел администратора, используя переполнение буфера.Я не могу изменить исходный код.Может кто-нибудь объяснить, как я мог перейти к методу администратора, используя переполнение буфера?Я запускаю его на Ubuntu 8.10, и он был скомпилирован с более старой версией gcc, поэтому переполнение будет работать.

Ответы [ 2 ]

0 голосов
/ 27 сентября 2011

Вы всегда можете получить вывод asm этого (я забыл, как прямо сейчас ... brainfart) и посмотреть, где буфер, который вы хотите переполнить, используется / читать и проверить его длину. Затем вы хотите вычислить, насколько вам нужно переполнить его, чтобы вы либо заменили следующую инструкцию на JMP (адрес кода администратора), либо изменили адрес JMP на адрес раздела администратора. 0xE8 - это код операции перехода для x86, если он вам нужен, поскольку вы хотите перезаписать двоичные данные инструкции своими собственными.

0 голосов
/ 27 сентября 2011

Не имея возможности увидеть код, на общем уровне вам необходимо спроектировать входные данные для функции, которая перезапишет адрес возврата (или другой адрес, на который функция будет передавать управление) в стеке.

По предположению, код имеет символьный буфер фиксированной длины и копирует значения из параметра функции в этот буфер без проверки того, что длина не превышает длину буфера.

Вам нужно записать, как выглядит макет стека для вашего приложения (запуск этого под отладчиком вполне может быть самым быстрым способом сделать это), чтобы выяснить, где находится адрес, который нужно переопределить,затем соберите строку, чтобы перезаписать ее адресом функции администратора, которую нужно вызвать.

...