Como explorar vulnerabilidades Format strings

introdução

nos artigos anteriores, discutimos funções de impressão, formatação strings e formatar vulnerabilidades strings. Este artigo fornece uma visão geral de como o formato vulnerabilidades String pode ser explorado. Neste artigo, começaremos por resolver um simples desafio de vazar um segredo da memória. No próximo artigo, vamos discutir outro exemplo, onde vamos encadear uma vulnerabilidade format string e Buffer Overflow vulnerabilidade para criar um melhor impacto.

como as vulnerabilidades de string de formato podem ser exploradas?

conforme mencionado no artigo anterior, a seguir estão alguns dos ataques possíveis usando vulnerabilidades de String de formato.

  • Vazamento de segredos
  • Negação de Serviço
  • Vazamento de endereços de memória
  • Substituição de endereços de memória

neste artigo, vamos discutir os dois primeiros itens.

vazando segredos da pilha

a seguir está o programa vulnerável que usaremos para entender a abordagem para explorar uma vulnerabilidade de string de formato simples para poder ler dados da memória.

#include < stdio.h>

int main(int argc, char *argv){

char *segredo = “[email protected]”;

printf(argv);

}

Como podemos notar, o programa é vulnerável a cadeia de caracteres de formato vulnerabilidade, uma vez que a função printf recebe a entrada do usuário e imprime-o. Deve-se notar que não há nenhum especificador de formato usado na função printf, deixando assim o programa vulnerável.

vamos executar o programa usando gdb, verificar a desmontagem da função principal e configurar um ponto de paragem no endereço da chamada printf.

$ gdb ./vulneráveis

gef➤ disass principal

Dump of assembler code para a função main:

0x0000000000401136 <+0>: endbr64

0x000000000040113a <+4>: empurre rbp

0x000000000040113b <+5>: mov ead,rsp

0x000000000040113e <+8>: sub rsp,0x20

0x0000000000401142 <+12>: mov DWORD PTR ,edi

0x0000000000401145 <+15>: mov QWORD PTR ,rsi

0x0000000000401149 <+19>: lea rax, # 0x402004

0x0000000000401150 <+26>: mov QWORD PTR ,rax

0x0000000000401154 <+30>: mov rax,QWORD (Read more…)

Deixe uma resposta

O seu endereço de email não será publicado.