Python с pwntools для windows

Введение в PEDA и Pwntools. Часть 2

Продолжим наше знакомство с необходимым инструментарием..

Pwntools

Pwntools – это python библиотека позволяющая эффективно и быстро писать эксплойты. Очень часто её используют в CTF. Сейчас мы разберёмся как с ней работать.

Прежде всего нужно её поставить. Хотя разработчики и пишут, что лучше использовать python3, у меня на 3-ем питоне библиотека не взлетела.

Получилось поставить так:

Как использовать Pwntools

Существует три способа использования:

  1. Интерактивно через python/iPython консоль
  2. Непосредственно в скрипте python
  3. Pwntools-утилитой командной строки

Способ 1. Интерактивный через консоль

Часто при написании эксплойта есть необходимость что-то по-побыстрому проверить не создавая полноценный скрипт. Консоль iPython отличный способ изучить Pwntools API:

В iPython есть функция автодополнения и встроенная система для поиска ключевых слов в документации. К примеру, если мы хотим посмотреть что делает функция p32, просто используем символ ? :

Способ 2. В скрипте python

Для начала, воспользуемся данным шаблоном:

Попробуем из скрипта вызвать Pwntools API:

Способ 3. Инструменты командной строки Pwntools

Pwntools устанавливает pwn скрипт в директорию /usr/local/bin. Для получения списка команд, просто запустите pwn -h:

Взаимодействие с исполняемыми файлами

Существует множество векторов атак, давайте сосредоточимся на удалённо запущенных исполняемых файлах, к которым у нас есть доступ по сети.

Для начала, давайте посмотрим, как мы можем взаимодействовать с локальной копией файла, который на вход принимает строку из stdin и возвращает результат в stdout.

Локальная копия исполняемого файла

Попробуем запустить следующий файл:

Вот исходный код запускаемого файла:

Главная задача программы – сравнить введёные данные и строку пароля . Если они совпадают, то запускается шелл:

Теперь мы осознали, что нужно отправить в качестве входных данных. Давайте напишем простой эксплойт используя Pwntools:

Потратьте немного времени для того чтобы разобраться, как работает скрипт. Обратите внимание на строку process(“../build/2_interactive”). Она запускает новый процесс и позволяет взаимодействовать с процессом как с сокетом. Давайте запустим скрипт, чтобы убедиться что всё работает:

Моделирование сетевого приложения

Для начала, мы создадим новую скрин сессию, для запуска нашего сервера при помощи утилиты socat:

Теперь запустим сам сервер, порт 1330:

Пока тут всё. Вернёмся к нашей первой bash сессии при помощи комбинации клавиш: CTRL-A-D.

Для того, чтобы проверить что сервер работает на 1330 порту, мы можем запустить netcat:

Теперь модифицируем первый скрипт, который работал с бинарными файлами. Просто закомментируем строку запуска процесса process(), и допишем remote(“localhost”, 1330):

Отладка при помощи GDB

Pwntools включает в себя GDB функционал, для его изучения лучше пройтись по офф документации: http://docs.pwntools.com/en/stable/gdb.html

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

Используя следующий скрипт, мы можем вывести id процесса перед взаимодействием с ним:

Теперь запустим ещё одну SSH сессию и запустим наш скрипт:

Вернёмся в предыдущую bash сессию и запустим GDB. Теперь мы можем присоедениться прямо к процессу:

Программа остановлена где то в библиотеке libc. Мы можем установить наши точки останова. Давайте предположим, что мы уже методом реверса определили куда передаются входные данные – в функцию check_creds():

Давайте установим несколько точек останова на функции и пошагово продолжим выполнение. Таким образом мы сможем определить, какие данные нужно подать на вход, чтобы пройти проверку:

Вернитесь к терминалу где запущен скрипт, нажмите Enter для отправки данных. В терминале где открыт GDB, отладчик должен прервать выполнение в точке останова. Продолжайте отладку чтобы получить нужные значения.

Админ сайта. Публикует интересные статьи с других ресурсов, либо их переводы. Если есть настроение, бывает, что пишет и что-то своё.

Установка Python и pip на Windows

