LD_preload для использования других версий libc, не работает в pwntools - PullRequest
0 голосов
/ 29 января 2019

Я хочу использовать другие версии библиотеки для моего pwn исследования в pwntools, но произошла ошибка EOF.

Я пытался решить эту проблему, 3 раза менял версии ubuntu (рабочий стол 18.04 -> рабочий стол 14.04 -> сервер 18.04.0), переустанавливал python и pwntools 4 раза.в настоящее время версии - это сервер ubuntu 18.04.0, Python 2.7.15rc1, pwntools 3.12.2

Я пытался использовать библиотеку других версий для своего исследования pwn в pwntools.как это:

    p = process("./binary_name",env={"LD_PRELOAD" : "./libc_name"})

и пробовал также

    env = {"LD_PRELOAD": os.path.join(os.getcwd(), "libc_name")}
    p = process("./binary_name",env=env)

и код Python, произошла ошибка. Произошла ошибка. Я уже установил разрешение libc на chmod 777, но результат тот же.

    [*] Process './aeiou' stopped with exit code -4 (SIGILL) (pid 77469)
    Traceback (most recent call last):
    File "ex4.py", line 6, in <module>
    p.sendlineafter(">>","3")
    File "/home/synod2/.local/lib/python2.7/site- packages/pwnlib/tubes/tube.py", line 747, in sendlineafter
    ~~~~~~~~~~~~~~
    EOFError

Я не знаю, почему произошла ошибка EOF.но, из-за 3 разных версий Ubuntu выдают ту же ошибку, я думаю, что я пропустил установить что-то.но я не знаю, что я пропустил!

1 Ответ

0 голосов
/ 26 марта 2019

Возможно, вам стоит попробовать это в Ubuntu 16.

Очевидно, что ваш двоичный файл динамически связан.Поэтому, когда программе необходимо вызвать некоторую функцию libc, например read.Он передает некоторую информацию динамическому компоновщику, затем компоновщик вычисляет реальный адрес функции чтения.

, но функции в libc имеют атрибут версии.Поэтому, если вы попытаетесь использовать LD_PRELOAD в Ubuntu 18.04.динамический компоновщик будет пытаться найти что-то вроде read_2_27 в вашем 2.23-version-libc, который имеет только read_2_23.поэтому ваша программа не будет выполнена.


ОБНОВЛЕНИЕ:

другое решение - указать исполняемому файлу правильную версию ld.so

В файле эльфа есть сегмент (INTERP), в котором сохраняется путь к ld.so для использования.вы можете просто изменить его на путь к ld.so, который вы хотите использовать.

Кстати, вы можете найти множество версий ld.so в репозитории

...