Format Strings - Arbitrary Read Example
Aprenda e pratique Hacking na AWS: Treinamento HackTricks AWS Red Team Expert (ARTE) Aprenda e pratique Hacking no GCP: Treinamento HackTricks GCP Red Team Expert (GRTE)
Iniciar Leitura Binária
Código
Compile com:
Exploração
O deslocamento é 11 porque definir vários As e forçar bruta com um loop de deslocamentos de 0 a 50 descobriu que no deslocamento 11 e com 5 caracteres extras (pipes
|
no nosso caso), é possível controlar um endereço completo.Eu usei
%11$p
com preenchimento até que eu visse que o endereço estava todo 0x4141414141414141A carga útil da string de formato está ANTES do endereço porque o printf para de ler em um byte nulo, então se enviarmos o endereço e depois a string de formato, o printf nunca alcançará a string de formato, pois um byte nulo será encontrado antes.
O endereço selecionado é 0x00400000 porque é onde o binário começa (sem PIE)
Ler senhas
Compile com:
Ler a partir da pilha
A stack_password
será armazenada na pilha porque é uma variável local, então apenas abusar do printf para mostrar o conteúdo da pilha é suficiente. Este é um exploit para BF as primeiras 100 posições para vazar as senhas da pilha:
Na imagem é possível ver que podemos vazar a senha da pilha na 10ª
posição:
Ler dados
Executando o mesmo exploit, mas com %p
em vez de %s
, é possível vazar um endereço de heap da pilha em %25$p
. Além disso, comparando o endereço vazado (0xaaaab7030894
) com a posição da senha na memória nesse processo, podemos obter a diferença de endereços:
Agora é hora de descobrir como controlar 1 endereço na pilha para acessá-lo a partir da segunda vulnerabilidade de string de formato:
E é possível ver que no try 14 com o uso da passagem utilizada podemos controlar um endereço:
Explorar
Aprenda e pratique Hacking AWS:Treinamento HackTricks AWS Red Team Expert (ARTE) Aprenda e pratique Hacking GCP: Treinamento HackTricks GCP Red Team Expert (GRTE)
Last updated