eXeLab
eXeL@B ВИДЕОКУРС !

ВИДЕОКУРС ВЗЛОМ
выпущен 1 марта!


УЗНАТЬ БОЛЬШЕ >>
Домой | Статьи | RAR-cтатьи | FAQ | Форум | Скачать | Видеокурс
Новичку | Ссылки | Программирование | Интервью | Архив | Связь

Русский / Russian English / Английский

Сейчас на форуме: vaska_pupentsov, morgot (+4 невидимых)
 · Начало · Статистика · Регистрация · Поиск · ПРАВИЛА ФОРУМА · Язык · RSS · SVN ·

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


Ранг: 462.8 (мудрец)
Статус: Участник
Only One!

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

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


Ранг: 1002.1 (!!!!)
Статус: Участник

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

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

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

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

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



Ранг: 462.8 (мудрец)
Статус: Участник
Only One!

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

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

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

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

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


Ранг: 1002.1 (!!!!)
Статус: Участник

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

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

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

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


Ранг: 462.8 (мудрец)
Статус: Участник
Only One!

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

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


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


Ранг: 1002.1 (!!!!)
Статус: Участник

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

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

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

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

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


Ранг: 462.8 (мудрец)
Статус: Участник
Only One!

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

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


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

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


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

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


Ранг: 1002.1 (!!!!)
Статус: Участник

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

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

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


Ранг: 462.8 (мудрец)
Статус: Участник
Only One!

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

reversecode

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


Ранг: 1002.1 (!!!!)
Статус: Участник

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

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

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



Ранг: 462.8 (мудрец)
Статус: Участник
Only One!

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

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


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

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


Падает он


Ранг: 1002.1 (!!!!)
Статус: Участник

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

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

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


Ранг: 462.8 (мудрец)
Статус: Участник
Only One!

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

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


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

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


Ранг: 462.8 (мудрец)
Статус: Участник
Only One!

Создано: 2 декабря 2014 19:59 New!
Цитата · Личное сообщение · #14

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

Ранг: 507.2 (!)
Статус: Модератор

Создано: 6 декабря 2014 10:03 New!
Цитата · Личное сообщение · #15

RE ELF

{ Атач доступен только для участников форума } - reveng-ELF-0.2.pdf
 eXeL@B —› Программирование —› Инжект кода в дочерний процесс Linux

Оригинальный DVD-ROM: eXeL@B DVD !

Вы находитесь на форуме сайта EXELAB.RU
Проект ReactOS