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 строке идентичны, то есть отправленные данные будут одинаковыми.
Интерактивный режим.
Достаточно удобным является переход в интерактивный режим, в данном режиме вы будете взаимодействовать с сетевым сервисом как из консоли. Это мощный инструмент при написании эксплоитов, т.к. после получения шелла можно удобно выполнять команды на сервере.
Интерактивный режим вызывается через следующий метод.
Вот урок и подошел к концу, не хочется его перегружать. Для начала попробуйте поставить эту библиотеку и подключиться к серверу (например к тому, который мы написали на прошлом уроке).
В следующем уроке мы рассмотрим ещё некоторые базовые функции данной библиотеки и напишем простой эксплоит.