В данном разделе мы научимся устанавливать Python и менеджер пакетов pip на Windows 10 с нуля. Лучший способ установить Python на Windows — это скачать официальный установщик с сайта python.org. Чтобы сделать это, откройте браузер и перейдите по ссылке https://python.org/. После завершения загрузки установщика, откройте «Загрузки». Сайт обнаружит, что вы посетили его с Windows, и предложит скачать последнюю версию Python 3 или Python 2. Если вы не знаете, какую версию использовать, то я рекомендую Python 3. Если вам нужно работать с унаследованным кодом Python 2, тогда вам необходим Python 2. Под вкладками DownloadsDownload for Windows нажмите кнопку “Python 3.X.X” (или “Python 2.X.X”), чтобы скачать установочный файл.

Читайте также:  Астра линукс настройка печати

64-разрядный Python против 32-разрядного

Если вы гадаете, какую версию Python нужно использовать 64-разрядную или 32-разрядную, вам, скорее всего, понадобится 32-разрядная. Иногда достаточно тяжело найти бинарники для 64-разрядной версии, а это значит, что некоторые сторонние модули могут установиться неправильно на 64-разрядной версии Python. Мое мнение – использовать ту версию, которую конкретно рекомендуют на официальном сайте. Если вы кликните кнопку Python 3 или Python 2 под “Download for Windows”, вы получите именно ту версию, которую выбрали. Помните, Если вы в итоге сделаете неправильный выбор, и захотите перейти на другую версию Python, вы можете просто удалить существующую версию и переустановить его, скачав другой установщик с официального сайта.

Запускаем установщик Python

По окончанию загрузки установщика, запустите его двойным щелчком мыши, чтобы начать установку Python. Обязательно установите флажок на «Add Python X.Y to PATH» в мастере настройке. Убедитесь, что флажок “Add Python X.Y to PATH” поставлен в установщике, в противном случае у вас будут проблемы с доступом инсталлятора Python к командной стоке. Нажмите «Установить» для начала установки. Установка должна пройти быстро, после чего Python будет готов к запуску на вашей системе. К следующему шагу нужно убедиться, что все было выполнено надлежащим образом.

Подтверждаем, что Python был установлен правильно

По окончанию установки, Python должен быть установлен на вашем компьютере. Давайте убедимся в том, что все было выполнено правильно, протестировав, имеет ли Python доступ к командной строке (cmd) Windows:

  • Откройте командную строку Windows, запустив cmd.exe
  • Введите pip и нажмите «Enter»
  • Вы увидите справочный текст менеджера пакетов Python под названием “pip”. Если вы получите уведомление об ошибке, повторите этапы установки Python, и убедитесь в том, что вы обладаете рабочей версией Python. Большая часть проблем, с которыми вы можете столкнуться, будут иметь то или иное отношение к неправильной настройке PATH. Переустановка и подтверждение того, что опция “Add Python to PATH” была активирована, должны исправить эту проблему.

Есть вопросы по Python?

На нашем форуме вы можете задать любой вопрос и получить ответ от всего нашего сообщества!

Как устанавливать пакеты в Python — с PIP и без

Прежде чем что-то устанавливать, давайте разберёмся, что такое пакет, чем он отличается от модуля, и как с ним работать. У слова «пакет» применительно к Python два значения.

C одной стороны, пакеты Python — это Py-приложения, дополнения или утилиты, которые можно установить из внешнего репозитория: Github, Bitbucket, Google Code или официального Python Package Index . На сервере пакеты хранятся в .zip и .tar архивах, либо в дополнительной упаковке — «яйцах» (.egg, старый формат) или «колесах» (.whl). В составе пакета, как правило, есть сценарий установки setup.py, который хранит сведения о зависимостях — других пакетах и модулях, без которых пакет работать не будет.

С другой стороны, если речь об архитектуре Python-приложения, пакет — это каталог, внутри которого файл __init__.py и, опционально, другие каталоги и файлы .py . Так большую Python-программу разбивают на пакеты и модули. Модуль — файл с исходным кодом, который можно использовать в других приложениях: как «заготовку» для будущих проектов или как часть библиотеки/фреймворка. Но к теме статьи это прямого отношения не имеет, поэтому дальше мы будем говорить только о пакетах из репозиториев.

