инъекция процесса linux, что случилось с общим объектным файлом и почему все отображение памяти процесса после инъекции изменилось?

Я пытаюсь улучшить инъекцию процессов Linux, и у меня есть некоторые вещи, которые я не совсем понимаю.

Метод инъекции, который я использую, — это базовая инъекция ptrace в текущее значение рипа. последовательность действий такова: ПРИСОЕДИНЯЙТЕСЬ к запущенному процессу с помощью ptrace, получите regs и измените память, размещенную в текущем рипе с помощью шеллкода, содержащего Linux/x86-x64 /bin/sh, используя PTRACE_POKETDATA, затем ОТСОЕДИНИТЕ процесс.

файл инъекции и целевой файл были взяты с https://github.com/0x00pf/0x00sec_code/tree/master/mem_inject

сначала я запустил целевой процесс и увидел его иерархию pstree:запущенный процесс скриншотпроцесс pstree иерархия

во-вторых, я взглянул на отображение памяти текущего процесса (как показано на рисунке):отображение памяти процесса — до внедрения

затем я запустил впрыск (как показано на рисунке):часть впрыска

Итак, инъекция происходит по адресу 0x7f049990bb96, как мы видим на скриншоте. это означает, что он находится на этой странице в памяти (из отображения памяти процесса - до изображения инъекции):введенная страница в памяти

затем после инъекции я снова запустил команду pstree, чтобы увидеть иерархию процессов и карту памяти:иерархия процессов pstree - после инъекции отображение памяти процесса - после инъекции

У меня есть два основных вопроса, чтобы улучшить мое понимание:

  1. когда происходит внедрение, оно внедряется на страницу libc-2.33.so. файл libc-2.33.so является общим объектом, поэтому он должен загружаться в память один раз, и каждый процесс будет ссылаться на один и тот же файл общего объекта. так что теперь, из-за защиты COW(копирование при записи), как мы можем видеть в сопоставлении памяти процесса (разрешения r-xp [p означает частный - имеет защиту COW]), у нас есть две версии libc-2.33. таким образом загружается в память, исходный общий объект libc и записанная (внедренная) libc загружается в процесс из-за COW.

это правда или я что-то неправильно понимаю в процессе?

  1. почему все сопоставления памяти процесса после инъекции изменились, а иерархия pstree не содержит /bin/sh в качестве дочернего процесса «целевого» процесса, но отбрасывает «целевой» процесс?

0 ответов

Другие вопросы по тегам