Ignorando a criptografia do lado do cliente para ler arquivos internos do Windows Server
Ei, mais uma vez sou eu abhishekmorla,
Este blog é sobre como alguém pode quebrar a criptografia do lado do cliente com a análise do código-fonte e pode ler arquivos internos do Windows Server, ou seja , LFI , mas depois de ignorar uma camada de criptografia .
Então, criei um programa, digamos, sub.domain.com e as credenciais são fornecidas no escopo.
Durante o login, descobri que estava criptografando o nome de usuário e a senha
e mais tarde, descriptografando o nome de usuário para mostrar no front-end.
depois de pesquisar no Google, recebi este lindo blog de Sameer Bhatt “ https://bhattsameer.github.io/2021/01/01/client-side-encryption-bypass-part-1.html ", depois de passar por isso.
Em primeiro lugar capturei a solicitação de login no burp e comecei a pesquisar as variáveis nas fontes, se o aplicativo usar alguma função javascript do lado do cliente para criptografar o nome de usuário e a senha, depois de pesquisar algumas palavras-chave, criei uma função chamada encryptData () que usa CryptoJS .
e o aplicativo não apenas usando criptografia simples, eles implementaram uma chave, iv, modo e preenchimento de acordo com a documentação dehttps://cryptojs.gitbook.io/
Agora, meu objetivo principal é encontrar a chave, iv valores para criptografar/descriptografar com sucesso nossos valores, comecei a pesquisar mais as fontes e, em seguida, criei outra variável chamada keyframe, que foi usada na parte de descriptografia. e essa é a chave secreta codificada usada para valores de chave e iv
Finalmente consegui descobrir que a chave e os valores iv nada mais são do que CryptoJS.enc.Utf8.parse(“secret_key”).
Instalei localmente o pacote npm e criei a mesma função usada no código-fonte,
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
e agora a parte interessante,
depois de um burp scan, criei um arquivo chamado “ ViewDocumentFile ” que possui um parâmetro de caminho que recebe um valor criptografado, após descriptografar com nosso arquivo JS acima, descobriu-se que é um caminho de um png que é D:\\website\\logo.png ,
Pesquisei no Google algumas cargas LFI baseadas em Windows e obtive C://Windows//System32//drivers//etc//hosts , fiz a criptografia e a passei para o parâmetro path e boom, podemos ler arquivos internos apenas quebrando alguma criptografia.
e é assim que a leitura de arquivos JS é uma parte importante do teste. (uma lição que aprendi em uma conferência de segurança).
obrigado por ler!
Linkedin:https://www.linkedin.com/in/abhishekmorla/
Twitter :https://twitter.com/abhishekmorla





































![O que é uma lista vinculada, afinal? [Parte 1]](https://post.nghiatu.com/assets/images/m/max/724/1*Xokk6XOjWyIGCBujkJsCzQ.jpeg)