Чтобы за секунды устанавливать пакеты со всеми зависимостями, используют менеджер пакетов pip или модуль easy_install . В большинстве случаев рекомендуется использовать pip. И только если у вас есть инфраструктура на пакетах .egg, которые pip не открывает, нужен easy_install.

Читайте также:  Windows form parking window

Установка PIP для Python 3 и 2

Если вы используете виртуальные окружения на базе venv или virtualenv, pip уже установлен. Начиная с Python 3.4 (для Python 2 — с версии 2.7.9) pip поставляется вместе с интерпретатором. Для более ранних версий устанавливать менеджер пакетов нужно вручную. Вариантов два:

C помощью скрипта get_pip.py — быстро.

Через setuptools — кроме pip сможем использовать easy_install.

Вариант 1. Скачиваем скрипт get_pip.py и запускаем в консоли. Для этого открываем терминал через Win+R>»cmd»>OK и пишем:

Остальное установщик сделает сам: если нужно, попутно установит wheel (для распаковки .whl-колес) и setuptools. Чтобы запретить инсталляцию дополнительных инструментов, можно добавить в строку ключи —no-setuptools и/или —no-wheels.

Если возникает ошибка, путь к Python не прописан в переменной среды $PATH. Нужно либо найти эту переменную в системном реестре и задать её значение, либо каждый раз указывать полный путь до python.exe, а за ним уже имя исполняемого Py-файла:

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

Вариант 2. Скачиваем архив с setuptools из PYPI и распаковываем в отдельный каталог. В терминале переходим в директорию setuptools c файлом setup.py и пишем:

python setup.py install

Обновить pip для Python в Windows можно так:
python pip install -U pip

Если это не работает, нужно добавить путь к папке с pip в $PATH.

Установка пакета в pip

Пора запустить pip в Python и начать устанавливать пакеты короткой командой из консоли:

pip install имя_пакета

При установке в Windows, перед pip нужно добавить «python -m».

Обновить пакет не сложнее:

pip install имя_пакета -U

Если у вас последняя версия пакета, но вы хотите принудительно переустановить его:

pip install —force-reinstall

Посмотреть список установленных пакетов Python можно с помощью команды:

Найти конкретный пакет по имени можно командой «pip search». О других командах можно прочесть в справке, которая выдается по команде «pip help».

Удаление пакета Python

Когда пакет больше не нужен, пишем:

pip uninstall имя_пакета

Как установить пакеты в Python без pip

Формат .egg сейчас используют не часто, поэтому pip его не поддерживает. Модуль easy_install умеет устанавливать как .egg, так и обычные пакеты, но есть у него важные минусы:

он не удаляет пакеты,

он может пытаться установить недозагруженный пакет.

Использовать easy_install можно сразу после установки setuptools. Хранится модуль в папке Scripts вашего интерпретатора. Если у вас в $PATH верно прописан путь, ставить пакеты из PYPI можно короткой командой:

Для обновления после install и перед именем пакета нужно ставить ключ -U. Откатиться до нужной версии можно так:

Если нужно скачать пакет из альтернативного источника, вы можете задать URL или локальный адрес на компьютере:

Чтобы узнать об опциях easy_install, запустим его с ключом -h:

Список пакетов, установленных через easy_install, хранится в файле easy-install.pth в директории /libs/site-packages/ вашего Python.

К счастью, удалять установленные через easy_install пакеты можно с помощью pip. Если же его нет, потребуется удалить пакет вручную и стереть сведения о нем из easy-install.pth.

Теперь вы умеете ставить и удалять пакеты для вашей версии Python.

Кстати, для тех, кто изучает Python, мы подготовили список полезных и практичных советов.

Прежде чем что-то устанавливать, давайте разберёмся, что такое пакет, чем он отличается от модуля, и как с ним работать. У слова «пакет» применительно к Python два значения.

C одной стороны, пакеты Python — это Py-приложения, дополнения или утилиты, которые можно установить из внешнего репозитория: Github, Bitbucket, Google Code или официального Python Package Index . На сервере пакеты хранятся в .zip и .tar архивах, либо в дополнительной упаковке — «яйцах» (.egg, старый формат) или «колесах» (.whl). В составе пакета, как правило, есть сценарий установки setup.py, который хранит сведения о зависимостях — других пакетах и модулях, без которых пакет работать не будет.

