Знаковые сигнатуры часто встречаются при тестировании логических уязвимостей в небольших программах. Если вы не знаете, как генерируется знак, и можете только подделать значения параметров, но не можете изменить значение знака, то перейти к делу будет сложно. следующий шаг в тестировании уязвимостей. В этом сообщении основное внимание будет уделено тому, как обойти логотип мини-программы.
Знаковые сигнатуры часто встречаются при тестировании логических уязвимостей в небольших программах. Если вы не знаете, как генерируется знак, и можете только подделать значения параметров, но не можете изменить значение знака, то перейти к делу будет сложно. следующий шаг в тестировании уязвимостей. В этом сообщении основное внимание будет уделено тому, как обойти логотип мини-программы.。
знак обычно используется для подписей параметров для проверки целостности и подлинности данных. Для проверки легальности передачи клиентских данных и предотвращения фальсификации параметров, маскировки, повтора и утечки данных пользователями выполняется проверка подписи по общему знаку. Метод генерации идентификации знака обычно использует определенный алгоритм шифрования для шифрования секретного ключа, метки времени, специальных символов, случайных чисел и других параметров после определенной сортировки и передает его в качестве знака параметра в интерфейсе. Вы также можете поместить знак. запрос Глава. да
Общие методы шифрования включают в себя: шифрование MD5, шифрование AES, шифрование SHA и т. д.
1. Изучите формат знака и проверьте, имеет ли он форму слабых учетных данных, таких как кодировка base64, и вы можете увидеть исходные данные после декодирования, или если они в формате MD5, вы можете попытаться расшифровать их; напрямую, чтобы увидеть, можно ли расшифровать исходные данные и т. д.
2. Попробуйте удалить поле знака или оставить значение знака пустым, чтобы посмотреть, сможете ли вы обойти проверку.
3. Попробуйте декомпилировать, найти алгоритм шифрования в декомпилированном исходном коде и найти способ генерации знака.
Инструменты, участвующие в тестировании:
Инструмент для расшифровки исходного кода мини-программы: https://share.weiyun.com/uMqNGOXv
Декомпилировать небольшой программный инструмент: https://github.com/ezshine/wxapkg-convertor/releases/tag/1.0.1
1、 Тестовый апплет
Откройте определенный апплет, перехватите пакет, и если вы произвольно измените параметры и отправите пакет, будет сообщено об ошибке, и вы обнаружите, что поле знака было добавлено.
Непосредственное изменение параметров выявило ошибку:
Попробуйте удалить поле знака напрямую и получите ошибку:
Попробуйте расшифровать знак, чтобы убедиться, что это слабое шифрование. После наблюдения выяснилось, что 32-значное число предполагало шифрование MD5, однако расшифровка показала, что его невозможно расшифровать.
После безуспешных попыток попробуйте декомпилировать апплет и посмотреть, сможете ли вы найти способ генерировать знак.
2、 Декомпилировать небольшую программу
Сначала вам нужно найти место хранения мини-программы. В Windows это место хранения мини-программы WeChat по умолчанию (C:\Users{имя пользователя системы}\Documents\WeChat. Files\Applet{идентификатор мини-программы}\), поскольку все хранящиеся здесь команды основаны на идентификаторе апплета, вы можете сначала очистить апплет в WeChat, а затем открыть апплет, который хотите протестировать.
Следует отметить, что вам необходимо дождаться полного открытия мини-программы, а затем нажать на несколько функций, чтобы убедиться, что все пакеты запущены. Найдите соответствующий wxapkg и проверьте, можно ли его декомпилировать напрямую. Некоторые из них зашифрованы. В этом случае сначала используйте инструмент Unpacker для расшифровки, а затем используйте инструмент wxapkgconvertor для декомпиляции пакета.
После расшифровки используйте инструмент декомпиляции, чтобы извлечь исходный код:
3 , Глобальный поиск местоположения функции шифрования
Откройте декомпилированный исходный код, выполните поиск MD5 по всему миру и найдите основной код шифрования следующим образом:
Основные функции шифровального знака заключаются в следующем:
Сначала пройдитесь по объекту t, отсортируйте заданные в нем параметры, переназначьте атрибут «biz_content» переменной r и преобразуйте атрибуты параметра r из формата json в тип объекта. После интегрирования в виде строки “&” Объединить, объединить строку с заданным значением "ihos-mini-sign-8". Расположите их в порядке возрастания алфавита. После упорядочивания используйте MD5 для шифрования, а затем преобразуйте их в прописные буквы.
4 , код обратного вызова
Проанализировав основные функции шифрования, вы можете перезвонить и найти соответствующие функции и параметры.
Проследите исходный код, чтобы увидеть, где вызывается encryptSign, найдите encryptSign и найдите функцию GatewayRequest. Продолжайте следить.
Продолжайте следовать функции GatewayRequest и найдите следующий исходный код:
Продолжайте следить:
getPatInfoByIdNo
Обнаружено, что входящее n является константой
r — это объект, который окончательно преобразуется в формат xml.
Продолжайте следить за генерированием запроса.
Следуйте функции l:
Я нашел, что представляет собой каждый параметр в функции генерации знаков.
Специальные символы: ihos-mini-sign-8.
5 , получаем метод генерации знаков
Определите метод генерации знака на основе основной функции, вернитесь к коду на первом этапе и расположите эти параметры в возрастающем алфавитном порядке.
Окончательный метод генерации знаков получается следующим образом:
app_id + метод (интерфейс, на основе которого определяется, какой интерфейс вызывать) + nonce_str (метка времени) + контент biz_content + токен (полученный при входе в мини-программу) + фиксированное значение (ihos-mini-sign-8)
6 , результаты испытаний
Зашифруйте эту строку символов с помощью MD5 и преобразуйте ее в верхний регистр, и вы получите соответствующее значение знака. Поместите его в пакет данных и успешно проверьте фальсификацию. Скриншот выглядит следующим образом.
Если вы встретите логотип знака во время мини-тестирования программы, вы можете сначала проверить, является ли он недействительным или слабо зашифрованным. Если нет, вы можете попытаться найти метод создания знака посредством анализа исходного кода, который можно использовать для изменения сумм платежей. , превышение полномочий и другие уязвимости для дальнейшего увеличения вреда.
Во время теста безопасности, когда вы сталкиваетесь с использованием знаковых подписей в пакетах данных, подобных приведенному выше объяснению, после анализа метода шифрования очень проблематично, пишете ли вы свой собственный скрипт или шифруете и расшифровываете через веб-сайт, а затем вставляете его в Burp. для тестирования. Поэтому вы можете рассмотреть возможность объединения плагина Burpy для тестирования уязвимостей.
Укажите свой собственный скрипт Python в пути к файлу Burpy PY:. Burpy также предоставляет шаблоны сценариев, которые могут напрямую выполнять алгоритмы шифрования и дешифрования в своих шаблонах сценариев.
(1) После включения процессора включения при использовании Intrumer для выполнения таких действий, как взлом методом грубой силы, если полезные данные необходимо зашифровать или подписать, вы можете внедрить алгоритм шифрования/подписи в функцию процессора вашего собственного скрипта Python.
(2) Включите автоматическое включение. enc/dec автоматически вызовет метод шифрования и автоматически выполнит шифрование и дешифрование при нажатии кнопки воспроизведения.
После настройки нажмите «Запустить сервер» и можно приступать к обычному тестированию.
Скрипт:
Чтобы запустить плагин:
Если функция автоматического шифрования/дешифрования отключена, вы можете щелкнуть правой кнопкой мыши для шифрования и дешифрования.
После включения не требуется никаких операций щелчка правой кнопкой мыши, воспроизведение автоматически выполнит операции шифрования и дешифрования.
Оригинальная ссылка: https://forum.butian.net/share/2342.