LINUX.ORG.RU

Запустить в линуксе шелл-команду x86 или x86_64 машинным кодом

 , , ,


1

5

Здравствуйте, как в линуксе запустить команду в оболочке, используя машинный код x86 или x86_64? Никакой роскоши вроде специальных загрузчиков, загружающих при старте бинарного файла всякие там библиотеки, нет.

P.S. тег syscall ставлю просто так, не знаю, он тут причем или не причем

Ответ на: комментарий от zolden

Есть сплошной участок памяти в какой-то программе, в который я могу поместить что угодно - инструкции, данные, что-то еще, соответсвенно адреса этой памяти я знаю. И есть регистр %eip, направляемый на начало этого участка памяти. Надо запустить шелловую команду.

А проблема - ну например получить доступ к компьютеру через взлом laba1.

hlebushek ★★
() автор топика
Последнее исправление: hlebushek (всего исправлений: 1)
Ответ на: комментарий от intelfx

А где мне взять адреса этих функций и вызвать их? Ну и что там произойдет со всякими регистрами при форке?

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

Запуск скрипта - подмножество множества действий типа «выполнить шелл команду».

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

Функции не нужны, дёргай напрямую сисколлы, посмотри номера fork и execve. Для execve нужно будет параметры подготовить, для этого сперва базу найти, гугли базонезависимый код.

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

А где мне взять адреса этих функций и вызвать их?

mov eax, __NR_fork // int 0x80, блджад.

Ну и что там произойдет со всякими регистрами при форке?

Регистры, не используемые для передачи параметров системных вызовов или для возврата значения, сохраняются.

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

Как дернуть сисколлы, наверное можно нагугилть, хотя все равно интереснее было бы прочитать тут.

А что такое базонезависимый код? Гуглятся только вопросы на всяких программистских форумах, где этот термин уже используется, а статьи, определения - их вроде и нет.

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

Пока курс какирства лишь начался, и я тут на диване сижу и вопросы задаю.

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

http://www.ioccc.org/1985/applin.c

для Ъ:

main(v,c)char**c;{for(v[c++]=«Hello, world!\n)»;(!!c)[*c]&&(v--||--c&&execlp(*c,*c,c[!!c]+!!c,!c));**c=!c)write(!!*c,*c,!!**c);}

эрго смотри execlp в man execlp

qulinxao ★★☆
()

показывай код лабы, которую хакать надо, и архитектуру процессора

SZT ★★★★★
()
Последнее исправление: SZT (всего исправлений: 1)
Ответ на: комментарий от hlebushek

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

А ты уверен, что у страницы, в которой ты собираешься разместить шелл-код, не установлен NX-бит?

edigaryev ★★★★★
()

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

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

Это такая попытка потроллить?

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

label:int 80h устарел. int 80h может не работать, если ядро собрано без поддержки 32-бит. int 80h медленный.

Никто на современных процессорах не юзает int 80h кроме недопрограммистов на ассемблере, которые не знают что goto label

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