Сейчас на форуме: Rio, tyns777, zombi-vadim (+7 невидимых) |
eXeL@B —› Программирование —› Инжект кода в дочерний процесс Linux |
Посл.ответ | Сообщение |
|
Создано: 26 ноября 2014 21:17 · Личное сообщение · #1 Короче, задача заинжектить свой код в дочерний процесс созданный связкой fork+execv, пробовал использовать mmap но создает карту файла в родительском процессе, хотя был установлен флаг shared, т.е. по логике должен быть видимым и в другом процессе... нихрена( Короче, может кто подсказать как это сделать? На винде все просто как 2х2, здесь гемор. Подошел бы даже вариант с аллоком памяти в дочернем процессе и копированием туда своего кода (базонезависимого) Примеры находил в инете, но не нашел примера связки fork+execv+mmap Заранее спасибо! ----- aLL rIGHTS rEVERSED! |
|
Создано: 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 |
|
Создано: 26 ноября 2014 22:01 · Поправил: OnLyOnE · Личное сообщение · #3 reversecode пишет: а такое ? С форком) глянул. Я так понял, что код в стек инжектится) (address = regs.esp - 1024) прикольно.. Попробую Добавлено спустя 14 часов 11 минут reversecode Вопрос у меня. Как программно узнать виртуальный адрес начала стека дочернего процесса? Единственное место куда можно заинжектить код без последствий (ИМХО) это в начало стека. ----- aLL rIGHTS rEVERSED! |
|
Создано: 27 ноября 2014 17:09 · Поправил: reversecode · Личное сообщение · #4 думаю нужно пересмотреть саму задачу, это точно не зловред? что надо, зачем надо и что уже есть в линуксе насколько я помню ловим процесс берем адрес и перебиваем на свой, а в своем вызываем его "echo 0 > /proc/sys/kernel/randomize_va_space" есть и ASLR |
|
Создано: 27 ноября 2014 18:30 · Поправил: OnLyOnE · Личное сообщение · #5 reversecode пишет: думаю нужно пересмотреть саму задачу, это точно не зловред? Не зловред, точно Задача заинжектить в прогу код который будет логировать определенные данные в файл. Почему именно инжект? У таргета замудренная проверка целкости файла, ее не было б просто пропатчил. Плюс прога еще и пожата UPX.. так что инжекчу стоя на ОЕР. В принципе, задачу вроде решил.. стоя на ОЕР беру значение esp - 1D000h (значение взято примерное но для данной программы оптимальное) и получаю адрес куда инжектить.. там нули и при работе программа туда ничего не пишет.. ----- aLL rIGHTS rEVERSED! |
|
Создано: 27 ноября 2014 18:49 · Личное сообщение · #6 я не понял, пол лаба что ли ламает этот чертов воссервер ? я про стек только хотел рассписать, то хз куда он там указывает даже при OEP, ты можешь его сломать так что у тебя ниодин lib call не будет работать была мысль предложить к примеру через ptrace попробовать ставить бряк на функцию и когда прога будет ловится, то останавливать и вытягивать через стек все нужные для логирования данные, потом опять отпускать но после поверхностного гугления вроде показалось что ptrace не умеет хардбряков, а ставит int 3, что с целостностью кода идет наперерез |
|
Создано: 27 ноября 2014 19:37 · Поправил: OnLyOnE · Личное сообщение · #7 reversecode пишет: я не понял, пол лаба что ли ламает этот чертов воссервер ? Нет, его я не ломаю) Это по работе ... reversecode пишет: ptrace не умеет хардбряков, а ставит int 3, что с целостностью кода идет наперерез Так в моем случае целкость файла проверяется только на диске.. в памяти делай что хочешь. Я ptrace и использую, только перед установкой int 3 я сохраняю оригинальные данные, а после срабатывания бряка данные по месту останова восстанавливаю и корректирую EIP. P.S. Кстати метода инжекта кода в стек и его выполнение там вполне рабочая, сейчас только сделал. Прога работает и не падает ----- aLL rIGHTS rEVERSED! |
|
Создано: 27 ноября 2014 20:07 · Личное сообщение · #8 |
|
Создано: 28 ноября 2014 19:47 · Личное сообщение · #9 reversecode Тут возникла одна проблема. Не с инжектом, а с отладкой. Мне нужно брякнуться в функции которая запускается в отдельном потоке. Ида сворачивается при установки бряка Мне то надо тупо встать на входе и глянуть стек. Чем можно отладить моногопоточное приложение? Поставил на виртуалку GDB но ида по удаленке к нему не конектится.. Может я что не так делаю? Вообще есть путевый отладчик под линь для многопотоков? ----- aLL rIGHTS rEVERSED! |
|
Создано: 28 ноября 2014 19:55 · Поправил: reversecode · Личное сообщение · #10 много потоки и форки это разные приложение возьми последнюю иду с паблика gdb и отлаживают приложения ида умеет по gdb протоколу к gdb серверу коннектиться, мануалов полно gdbserver нужно поставить, в иде gdb протокол выбрать но и linux_server у ильфака тоже неплохо работает | Сообщение посчитали полезным: OnLyOnE |
|
Создано: 28 ноября 2014 19:58 · Личное сообщение · #11 |
|
Создано: 28 ноября 2014 20:00 · Поправил: reversecode · Личное сообщение · #12 |
|
Создано: 28 ноября 2014 20:09 · Личное сообщение · #13 |
|
Создано: 02 декабря 2014 19:59 · Личное сообщение · #14 |
|
Создано: 06 декабря 2014 10:03 · Личное сообщение · #15 |
eXeL@B —› Программирование —› Инжект кода в дочерний процесс Linux |