Jak wykorzystać luki w zabezpieczeniach ciągów formatujących

wprowadzenie

w poprzednich artykułach omówiliśmy funkcje drukowania, formatowanie ciągów i luki w zabezpieczeniach ciągów formatujących. W tym artykule omówiono, w jaki sposób można wykorzystać luki w zabezpieczeniach ciągów formatowych. W tym artykule zaczniemy od rozwiązania prostego wyzwania, jakim jest wyciek tajemnicy z pamięci. W następnym artykule omówimy inny przykład, w którym połączymy lukę w łańcuchu formatu i lukę przepełnienia bufora, aby uzyskać lepszy wpływ.

jak można wykorzystać luki w formatowaniu ciągów znaków?

jak wspomniano w poprzednim artykule, poniżej przedstawiono niektóre z ataków możliwych przy użyciu luk w zabezpieczeniach ciągów formatujących.

  • przeciekanie tajemnic
  • odmowa usługi
  • przeciekanie adresów pamięci
  • nadpisywanie adresów pamięci

w tym artykule omówimy dwa pierwsze elementy.

wyciek tajemnic ze stosu

Poniżej znajduje się podatny program, którego użyjemy, aby zrozumieć podejście do wykorzystania luki w prostym formacie, aby móc odczytać dane z pamięci.

# include < stdio.h >

int main (int argc, char *argv){

char *secret = „[email protected]”;

printf (argv);

}

jak możemy zauważyć, program jest podatny na luki w formatowaniu łańcuchów, ponieważ funkcja printf otrzymuje dane wejściowe od użytkownika i drukuje je. Należy zauważyć, że w funkcji printf nie jest używany żaden specyfikator formatu, co sprawia, że program jest podatny na ataki.

uruchamiamy program przy użyciu gdb, sprawdzamy demontaż głównej funkcji i ustawiamy punkt przerwania pod adresem wywołania printf.

$ gdb .

zrzut kodu asemblera dla funkcji main:

0x0000000000401136 <+0 >: endbr64

0x00000000040113a <+4 >: push RBP

0x000000000040113b <+5 >: MOV RBP,RSP

0x000000000040113e <+8 >: sub rsp,0x20

0x0000000000401142 <+12>: mov DWORD PTR ,edi

0x0000000000401145 <+15>: mov QWORD PTR ,rsi

0x0000000000401149 <+19>: lea rax, # 0x402004

0x0000000000401150 <+26>: mov QWORD PTR ,rax

0x0000000000401154 <+30>: mov rax,QWORD (Read more…)

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany.