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

Temat: Buffer Overflow, obchodzenie randomizacji adresów

  1. #1
    Avatar Ormi
    Ormi jest offline %x-%x-%x-%n
    Zarejestrowany
    Jul 2008
    Skąd
    Za twoimi plecami
    Postów
    351

    Domyślnie Buffer Overflow, obchodzenie randomizacji adresów

    Przyszedł mi do głowy ciekawy pomysł z tym związany. Tylko mam też pytanie.
    Jest sobie Linux, który ma zabezpieczenie w postaci randomizacji adresów.
    I teraz pojawia się pytanie.
    Jeśli zrobimy coś takiego:
    export SHELLCODE='tutaj_nasz_kod_bajtowy_shellcode_'
    Następnie napiszemy coś takiego:
    Kod:
    #include <stdio.h>
    #include <unistd.h>
    #include <stdlib.h>
    int main() {
    char *addr=getenv("SHELLCODE") ;
    printf("%s", addr) ;
    
    execve("./vuln", "./vuln", 0) ;
    }
    To czy po uruchomieniu programu vuln przy pomocy funkcji execve, adres zmiennej środowiskowej SHELLCODE będzie taki sam jak ten pokazany wcześniej przez funkcję getenv?
    Uogólniając - czy jeśli z poziomu jednego programu uruchomimy inny program, to czy zostanie wykonana zmiana adresów wszystkich zmiennych środowiskowych itd. ?


    EDIT: Zapomniałem o funkcji main
    EDIT2: I funkcja execve musi mieć na końcu zero. Też zapomniałem.
    EDIT3: I średnika po funkcji printf nie było.
    Ostatnio edytowane przez Ormi : 08-06-2008 - 14:44
    Black Coders | Hacking, Kernel, Linux, Operating Systems, Programming
    I otworzyła studnię Czeluści,
    a dym się uniósł ze studni jak dym z wielkiego pieca,
    i od dymu zaćmiło się słońce i powietrze.
    A z dymu wyszła szarańcza na ziemię,
    i dano jej moc jaką mają ziemskie skorpiony.
    (...)
    I dano jej nakaz aby nie zabijała,
    lecz aby przez pięć miesięcy cierpieli katusze...

  2. #2
    Avatar Nikow
    Nikow jest offline -=[ZRP]=-
    Zarejestrowany
    Sep 2007
    Skąd
    Różne zakątki sieci.
    Postów
    995

    Domyślnie

    Kod w C powinien być w funkcji. Główna funkcja to int main();.
    http://nikowek.blogspot.com/
    Zbrojne Ramię Pingwina!
    -----BEGIN GEEK CODE BLOCK-----
    Version: 3.12
    GCS d- s++:++ a--- C+++ UL+++ P L+++ E--- W++ N++ o K- w--
    O M- V- PS PE Y PGP++ t+ 5 X+ R tv- b++ DI- D-
    G+ e- h! r% y?
    ------END GEEK CODE BLOCK------

  3. #3
    Avatar Ormi
    Ormi jest offline %x-%x-%x-%n
    Zarejestrowany
    Jul 2008
    Skąd
    Za twoimi plecami
    Postów
    351

    Domyślnie

    Rzeczywiście. Zapomniałem Wiem o tym że ma być int main, ale program dałem jako przykładowy i specjalnie się nie przejmowałem jego poprawnością... Już poprawiam

    Ale to jak to jest w końcu z tymi adresami?

    EDIT: I jeszcze zapomniałem o tym, że execve musi mieć 0 jako ostatni argument Nikow, czemu nie zgłosiłeś? Jak już się mamy o poprawność starać - mimo że to czy main jest czy nie, nie ma wielkiego znaczenia w tej sytuacji - to już wszystko niech będzie poprawnie, więc execve też
    Ostatnio edytowane przez Ormi : 08-06-2008 - 07:47
    Black Coders | Hacking, Kernel, Linux, Operating Systems, Programming
    I otworzyła studnię Czeluści,
    a dym się uniósł ze studni jak dym z wielkiego pieca,
    i od dymu zaćmiło się słońce i powietrze.
    A z dymu wyszła szarańcza na ziemię,
    i dano jej moc jaką mają ziemskie skorpiony.
    (...)
    I dano jej nakaz aby nie zabijała,
    lecz aby przez pięć miesięcy cierpieli katusze...

  4. #4
    Avatar Nikow
    Nikow jest offline -=[ZRP]=-
    Zarejestrowany
    Sep 2007
    Skąd
    Różne zakątki sieci.
    Postów
    995

    Domyślnie

    Miałem się czepić w drugim poście Randomizacji adresów nie da się obejść. Przyrko mi.
    http://nikowek.blogspot.com/
    Zbrojne Ramię Pingwina!
    -----BEGIN GEEK CODE BLOCK-----
    Version: 3.12
    GCS d- s++:++ a--- C+++ UL+++ P L+++ E--- W++ N++ o K- w--
    O M- V- PS PE Y PGP++ t+ 5 X+ R tv- b++ DI- D-
    G+ e- h! r% y?
    ------END GEEK CODE BLOCK------

  5. #5
    Zarejestrowany
    Jul 2008
    Skąd
    PL
    Postów
    135

    Domyślnie

    polecam ten artykuł:
    http://hakin9.org/index.php/rdownload/pdf/1638

    Dostępny po zarejestrowaniu/zalogowaniu

    W którymś z numerów Hakin9 był też art na temat obejścia Twojego problemu, Ormi, tylko za cholerę nie mogę sobie przypomnieć, w którym

    Poszperaj w Necie, może trafisz
    "...i stało się! Linie telefoniczne otworzyły mi bramę do świata
    upajającego jak heroina pulsująca w żyłach ćpuna! Elektronicznym
    sygnałem przekraczam wrota szukając ucieczki od codzienności,
    głupoty i niesprawiedliwości... i znajduję podobnych sobie."

  6. #6
    Avatar Ormi
    Ormi jest offline %x-%x-%x-%n
    Zarejestrowany
    Jul 2008
    Skąd
    Za twoimi plecami
    Postów
    351

    Domyślnie

    A ja chcę spróbować najpierw sam wymyślić obejście tej randomizacji
    Ale zresztą temat jest niepotrzebny, bo właśnie mi przyszło do głowy jak to samemu sprawdzić.
    Ale za link dzięki, jeśli mój sposób zawiedzie, to chętnie skorzystam

    EDIT: Ktoś mi może powiedzieć czemu to nie działa?
    Są dwa programy:
    test.c
    Kod:
    #include <stdio.h>
    #include <unistd.h>
    #include <stdlib.h>
    int main() {
    char *addr ; 
    char *sh[2] ;
    sh[0] = "/home/ormi/Programowanie/c++/hack/spr" ;
    sh[1] = NULL ;
    addr=getenv("TEST") ;
    printf("%p", addr) ;
    
    execve(sh[0], sh, 0) ;
    }
    spr.c
    Kod:
    #include <stdio.h>
    #include <stdlib.h>
    int main()
    {
    char *addr1 ;
    addr1 = getenv("TEST") ;
    printf("\n%p\n", addr1) ;
    return 0 ;
    
    }
    Po skompilowaniu:
    export TEST='oczko'
    ./spr

    0xbfc5be73

    Czyli spr.c jest OK. Ale jak chcę całość uruchomić:
    ./test

    (nil)

    Czegoś tu nie rozumiem... Oczekiwałbym, żeby nastąpiło coś takiego:
    1. Program test wyświetla adres TEST
    2. Program test uruchamia program spr
    3. Program spr wyświetla adres TEST

    Ktoś wie czemu tak się nie dzieje, a program test wyświetla (nil)
    Ostatnio edytowane przez Ormi : 08-06-2008 - 15:10
    Black Coders | Hacking, Kernel, Linux, Operating Systems, Programming
    I otworzyła studnię Czeluści,
    a dym się uniósł ze studni jak dym z wielkiego pieca,
    i od dymu zaćmiło się słońce i powietrze.
    A z dymu wyszła szarańcza na ziemię,
    i dano jej moc jaką mają ziemskie skorpiony.
    (...)
    I dano jej nakaz aby nie zabijała,
    lecz aby przez pięć miesięcy cierpieli katusze...

  7. #7
    Avatar timpl3r
    timpl3r jest offline programuje...]
    Zarejestrowany
    Aug 2008
    Skąd
    WroceQ
    Postów
    39

    Domyślnie

    ja mam pytanie: do czego służy funkcja execve

  8. #8
    Avatar Ormi
    Ormi jest offline %x-%x-%x-%n
    Zarejestrowany
    Jul 2008
    Skąd
    Za twoimi plecami
    Postów
    351

    Domyślnie

    Funkcja, która chyba tylko w linuxie. Służy do uruchamiania innego programu.
    Black Coders | Hacking, Kernel, Linux, Operating Systems, Programming
    I otworzyła studnię Czeluści,
    a dym się uniósł ze studni jak dym z wielkiego pieca,
    i od dymu zaćmiło się słońce i powietrze.
    A z dymu wyszła szarańcza na ziemię,
    i dano jej moc jaką mają ziemskie skorpiony.
    (...)
    I dano jej nakaz aby nie zabijała,
    lecz aby przez pięć miesięcy cierpieli katusze...

  9. #9
    Zarejestrowany
    Jul 2008
    Skąd
    PL
    Postów
    135

    Domyślnie

    @Ormi, u mnie wyszło cos takiego:

    Kod:
    [email protected]:~/_programowanie/C/problem_ormiego$ export TEST
    [email protected]:~/_programowanie/C/problem_ormiego$ ./spr
    
    0xbfefbeba
    [email protected]:~/_programowanie/C/problem_ormiego$ ./test
    0xbfd4beb8
    
    (nil)
    [email protected]:~/_programowanie/C/problem_ormiego$
    dlaczego adres zmiennej TEST jest inny po jego odczytaniu przez test ?
    "...i stało się! Linie telefoniczne otworzyły mi bramę do świata
    upajającego jak heroina pulsująca w żyłach ćpuna! Elektronicznym
    sygnałem przekraczam wrota szukając ucieczki od codzienności,
    głupoty i niesprawiedliwości... i znajduję podobnych sobie."

  10. #10
    Avatar Ormi
    Ormi jest offline %x-%x-%x-%n
    Zarejestrowany
    Jul 2008
    Skąd
    Za twoimi plecami
    Postów
    351

    Domyślnie

    Właśnie przez randomizację adresów Przy każdym uruchomieniu programu program na nowo losuje adresy.
    Black Coders | Hacking, Kernel, Linux, Operating Systems, Programming
    I otworzyła studnię Czeluści,
    a dym się uniósł ze studni jak dym z wielkiego pieca,
    i od dymu zaćmiło się słońce i powietrze.
    A z dymu wyszła szarańcza na ziemię,
    i dano jej moc jaką mają ziemskie skorpiony.
    (...)
    I dano jej nakaz aby nie zabijała,
    lecz aby przez pięć miesięcy cierpieli katusze...

Strona 1 z 2 12 OstatniOstatni

Podobne wątki

  1. bufer overflow
    By matmat0123456789 in forum Hacking
    Odpowiedzi: 23
    Autor: 02-12-2010, 17:50
  2. Buffer Overflow
    By Ormi in forum Hacking
    Odpowiedzi: 18
    Autor: 07-31-2008, 10:36
  3. Buffer overflow
    By lukasz6547 in forum Hacking
    Odpowiedzi: 7
    Autor: 06-28-2008, 20:46
  4. ping: sendmsg: No buffer space available
    By Sardihan in forum TCP/IP/Analiza/Badanie
    Odpowiedzi: 8
    Autor: 11-08-2007, 19:13

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