Читайте также:  Windows processes to disable

С другой стороны, если речь об архитектуре Python-приложения, пакет — это каталог, внутри которого файл __init__.py и, опционально, другие каталоги и файлы .py . Так большую Python-программу разбивают на пакеты и модули. Модуль — файл с исходным кодом, который можно использовать в других приложениях: как «заготовку» для будущих проектов или как часть библиотеки/фреймворка. Но к теме статьи это прямого отношения не имеет, поэтому дальше мы будем говорить только о пакетах из репозиториев.

Чтобы за секунды устанавливать пакеты со всеми зависимостями, используют менеджер пакетов pip или модуль easy_install . В большинстве случаев рекомендуется использовать pip. И только если у вас есть инфраструктура на пакетах .egg, которые pip не открывает, нужен easy_install.

Установка PIP для Python 3 и 2

Если вы используете виртуальные окружения на базе venv или virtualenv, pip уже установлен. Начиная с Python 3.4 (для Python 2 — с версии 2.7.9) pip поставляется вместе с интерпретатором. Для более ранних версий устанавливать менеджер пакетов нужно вручную. Вариантов два:

C помощью скрипта get_pip.py — быстро.

Через setuptools — кроме pip сможем использовать easy_install.

Вариант 1. Скачиваем скрипт get_pip.py и запускаем в консоли. Для этого открываем терминал через Win+R>»cmd»>OK и пишем:

Остальное установщик сделает сам: если нужно, попутно установит wheel (для распаковки .whl-колес) и setuptools. Чтобы запретить инсталляцию дополнительных инструментов, можно добавить в строку ключи —no-setuptools и/или —no-wheels.

Если возникает ошибка, путь к Python не прописан в переменной среды $PATH. Нужно либо найти эту переменную в системном реестре и задать её значение, либо каждый раз указывать полный путь до python.exe, а за ним уже имя исполняемого Py-файла:

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

Вариант 2. Скачиваем архив с setuptools из PYPI и распаковываем в отдельный каталог. В терминале переходим в директорию setuptools c файлом setup.py и пишем:

python setup.py install

Обновить pip для Python в Windows можно так:
python pip install -U pip

Если это не работает, нужно добавить путь к папке с pip в $PATH.

Установка пакета в pip

Пора запустить pip в Python и начать устанавливать пакеты короткой командой из консоли:

pip install имя_пакета

При установке в Windows, перед pip нужно добавить «python -m».

Обновить пакет не сложнее:

pip install имя_пакета -U

Если у вас последняя версия пакета, но вы хотите принудительно переустановить его:

pip install —force-reinstall

Посмотреть список установленных пакетов Python можно с помощью команды:

Найти конкретный пакет по имени можно командой «pip search». О других командах можно прочесть в справке, которая выдается по команде «pip help».

Удаление пакета Python

Когда пакет больше не нужен, пишем:

pip uninstall имя_пакета

Как установить пакеты в Python без pip

Формат .egg сейчас используют не часто, поэтому pip его не поддерживает. Модуль easy_install умеет устанавливать как .egg, так и обычные пакеты, но есть у него важные минусы:

он не удаляет пакеты,

он может пытаться установить недозагруженный пакет.

Использовать easy_install можно сразу после установки setuptools. Хранится модуль в папке Scripts вашего интерпретатора. Если у вас в $PATH верно прописан путь, ставить пакеты из PYPI можно короткой командой:

Для обновления после install и перед именем пакета нужно ставить ключ -U. Откатиться до нужной версии можно так:

Если нужно скачать пакет из альтернативного источника, вы можете задать URL или локальный адрес на компьютере:

Чтобы узнать об опциях easy_install, запустим его с ключом -h:

Список пакетов, установленных через easy_install, хранится в файле easy-install.pth в директории /libs/site-packages/ вашего Python.

К счастью, удалять установленные через easy_install пакеты можно с помощью pip. Если же его нет, потребуется удалить пакет вручную и стереть сведения о нем из easy-install.pth.

Теперь вы умеете ставить и удалять пакеты для вашей версии Python.

Кстати, для тех, кто изучает Python, мы подготовили список полезных и практичных советов.

Оцените статью