Strona 1 z 2 12 OstatniOstatni
Pokaż wyniki 1 do 10 z 14

Temat: Gdb

  1. #1
    Avatar lukasz6547
    lukasz6547 jest offline Ciasno tu:D
    Zarejestrowany
    Apr 2008
    Postów
    348

    Domyślnie Gdb

    ałózmy ze stos wyglafda tak
    bufor o rozmiarze 15 bajtów
    kopia rejestu EIP

    To przekazuje jako pietnasty czy szesnasty bajt ,czy moge np jako 22 znak podac adres shellcodu?Bo nie wiem za bardzo w którym bajcie mam podac poszczególne czesci adresu..
    do bufora przekazuje:
    111111111111111(15 znaków a szesnstym jest adres shelccode)
    albo?
    11111111111111(14 znaków a pietnastym jest adres shellcode)
    czy którys z tych sposobów jest dobry a jak nie, to jak powinno byc?


    Czy jest to mozliwe ze jest jakas ochrona w linuskie przed nadpisaniem stosu bo jak nadpiwuje adresu powrotu nic sie nie dzieje dla przykładu jest rezerwowane w rejestrze esp 15 bajtów i przekaze jako argument 30 znaków A to w gdb widze ze program nie wykonuje skoku

    (gdb) r a
    Starting program: /home/lukasz/a a
    AAAAAAAAAAAAAAAAAAAAAAA

    Program received signal SIGSEGV, Segmentation fault.
    0xb7ee60a4 in strcpy () from /lib/tls/i686/cmov/libc.so.6
    (gdb)
    A to zdisasemblowany program:
    Dump of assembler code for function main:
    0x080483d4 <main+0>: lea 0x4(%esp),%ecx
    0x080483d8 <main+4>: and $0xfffffff0,%esp
    0x080483db <main+7>: pushl 0xfffffffc(%ecx)
    0x080483de <main+10>: push %ebp
    0x080483df <main+11>: mov %esp,%ebp
    0x080483e1 <main+13>: push %ecx
    0x080483e2 <main+14>: sub $0x24,%esp
    0x080483e5 <main+17>: lea 0xfffffff3(%ebp),%eax
    0x080483e8 <main+20>: mov %eax,0x4(%esp)
    0x080483ec <main+24>: movl $0x80484ec,(%esp)
    0x080483f3 <main+31>: call 0x8048320 <[email protected]>
    0x080483f8 <main+36>: lea 0xfffffff3(%ebp),%eax
    0x080483fb <main+39>: mov %eax,0x4(%esp)
    0x080483ff <main+43>: lea 0xfffffff9(%ebp),%eax
    0x08048402 <main+46>: mov %eax,(%esp)
    0x08048405 <main+49>: call 0x8048330 <[email protected]>
    0x0804840a <main+54>: lea 0xfffffff9(%ebp),%eax
    0x0804840d <main+57>: mov %eax,(%esp)
    0x08048410 <main+60>: call 0x8048340 <[email protected]>
    0x08048415 <main+65>: mov $0x0,%eax
    0x0804841a <main+70>: add $0x24,%esp
    0x0804841d <main+73>: pop %ecx
    ---Type <return> to continue, or q <return> to quit---

  2. #2
    Zarejestrowany
    Nov 2007
    Postów
    54

    Domyślnie

    Cytat Napisał lukasz6547 Zobacz post
    ałózmy ze stos wyglafda tak
    bufor o rozmiarze 15 bajtów
    kopia rejestu EIP
    Nie wydaje mi się, że na stosie jest 15-to bajtowy bufor. Raczej jest tam adres do takiego bufora. Uważam, że sam stos nie będzie przechowywać całego bufora.

    Cytat Napisał lukasz6547 Zobacz post
    To przekazuje jako pietnasty czy szesnasty bajt ,czy moge np jako 22 znak podac adres shellcodu?Bo nie wiem za bardzo w którym bajcie mam podac poszczególne czesci adresu..
    do bufora przekazuje:
    111111111111111(15 znaków a szesnstym jest adres shelccode)
    albo?
    11111111111111(14 znaków a pietnastym jest adres shellcode)
    czy którys z tych sposobów jest dobry a jak nie, to jak powinno byc?
    Pamiętaj, że adresy są czterobajtowe, a więc podajesz poszczególne części zgodnie z endianowością Twojego komputera. Najprawdopodobniej posiadasz komputer klasy PC (little-endian), więc podajesz je w odwrotnej kolejności. Na przykład jak chcesz podać taki adres 0xbfcd378a, to piszesz "\x8a\x37\xcd\xbf". Jeżeli posiadasz Macintosha, to będzie to odwrotnie (procesory w Macintoshach mają chyba big-endian).

    Cytat Napisał lukasz6547 Zobacz post
    Czy jest to mozliwe ze jest jakas ochrona w linuskie przed nadpisaniem stosu bo jak nadpiwuje adresu powrotu nic sie nie dzieje dla przykładu jest rezerwowane w rejestrze esp 15 bajtów i przekaze jako argument 30 znaków A to w gdb widze ze program nie wykonuje skoku
    Raczej nie. To jest kwestia programistów.

    Poza tym zauważ, że zadeklarowanie tablicy 10 bajtowej, nie zawsze odpowiada temu, że kompilator przydzieli dokładnie 10 bajtów. Zazwyczaj przydzielana jest większa ilość bajtów. Z tego fragmentu listingu

    Cytat Napisał lukasz6547 Zobacz post
    0x080483e2 <main+14>: sub $0x24,%esp
    można przypuszczać, że kompilator przydzielił 36 bajtów pamięci.

  3. #3
    Avatar lukasz6547
    lukasz6547 jest offline Ciasno tu:D
    Zarejestrowany
    Apr 2008
    Postów
    348

    Domyślnie

    znam assembler a ten bufor byl tylko dla przykładu...a dokladnie to chodzi mi o to gdb i w którym bajcie ma byc początek adresu shellcode...np. na gdb mam podane ze adres bufora odpowiada odjeciu od resjestru esp 15 bajtów ,wiec szesnastym bajtem jest adres powrotu, to jako 15 bajt podaje shellcode czy jako 16, albo czy moge podac 22chodzi mi o dokładne dopasowanie adresu tak zeby program wykonal skok gdzie ja mu zkaze?

  4. #4
    Zarejestrowany
    Nov 2007
    Postów
    54

    Domyślnie

    Wydaje mi się, że początek adresu shellcode może znajdować się w dowolnym miejscu. To jest Twoja kwestia żeby go umieścić w pamięci.
    Jeżeli adres powrotu z funkcji (EIP) zaczyna się od szesnastego bajtu, to musisz nadpisać cztery kolejne bajty adresem tego, do czego chcesz zrobić skok (np. do shellcodu), tak aby dalej wykowywał się Twój kod zamiast dalszy ciąg programu.

  5. #5
    Zarejestrowany
    Nov 2007
    Postów
    132

    Domyślnie

    Dobry i logiczny motyw jest pokazany w jednym z fimów na milw0rmie
    przekaż do bufora
    śmieci AAAAAAAAAAAAAABBBBCCCC
    odpal i zlukaj jakie wrtości przyjmie ebp i eip
    jeśli eip przyjmie x43x43x43x43
    to znaczy że wielkośc jest l00000000z
    wystarczy teraz znaleść adres szelkodu i umieścić go w 4 ostsnich bajtach (long*)
    Ostatnio edytowane przez naichniach : 04-15-2008 - 00:01
    Dlaczego wszystkie piosenki są o sexie ,miłości
    i innym pozytywnym gównie
    Nie mogły by być o czystym bólu ,nienawiści i frustracji i innych prawdach których więcej niż mniej ? ......... Ten świat to plastikowe ,fałszywe gówno
    nie mające nic wspólengo z moją rzeczywistością.
    Mtv to nie mój świat
    (tak jestem nie dojrzały ,mam kompelksy ..... i wiecie co? i chuj)

  6. #6
    Avatar lukasz6547
    lukasz6547 jest offline Ciasno tu:D
    Zarejestrowany
    Apr 2008
    Postów
    348

    Domyślnie

    Juz czaje ten buffer overflow.tylko teraz chcialbym spytac o to:
    na listingu z gdb widze ze od esp jest odejmowane 20 bajtów , wiec adres powrotu znajduje sie od razu na 21 bajcie czy tak?bo jak robilem doswiadczenia z przydzielaniem bufora w c i puzniej zdisasemblowalem to zawsze bylo pare bajtów wiecej...to tak mam rozumiec odjecie od esp pamiecii co mozecie powiedziec o tym gdb bo powinien program skakac jesli przekazalem AAAAAAAAAAAAAAAAAAAA do adresu 424242 bo juz sam nie wiem co moze byc przyczyną

  7. #7
    Zarejestrowany
    Nov 2007
    Postów
    132

    Domyślnie

    opcode albo strzelaj albo niewiem
    Ostatnio edytowane przez naichniach : 04-15-2008 - 16:59
    Dlaczego wszystkie piosenki są o sexie ,miłości
    i innym pozytywnym gównie
    Nie mogły by być o czystym bólu ,nienawiści i frustracji i innych prawdach których więcej niż mniej ? ......... Ten świat to plastikowe ,fałszywe gówno
    nie mające nic wspólengo z moją rzeczywistością.
    Mtv to nie mój świat
    (tak jestem nie dojrzały ,mam kompelksy ..... i wiecie co? i chuj)

  8. #8
    Zarejestrowany
    Nov 2007
    Postów
    54

    Domyślnie

    Cytat Napisał lukasz6547 Zobacz post
    ... na listingu z gdb widze ze od esp jest odejmowane 20 bajtów , wiec adres powrotu znajduje sie od razu na 21 bajcie czy tak?bo jak robilem doswiadczenia z przydzielaniem bufora w c i puzniej zdisasemblowalem to zawsze bylo pare bajtów wiecej...to tak mam rozumiec odjecie od esp pamieci
    Niekoniecznie. Zwykle oprócz zmiennych lokalnych są odkładane: wartość rejestru EBP, parametry funkcji, czasami również inne rejestry. Najlepiej jest zrobić disassemblację funkcji i prześledzić co jest odkładane na stos lub obejrzeć zawartość stosu w celu obliczenia ile potrzebujesz nadpisać bajtów aby dostać się do kopii EIP.

    Cytat Napisał lukasz6547 Zobacz post
    ... i co mozecie powiedziec o tym gdb bo powinien program skakac jesli przekazalem AAAAAAAAAAAAAAAAAAAA do adresu 424242 bo juz sam nie wiem co moze byc przyczyną
    Tutaj nie potrafię zrozumieć o co pytasz. Przyczyną czego? Że nie skacze do tego adresu? Jeśli o to pytasz, to chce skoczyć, ale nie może ze względu na błąd segmentation fault.

    Wspominałem wcześniej, że raczej nie ma ochrony przed nadpisywaniem stosu. Tutaj należy sprostować, że są pewne rozszerzenia do kompilatorów, które potrafią ochronić przed niektórymi rodzajami nadużyć. Słyszałem jedynie o StackGuard oraz SSP (Stack-Smashing Protector), które są implementowane w gcc.

  9. #9
    Avatar lukasz6547
    lukasz6547 jest offline Ciasno tu:D
    Zarejestrowany
    Apr 2008
    Postów
    348

    Domyślnie

    To co mam zrobic zeby mozna bylo nadpisac stos, odinstalowac to cos...bo na listingu w momencie nadpisania eipa powinien program skakac do szesnastkowego odpowiednika litery...poweidzcie co mam zrobic zebymn mógł to pocwiczyc

  10. #10
    Zarejestrowany
    Nov 2007
    Postów
    54

    Domyślnie

    Te rozszerzenia raczej nie są od razu dołączane do kompilatorów, więc jeżeli nie robiłeś patchów do gcc, to nie powinieneś ich mieć. Dodatkowo sam program zazwyczaj musi być skompilowany z odpowiednią opcją aby włączyć taką ochronę w nim. W przypadku SSP, do włączania służy opcja -fstack-protector (lub -fstack-protector-all), a do wyłączania -fno-stack-protector (lub -fno-stack-protector-all). Gdy w programie doprowadzasz do przepełnienia bufora, to dostajesz segmentation fault (przy braku ochrony), a z ochroną będzie to odpowiedni komunikat w zależności od rozszerzenia (SSP wypisuje coś w stylu, że nastąpił 'stack smashing attack' w danej funkcji).

    Także, po Twoim listingu z pierwszego postu, wnioskuję, że nie masz takiej ochrony. Pytasz co masz zrobić? Wydaje mi się, że przede wszystkim źle nadpisujesz EIP. Tak jak pisałem w poprzednim poście, najwidoczniej podajesz adres poza pulą pamięci, którą posiada program (stąd ten segmentation fault).

Strona 1 z 2 12 OstatniOstatni

Podobne wątki

  1. Problemy z gdb
    By lukasz6547 in forum Hacking
    Odpowiedzi: 1
    Autor: 04-13-2008, 16:33

Zasady Postowania

  • Nie możesz zakładać nowych tematów
  • Nie możesz pisać wiadomości
  • Nie możesz dodawać załączników
  • Nie możesz edytować swoich postów
  •  
Subskrybuj