LINUX.ORG.RU

Передача параметра запускаемой программе в шестнадцатеричном виде

 ,


0

2

Играю в io.smashthestack.org, на пятом уровне необходимо эксплуатировать переполнение буфера в стеке.

Буфер заполняется копированием из argv[1], следовательно, шеллкод нужно передавать первым параметром приложения.

Кроме того, хотелось бы отслеживать в gdb, что происходит в памяти процесса, а я не нашел как в команде run отладчика возможность передать параметр приложению, заданный в шестнадцатеричном виде. Есть ли такая возможность?

★★★★

Последнее исправление: kravich (всего исправлений: 4)

bash не умеет в строках передавать бинарные данные, только в std.

т.е. взять к примеру, LOR=$(curl www.linux.org.ru/img/good-penguin.jpg) - картинка в переменной не сохранится как положено. и только через поток | можно передать программе любые данные.

воть... поэтому, либо поток, либо используй `mktemp` файлики

Spoofing ★★★★★
()
Ответ на: комментарий от Spoofing

Через поток данные идут на stdin, а тут нужно передавать бинарные данные в качестве первого аргумента. Я пробовал

/path/to/app `echo -e "\xaa\xbb\xcc\xdd"`
и оно в принципе работает, но если в gdb, загрузив нужную программу через команду file, выполнить run `echo -e «\xaa\xbb\xcc\xdd»`, он выкинет ошибку, так как, очевидно, не умеет инвочить сторонние программы и делать подстановку их вывода в строку

kravich ★★★★
() автор топика
Ответ на: комментарий от registrant

Получается, что никак, так как строки в argv все равно нуль-терминированные. Поэтому шеллкод не должен содержать 0x00, что выглядит очень серьезным препятствием, но это уже другой вопрос. А сначала хотелось бы уметь передавать бинарные данные, запуская программу в gdb. Думаю, придется все таки, обломавшись, патчить память в стеке вручную, а потом, уже отладив шеллкод, передавать его через echo -e нужной программе с suid битом.

kravich ★★★★
() автор топика

Найди себе уже тян и узбагойся, а то какие-то нездоровые интересы

anonymous
()
Ответ на: комментарий от registrant

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

Программа хоть и тренировочная и от нее есть исходники, но изменить ее я не могу, так как доступа на запись к ней нет, только на чтение и исполнение, и ей установлен 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 ★★★★
() автор топика
Последнее исправление: kravich (всего исправлений: 1)

попробуй

echo -e "set args \xaa\xbb\xcc\xdd" > shellcode
gdb -x shellcode /path/to/app
ananas ★★★★★
()

registrant
ananas

Спасибо, оба способа работают.
Моя проблема заключалась в том, что я не удосужился внимательно почитать ман по gdb =)

kravich ★★★★
() автор топика

Ух, шеллкод написан, уязвимость успешно заюзана, очередной уровень взят. Всем спасибо.

kravich ★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.