Обход шифрования на стороне клиента для чтения внутренних файлов Windows Server

Dec 01 2022
Эй, это снова я, abhishekmorla. Этот блог о том, как можно взломать шифрование на стороне клиента с помощью анализа исходного кода и прочитать внутренние файлы сервера Windows, т.е. LFI, но после обхода уровня шифрования. Итак, я придумал с программой, скажем, саб.

Эй, это снова я, абхишекморла,

Этот блог о том, как можно взломать шифрование на стороне клиента с помощью анализа исходного кода и прочитать внутренние файлы сервера 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