Как вводить данные при отладке эксплойта в gdb - PullRequest
0 голосов
/ 29 мая 2020

Я новичок в разработке и ищу совета.

Мой вопрос: как я могу продолжать вводить данные с одного терминала и отлаживать свою программу на другом?

Я обычно использую gdb.debug из pwntools при наличии графического интерфейса, но теперь я могу только S SH удаленно подключаться к машине, на которой запущен двоичный файл, что означает, что gdb.debug не может создать новый терминал.

Я видел видео с демонстрацией выполнения этой техники в VIM. Как я могу этого добиться?

1 Ответ

0 голосов
/ 03 июля 2020

gdb.debug должен работать, если вы используете S SH, если вы установили context.terminal на правильное значение (например, tmux).

Как использовать pwnlib.gdb

Вот копия и вставка ответа на аналогичный вопрос :

Вы можете использовать pwnlib.gdb для взаимодействия с gdb.

Вы можете использовать функцию gdb.attach (): Из документации:

bash = process('bash')

# Attach the debugger
gdb.attach(bash, '''
set follow-fork-mode child
break execve
continue
''')

# Interact with the process
bash.sendline('whoami')

или вы можете использовать gdb.debug ():

# Create a new process, and stop it at 'main'
io = gdb.debug('bash', '''
# Wait until we hit the main executable's entry point
break _start
continue

# Now set breakpoint on shared library routines
break malloc
break free
continue
''')

# Send a command to Bash
io.sendline("echo hello")

# Interact with the process
io.interactive()

Шаблон pwntools содержит код чтобы вы начали отладку с помощью gdb. Вы можете создать шаблон pwntools, запустив pwn template ./binary_name > template.py. Затем вам нужно добавить аргумент GDB при запуске template.py для отладки: ./template.py GDB.

Если вы получите [ERROR] Could not find a terminal binary to use., вам может потребоваться установить context.terminal перед использованием gdb.

Если вы используете tmux, следующее автоматически откроет сеанс отладки gdb в новом горизонтально разделенном окне: context.terminal = ["tmux", "splitw", "-h"]

И чтобы разделить экран с новым окном сеанса gdb по вертикали: context.terminal = ["tmux", "splitw", "-v"]

(Чтобы использовать tmux, установите tmux на свой компьютер, а затем просто введите tmux, чтобы запустить его. Затем введите python template.py GDB.

Если ничего из вышеперечисленного не работает, тогда вы всегда можете просто запустить свой скрипт, использовать ps aux, найти PID, а затем использовать gdb -p PID для подключения к запущенному процессу.

Vim Explanation

Вам не нужно чтобы использовать vim для использования функций gdb pwntools, как это сделал парень в видео, которое вы связали, но вот объяснение того, что он сделал (vim также хороший инструмент, несмотря на это):

парень сначала выполнил следующую команду:

:!./%
  • : входит в командный режим в vim
  • ! выполняет команду оболочки
  • % is в основном это имя файла, который вы в настоящее время редактируете в vim

Итак, если бы ваш сценарий эксплойта был назван template.py, запуск :!./% в vim был бы таким же, как запуск ./template.py в вашем терминале . Это просто запускает эксплойт и переходит в интерактивный режим.

Это просто ярлык для выполнения вашего скрипта в vim.

Позже этот парень также использует :!./% GDB для фактического запуска сеанса pwntools gdb. Это то же самое, что запустить python template.py GDB.

...