Обход шифрования на стороне клиента для чтения внутренних файлов Windows Server
Эй, это снова я, абхишекморла,
Этот блог о том, как можно взломать шифрование на стороне клиента с помощью анализа исходного кода и прочитать внутренние файлы сервера Windows, т.е. LFI , но после обхода уровня шифрования .
Итак, я придумал программу, скажем, sub.domain.com , и учетные данные указаны в области.
Во время входа в систему я обнаружил, что он шифрует имя пользователя и пароль

а затем расшифровать имя пользователя для отображения во внешнем интерфейсе.
после некоторого поиска в Google я получил этот прекрасный блог Самира Бхатта « https://bhattsameer.github.io/2021/01/01/client-side-encryption-bypass-part-1.html », пройдя его.
Во-первых захватить запрос на вход в отрыжку, и я начал искать переменные в источниках, если приложение использует какую-либо функцию javascript на стороне клиента для шифрования имени пользователя и пароля, после поиска нескольких ключевых слов я придумал функцию с именем encryptData (), который использует CryptoJS .

и приложение не просто использует простое шифрование, они внедрили ключ, iv, режим и заполнение в соответствии с документациейhttps://cryptojs.gitbook.io/
Теперь моя главная цель — найти ключ, значения iv, чтобы успешно зашифровать/расшифровать наши значения, я начал больше копаться в источниках, а затем придумал другую переменную, называемую ключевым кадром, которая использовалась в части расшифровки. и это жестко закодированный секретный ключ, используемый для значений ключа и iv
Наконец-то я смог обнаружить, что значения ключа и iv не что иное, как CryptoJS.enc.Utf8.parse("secret_key").
Я локально установил пакет npm и создал ту же функцию, что и в исходном коде,
const key = CryptoJS.enc.Utf8.parse("secret_key");
const iv1 = CryptoJS.enc.Utf8.parse("secret_key");
const encrypted = CryptoJS.AES.encrypt("C://Windows//System32//drivers//etc//hosts", key, {
keySize: 16,
iv: iv1,
mode: CryptoJS.mode.CBC,
padding: CryptoJS.pad.Pkcs7
});
console.log(encrypted+""); // will give the encrypted value
console.log("For decryption : ");
var cipher = "KSxIfH6RWYGA==";
const plainText = CryptoJS.AES.decrypt(cipher, key, {
keySize: 16,
iv: iv1,
mode: CryptoJS.mode.CBC,
padding: CryptoJS.pad.Pkcs7
});
console.log(plainText.toString(CryptoJS.enc.Utf8)); // will give the decrypted value
и теперь интересная часть,
после сканирования burp я придумал файл с именем « ViewDocumentFile », у которого есть параметр пути , который принимает зашифрованное значение, после расшифровки с помощью нашего вышеуказанного файла JS было обнаружено, что это путь png, то есть D:\\website\\logo.png ,

Я погуглил некоторые полезные нагрузки LFI на основе Windows и получил C://Windows//System32//drivers//etc//hosts , сделал шифрование и передал его в параметр пути, и бум, мы можем читать внутренние файлы, просто взломав какое-то шифрование.


и именно поэтому чтение файлов JS является важной частью тестирования. (урок, который я получил на конференции по безопасности).
Спасибо за чтение!
Линкедин:https://www.linkedin.com/in/abhishekmorla/
твиттер:https://twitter.com/abhishekmorla