PWN: от начала до отказа (2) - Начало работы с Pwntools
PWN: от начала до отказа (2) - Начало работы с Pwntools

В предыдущей статье была представлена ​​конструкция среды для выполнения вопросов CTF PWN. В этой статье мы покажем, как использовать Pwntools, чтобы быстрее решать проблемы.

0x00 Pwntools Введение

Pwntools — это платформа CTF и библиотека разработки уязвимостей, разработанная на Python и предназначенная для того, чтобы пользователи могли просто и быстро писать эксплойты. Охватывает почти все инструменты, необходимые для написания сценариев вопросов pwn.

0x01 Импортировать библиотеку pwntools

Язык кода:javascript
копировать
from pwn import *

0x02 Установить соединение

Установление соединения особенно важно для решения вопросов pwn. Во время соревнования вам обычно предоставляется файл вопросов pwn (обычно файл elf для Linux) и адрес nc.

  • файл elf используется для локальной отладки с целью поиска уязвимостей.
  • Адрес nc используется для атак с целью получения флага

Поэтому нам необходимо установить соединение с сервером nc и файлом elf.

Установить соединение с программными файлами

Мы можем использовать модуль pwnlib.elf для подключения программных файлов.

Язык кода:javascript
копировать
elf = ELF('./process') #processПрограммный файл, указанный в вопросе

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

Установить соединение с сервером

Подключаемся к серверу через модуль pwnlib.tubes

Язык кода:javascript
копировать
r = remote('ip',port) #Заполните ip и порт, указанные в вопросе, в соответствующей позиции

После подключения к серверу вы можете использовать встроенные методы для выполнения ряда интерактивных операций, таких как отправка и получение данных с сервера.

0x03 Установить целевую архитектуру и операционную систему

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

Язык кода:javascript
копировать
context.arch = 'i386' Для # 32-битной программы установлено значение i386; для 64-битной программы установлено значение amd64;
context.binary = './process' #Вы можете использовать этот метод, чтобы автоматически установить подходящее значение.
context.os = 'linux'
context.log_level = 'debug' #Отладочную информацию можно вывести на экран
context.terminal = ['tmux', 'splitw', '-h'] #Сообщите pwntools информацию о своем терминале, чтобы облегчить последующую динамическую отладку
context.endian = 'big' #Устанавливаем порядок байтов с прямым порядком байтов и с прямым порядком байтов на младший

0x04 Взаимодействие

Разобравшись с некоторыми из вышеописанных приготовлений, можно попробовать начать взаимодействовать с программой.

получать данные
Язык кода:javascript
копировать
r.recv() #получать данные
r.recvline() #Получаем данные строки
r.recvall() #получать данные до тех пор, пока не будет достигнут EOF
Отправить данные
Язык кода:javascript
копировать
r.send() #Отправить данные
r.sendline() #sendonelineданные
r.sendlineafter('str',payload) #При получении указанных данных Отправить данные
взаимодействие оболочки
Язык кода:javascript
копировать
r.interactive()

0x05 Получить адрес функции

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

Например, получите адрес функции puts:

Язык кода:javascript
копировать
puts_got_addr = elf.got['puts'] #Get putsfunctiongot адрес таблицы
puts_plt_addr = elf.plt['puts'] #Получить адрес таблицы putsfunctionplt
puts_sym_addr = elf.symbols['puts'] #Получить адрес таблицы символов putsфункции

0x06 shellcraft

Когда мы отвечаем на вопросы, мы часто используем шеллкод, но поиск соответствующего шеллкода в Интернете каждый раз сильно снизит нашу эффективность при ответе на вопросы. Модуль шеллкрафта может помочь нам автоматически генерировать шеллкод.

Язык кода:javascript
копировать
shellcraft.sh()

0x07 打包解包&компиляция

Операции упаковки и распаковки часто используются при отправке и получении данных.

