Python в ИБ. Часть 3. Основы работы с библиотекой pwntools.

Хочешь написать свой эксплоит? Ты на верном пути. В этом уроке мы рассмотрим специализированную библиотеку для сетевого программирования и написания сетевых эксплойтов. Мы рассмотрим как с помощью данной библиотеки подключится к сетевому сервису, как отправлять и принимать данные.

Теория.

В этом разделе просто посмотрим, что нужно установить, чтобы данная библиотека была у вас.

Устанавливается эта библиотека через команд: pip install pwntools

Документация библиотеки – http://docs.pwntools.com/en/stable/

Там вы можете найти гайды по установки, пользованию, а также описанию многих модулей и функций.

Практика.

Переходим к разбору базовых функций.

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

Теперь создадим подключение, в отличии от библиотеки socket, здесь нет необходимости создавать отдельный объект и вызывать метод connect. В pwntools можно просто написать так.

Таким образом мы подключимся к ip и порту, и сразу получим соединение по которому можно общаться.

Функции отправки данных.

Функции отправки данных представлены 2-умя методами: send и sendline.

Их отличие в том, что send отправляет только то, что вы ему укажете в аргументе, а sendline добавит к вашему буферу в конце перевод строки “\n”. Удобнее пользоваться  send, так как хакер всегда должен контролировать все данные, которые он отправляет. Обе функции принимают один аргумент, который является строкой (тип <str>).

Функция принятия данных.

Итак функции принятия данных представлены целым набором:

recv() – обычный recv, при отсутствии аргумента, туда подставляется число 4096 (4 Кб).

recvline() – получает только одну строчку от сервера (строка – последовательность символов заканчивающаяся символом \n)

recvuntil() – Функция принимает данные пока не встретит определённую последовательность символов, указанную в аргументе функции.

recvall() – нестабильная функция, которая по идее должна принимать все данные от сервера, пока он их посылает, однако, зачастую она подвисает и работает совсем не так, как хочется, хотя иногда её можно использовать достаточно эффективно.

Примеры вызова функций.

Вызов в 11 и в 12 строке идентичны, то есть отправленные данные будут одинаковыми.

Интерактивный режим.

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

Интерактивный режим вызывается через следующий метод.

Вот урок и подошел к концу, не хочется его перегружать. Для начала попробуйте поставить эту библиотеку и подключиться к серверу (например к тому, который мы написали на прошлом уроке).

В следующем уроке мы рассмотрим ещё некоторые базовые функции данной библиотеки и напишем простой эксплоит.