LINUX.ORG.RU

История изменений

Исправление kravich, (текущая версия) :

Понимаю, что в стартовом посте написал немного сумбурно, и не понятно, что мне нужно.

Программа хоть и тренировочная и от нее есть исходники, но изменить ее я не могу, так как доступа на запись к ней нет, только на чтение и исполнение, и ей установлен suid бит на группу, что позволяет ей запускаться с правами группы(в этом и есть весь смысл, текущий пользователь не является членом этой группы, и выполнив в программе

setresuid(geteuid(),geteuid(),geteuid());
system("/bin/sh");
получим шелл с правами другого пользователя, что и требуется). Программа специально написана с уязвимостью, и единственный способ передать ей шеллкод - это указать его первым параметром этой программы. Вот код самой программы: http://pastebin.com/2DKWXkrZ

Я могу передавать данные в качестве первого параметра, заданные в шестнадцатеричном виде, вот таким способом:

/path/to/app `echo -e "\xaa\xbb\xcc\xdd"`
Вслепую отлаживать шеллкод сложно, и я хотел бы загружать программу в gdb, запускать ее с нужным параметром и смотреть, как изменилась память процесса, был ли перезаписан сохранненый в стеке eip и по требуемому ли адресу он выполняет возврат. Проблема в том, что команда run не позволяет задать аргумент программы в шестнадцатеричном виде. Попытка выполнить в gdb команду
run `echo -e "\xaa\xbb\xcc\xdd"` 
, запускающую программу, ну увенчалась успехом, так как gdb, в отличии от bash, не умеет запускать сторонние команды и подставлять их вывод в командную строку. Интересует, есть ли всетаки возможность в gdb задавать параметры программы в шестнадцатеричном виде, или единственный способ - вручную патчить память процесса, имитируя процесс переполнения буфера.

Исходная версия kravich, :

Понимаю, что в стартовом посте написал немного сумбурно, и не понятно, что мне нужно.

Программа хоть и тренировочная и от нее есть исходники, но изменить ее я не могу, так как доступа на запись к ней нет, только на чтение и исполнение, и ей установлен suid бит на группу, что позволяет ей запускаться с правами группы(в этом и есть весь смысл, текущий пользователь не является членом этой группы, и выполнив в программе

setresuid(geteuid(),geteuid(),geteuid());
system("/bin/sh");
получим шелл с правами другого пользователя, что и требуется). Программа специально написана с уязвимостью, и единственный способ передать ей шеллкод - это указать его первым параметром этой программы. Вот код самой программы: http://pastebin.com/2DKWXkrZ

Я могу передавать данные в качестве первого параметра, заданные в шестнадцатеричном виде, вот таким способом:

/path/to/app `echo -e "\xaa\xbb\xcc\xdd"`
Вслепую отлаживать шеллкод сложно, и я хотел бы загружать программу в gdb, запускать ее с нужным параметром и смотреть, как изменилась память процесса, был ли перезаписан сохранненый в стеке eip и по требуемому ли адресу он выполняет возврат. Проблема в том, что команда run не позволяет задать аргумент программы в шестнадцатеричном виде. Интересует, есть ли всетаки возможность в gdb задавать параметры программы в шестнадцатеричном виде, или единственный способ - вручную патчить память процесса, имитируя процесс переполнения буфера.