Язык кода:javascript
копировать
p32() #Упаковать данные в 32-битный двоичный формат, порядок байтов задается context.endian
p64() #Упаковать данные в 64-битный двоичный формат, порядок байтов задается context.endian
u32() #Распаковываем данные в 32-битном двоичном формате
u64() #Распаковываем данные в 64-битном двоичном формате

Иногда мы также используем операции сборки, например хотим отправить шеллкод:

Язык кода:javascript
копировать
shellcode = asm(shellcraft.sh())
r.sendline(shellcode)
boy illustration
Учебное пособие по Jetpack Compose для начинающих, базовые элементы управления и макет
boy illustration
Код js веб-страницы, фон частицы, код спецэффектов
boy illustration
【новый! Суперподробное】Полное руководство по свойствам компонентов Figma.
boy illustration
🎉Обязательно к прочтению новичкам: полное руководство по написанию мини-программ WeChat с использованием программного обеспечения Cursor.
boy illustration
[Забавный проект Docker] VoceChat — еще одно приложение для мгновенного чата (IM)! Может быть встроен в любую веб-страницу!
boy illustration
Как реализовать переход по странице в HTML (html переходит на указанную страницу)
boy illustration
Как решить проблему зависания и низкой скорости при установке зависимостей с помощью npm. Существуют ли доступные источники npm, которые могут решить эту проблему?
boy illustration
Серия From Zero to Fun: Uni-App WeChat Payment Practice WeChat авторизует вход в систему и украшает страницу заказа, создает интерфейс заказа и инициирует запрос заказа
boy illustration
Серия uni-app: uni.navigateЧтобы передать скачок значения
boy illustration
Апплет WeChat настраивает верхнюю панель навигации и адаптируется к различным моделям.
boy illustration
JS-время конвертации
boy illustration
Обеспечьте бесперебойную работу ChromeDriver 125: советы по решению проблемы chromedriver.exe не найдены
boy illustration
Поле комментария, щелчок мышью, специальные эффекты, js-код
boy illustration
Объект массива перемещения объекта JS
boy illustration
Как открыть разрешение на позиционирование апплета WeChat_Как использовать WeChat для определения местонахождения друзей
boy illustration
Я даю вам два набора из 18 простых в использовании фонов холста Power BI, так что вам больше не придется возиться с цветами!
boy illustration
Получить текущее время в js_Как динамически отображать дату и время в js
boy illustration
Вам необходимо изучить сочетания клавиш vsCode для форматирования и организации кода, чтобы вам больше не приходилось настраивать формат вручную.
boy illustration
У ChatGPT большое обновление. Всего за 45 минут пресс-конференция показывает, что OpenAI сделал еще один шаг вперед.
boy illustration
Copilot облачной разработки — упрощение разработки
boy illustration
Микросборка xChatGPT с низким кодом, создание апплета чат-бота с искусственным интеллектом за пять шагов
boy illustration
CUDA Out of Memory: идеальное решение проблемы нехватки памяти CUDA
boy illustration
Анализ кластеризации отдельных ячеек, который должен освоить каждый&MarkerгенетическийВизуализация
boy illustration
vLLM: мощный инструмент для ускорения вывода ИИ
boy illustration
CodeGeeX: мощный инструмент генерации кода искусственного интеллекта, который можно использовать бесплатно в дополнение к второму пилоту.
boy illustration
Машинное обучение Реальный бой LightGBM + настройка параметров случайного поиска: точность 96,67%
boy illustration
Бесшовная интеграция, мгновенный интеллект [1]: платформа больших моделей Dify-LLM, интеграция без кодирования и встраивание в сторонние системы, более 42 тысяч звезд, чтобы стать свидетелями эксклюзивных интеллектуальных решений.
boy illustration
LM Studio для создания локальных больших моделей
boy illustration
Как определить количество слоев и нейронов скрытых слоев нейронной сети?
boy illustration
[Отслеживание целей] Подробное объяснение ByteTrack и детали кода