Jak využít zranitelnosti řetězců formátu

Úvod

v předchozích článcích jsme diskutovali o tiskových funkcích, formátovacích řetězcích a zranitelnostech řetězců formátu. Tento článek poskytuje přehled o tom, jak lze zneužít zranitelnosti řetězců formátu. V tomto článku začneme řešením jednoduché výzvy k úniku tajemství z paměti. V dalším článku budeme diskutovat o dalším příkladu, kde budeme řetězit zranitelnost řetězce formátu a zranitelnost přetečení vyrovnávací paměti, abychom vytvořili lepší dopad.

jak lze zneužít chyby zabezpečení formátu string?

jak je uvedeno v předchozím článku, níže jsou uvedeny některé z možných útoků pomocí zranitelností řetězců formátu.

  • unikající tajemství
  • odmítnutí služby
  • unikající paměťové adresy
  • přepsání paměťových adres

v tomto článku se budeme zabývat prvními dvěma položkami.

únik tajemství ze zásobníku

následuje zranitelný program, který použijeme k pochopení přístupu k využití chyby zabezpečení jednoduchého řetězce formátu, aby bylo možné číst data z paměti.

# include <stdio.h>

int main(int argc, char *argv){

char *secret = „[email protected]“;

printf (argv);

}

jak si můžeme všimnout, program je zranitelný zranitelností formátovacího řetězce, protože funkce printf přijímá vstup uživatele a vytiskne jej. Je třeba poznamenat, že ve funkci printf není použit žádný specifikátor formátu, což ponechává program zranitelný.

spusťte program pomocí gdb, zkontrolujte demontáž hlavní funkce a nastavte zarážku na adrese volání printf.

$ gdb ./zranitelný

gef➤ disass main

Výpis kódu assembleru pro funkci main:

0x0000000000401136 <+0>: endbr64

0x000000000040113a <+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…)

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna.