Сейчас на форуме: Rio, tyns777, zombi-vadim (+7 невидимых)

 eXeL@B —› Программирование —› Инжект кода в дочерний процесс Linux
Посл.ответ Сообщение


Ранг: 462.8 (мудрец), 468thx
Активность: 0.280
Статус: Участник
Only One!

Создано: 26 ноября 2014 21:17
· Личное сообщение · #1

Короче, задача заинжектить свой код в дочерний процесс
созданный связкой fork+execv, пробовал использовать mmap но создает карту файла
в родительском процессе, хотя был установлен флаг shared, т.е. по логике должен быть видимым
и в другом процессе... нихрена(
Короче, может кто подсказать как это сделать?
На винде все просто как 2х2, здесь гемор.
Подошел бы даже вариант с аллоком памяти в дочернем процессе и копированием туда своего кода (базонезависимого)
Примеры находил в инете, но не нашел примера связки fork+execv+mmap
Заранее спасибо!

-----
aLL rIGHTS rEVERSED!





Ранг: 1053.6 (!!!!), 1078thx
Активность: 1.060.81
Статус: Участник

Создано: 26 ноября 2014 21:55 · Поправил: reversecode
· Личное сообщение · #2

а такое ? тоже без форка но с инжектом http://www.exploit-db.com/papers/13061/

там их несколько штук, форк не видел, ptrace много да

до кучи тогда и такой семпл
http://stackoverflow.com/questions/24355344/inject-shared-library-into-a-process

| Сообщение посчитали полезным: OnLyOnE


Ранг: 462.8 (мудрец), 468thx
Активность: 0.280
Статус: Участник
Only One!

Создано: 26 ноября 2014 22:01 · Поправил: OnLyOnE
· Личное сообщение · #3

reversecode пишет:
а такое ?

С форком) глянул. Я так понял, что код в стек инжектится) (address = regs.esp - 1024)
прикольно.. Попробую

Добавлено спустя 14 часов 11 минут
reversecode

Вопрос у меня. Как программно узнать виртуальный адрес начала стека дочернего процесса?
Единственное место куда можно заинжектить код без последствий (ИМХО) это в начало стека.

-----
aLL rIGHTS rEVERSED!





Ранг: 1053.6 (!!!!), 1078thx
Активность: 1.060.81
Статус: Участник

Создано: 27 ноября 2014 17:09 · Поправил: reversecode
· Личное сообщение · #4

думаю нужно пересмотреть саму задачу, это точно не зловред?
что надо, зачем надо и что уже есть

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

"echo 0 > /proc/sys/kernel/randomize_va_space"
есть и ASLR




Ранг: 462.8 (мудрец), 468thx
Активность: 0.280
Статус: Участник
Only One!

Создано: 27 ноября 2014 18:30 · Поправил: OnLyOnE
· Личное сообщение · #5

reversecode пишет:
думаю нужно пересмотреть саму задачу, это точно не зловред?


Не зловред, точно
Задача заинжектить в прогу код который будет логировать определенные данные в файл.
Почему именно инжект? У таргета замудренная проверка целкости файла, ее не было б просто пропатчил.
Плюс прога еще и пожата UPX.. так что инжекчу стоя на ОЕР.
В принципе, задачу вроде решил.. стоя на ОЕР беру значение esp - 1D000h (значение взято примерное но для данной программы оптимальное) и получаю адрес куда инжектить.. там нули и при работе программа туда ничего не пишет..

-----
aLL rIGHTS rEVERSED!





Ранг: 1053.6 (!!!!), 1078thx
Активность: 1.060.81
Статус: Участник

Создано: 27 ноября 2014 18:49
· Личное сообщение · #6

я не понял, пол лаба что ли ламает этот чертов воссервер ?
--> Link <--

я про стек только хотел рассписать, то хз куда он там указывает даже при OEP, ты можешь его сломать так что у тебя ниодин lib call не будет работать

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

но после поверхностного гугления вроде показалось что ptrace не умеет хардбряков, а ставит int 3, что с целостностью кода идет наперерез




Ранг: 462.8 (мудрец), 468thx
Активность: 0.280
Статус: Участник
Only One!

Создано: 27 ноября 2014 19:37 · Поправил: OnLyOnE
· Личное сообщение · #7

reversecode пишет:
я не понял, пол лаба что ли ламает этот чертов воссервер ?


Нет, его я не ломаю) Это по работе ...

reversecode пишет:
ptrace не умеет хардбряков, а ставит int 3, что с целостностью кода идет наперерез


Так в моем случае целкость файла проверяется только на диске.. в памяти делай что хочешь.
Я ptrace и использую, только перед установкой int 3 я сохраняю оригинальные данные, а после срабатывания
бряка данные по месту останова восстанавливаю и корректирую EIP.

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

-----
aLL rIGHTS rEVERSED!





Ранг: 1053.6 (!!!!), 1078thx
Активность: 1.060.81
Статус: Участник

Создано: 27 ноября 2014 20:07
· Личное сообщение · #8

OnLyOnE пишет:
Так в моем случае целкость файла проверяется только на диске.. в памяти делай что хочешь.

ну так я тебе онлайн патчинг и предлагал, вторая ссылка в моем посте




Ранг: 462.8 (мудрец), 468thx
Активность: 0.280
Статус: Участник
Only One!

Создано: 28 ноября 2014 19:47
· Личное сообщение · #9

reversecode

Тут возникла одна проблема. Не с инжектом, а с отладкой.
Мне нужно брякнуться в функции которая запускается в отдельном потоке.
Ида сворачивается при установки бряка
Мне то надо тупо встать на входе и глянуть стек.
Чем можно отладить моногопоточное приложение?
Поставил на виртуалку GDB но ида по удаленке к нему не конектится..
Может я что не так делаю?
Вообще есть путевый отладчик под линь для многопотоков?

-----
aLL rIGHTS rEVERSED!





Ранг: 1053.6 (!!!!), 1078thx
Активность: 1.060.81
Статус: Участник

Создано: 28 ноября 2014 19:55 · Поправил: reversecode
· Личное сообщение · #10

много потоки и форки это разные приложение
возьми последнюю иду с паблика
gdb и отлаживают приложения
ида умеет по gdb протоколу к gdb серверу коннектиться, мануалов полно
gdbserver нужно поставить, в иде gdb протокол выбрать
но и linux_server у ильфака тоже неплохо работает

| Сообщение посчитали полезным: OnLyOnE


Ранг: 462.8 (мудрец), 468thx
Активность: 0.280
Статус: Участник
Only One!

Создано: 28 ноября 2014 19:58
· Личное сообщение · #11

reversecode пишет:
много потоки и форки


Форков там нет.

reversecode пишет:
но и linux_server у ильфака тоже не плохо работает


Падает он

-----
aLL rIGHTS rEVERSED!





Ранг: 1053.6 (!!!!), 1078thx
Активность: 1.060.81
Статус: Участник

Создано: 28 ноября 2014 20:00 · Поправил: reversecode
· Личное сообщение · #12

ну поставь gdbserver
если просто отладить то и gdb с руками без иды хватит
а если все же инжект в потоке... наверное с идой будет проще

и как он падает? что говорит?




Ранг: 462.8 (мудрец), 468thx
Активность: 0.280
Статус: Участник
Only One!

Создано: 28 ноября 2014 20:09
· Личное сообщение · #13

reversecode пишет:
и как он падает? что говорит?


Ничего не говорит, просто сворачивается вместе с прогой.

Все! Запустил gdbserver .. отлаживаю

-----
aLL rIGHTS rEVERSED!





Ранг: 462.8 (мудрец), 468thx
Активность: 0.280
Статус: Участник
Only One!

Создано: 02 декабря 2014 19:59
· Личное сообщение · #14

P.S. Выяснил, что ни везде и ни всегда сработает метод инжекта кода в стек.
Столкнулся с пропатченым ядром дебиана запрещающим исполнять код в стеке.
Но внимательно посмотрев на карту сегментов нашел пустое место в сегменте кода таргета.
И влепил туда... Все заработало)

-----
aLL rIGHTS rEVERSED!




Ранг: 512.7 (!), 360thx
Активность: 0.270.03
Статус: Модератор

Создано: 06 декабря 2014 10:03
· Личное сообщение · #15

RE ELF

7b3a_06.12.2014_EXELAB.rU.tgz - reveng-ELF-0.2.pdf


 eXeL@B —› Программирование —› Инжект кода в дочерний процесс Linux
:: Ваш ответ
Жирный  Курсив  Подчеркнутый  Перечеркнутый  {mpf5}  Код  Вставить ссылку 
:s1: :s2: :s3: :s4: :s5: :s6: :s7: :s8: :s9: :s10: :s11: :s12: :s13: :s14: :s15: :s16:


Максимальный размер аттача: 500KB.
Ваш логин: german1505 » Выход » ЛС
   Для печати Для печати