01:15
10:55
Să se compileze un program scris în limbaj C și să se rezolve următoarele:
secret_func1
.secret_func2
cu argumente valide de intrare.fopen('<prenume>', 'w')
pentru a crea un fișier local având prenumele vostru.
Pentru dezvoltarea temei va trebui să folosiți mașina virtuală de Windows descrisă în secțiunea Mașini virtuale din pagina de resurse. Mașina virtuală de Windows este numită SSS - Windows 7 32bit
. Această mașină virtuală este folosită și pentru verificarea temei pe vmchecker.
În arhiva de resurse a temei veți vedea că există fișierul seed.c
, precum și scriptul Python mangler.py
.
Pentru a genera fișierul sursă C plecând de la seed.c
, rulați comanda:
python mangler.py <nume> <prenume> <a treia cifră din numărul grupei>
unde:
<nume>
este numele vostru de familie (începeți cu majusculă)<prenume>
este prenumele vostru (unul dintre ele dacă aveți două, începeți cu majusculă)<a treia cifră din numărul grupei>
este ceea ce ce spune ; pentru grupa 324CA este cifra 4
, iar pentru grupa 322CA
este cifra 2
Ionescu Anca-Monica
de la grupa 323CA
, modul de rulare a comenzii de generare a fișierului sursă C va fi
python mangler.py Ionescu Anca 3
tema3.c
. Acesta este fișierul propriu-zis al temei care trebuie compilat.
Înainte de toate, recomandăm să adăugați în variabila PATH
calea pentru gcc/gdb și alte utilitare, precum și pentru Python. Pentru aceasta, în Command Prompt
, rulați comanda
set PATH=%PATH%;C:\Python27;C:\MinGW\bin
Acum puteți să compilați fișierul temei generat mai sus:
gcc -o tema3.exe tema3.c
Toți pașii de mai sus sunt realizați de scriptul de verificare (checker.py
) din arhiva de resurse a laboratorului. Prin rularea scriptului de verificare se configurează variabila de mediu PATH
se generează fișierul tema3.c
și apoi se obține fișierul executabil aferent și se validează conținutul payload-urilor.
Punctul 3 de exploatat (apelarea funcției fopen
) necesită dezactivarea ASLR (Address Space Layout Randomization); altfel biblioteca standard C (msvcrt.dll
) va fi încărcată la adrese diferite iar funcția fopen
va avea la fiecare sesiune în sistem o altă adresă.
Pentru dezactivarea ASLR (așa cum este indicat aici) va trebui să editați o intrare în Windows Registry în mașina virtuală de Windows (vom face actualizarea mașinii). Pentru acesta urmați pașii:
Windows + R
și rulați comanda regedit
.Registry Editor
), navigați în Computer\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management
.Memory Management
și selectați din meniul contextual New → DWORD (32-bit) Value
.MoveImages
și lasăți-o inițializată la 0
(0x00000000
). Este inițializată implicit.
Acum ASLR este dezactivat și biblioteca standard C (msvcrt.dll
) va fi încărcată la aceeași adresă (0x6ff51000
). Adresa funcției fopen
va fi mereu acceeași (0x6ff6b2c4
). Puteți verifica acest lucru prin inspectarea executabilului tema3.exe
la fel ca mai jos:
C:\Users\student\Downloads\iocla-tema3-resurse>gdb -q ./tema3.exe Reading symbols from C:\Users\student\Downloads\iocla-tema3-resurse\tema3.exe... (no debugging symbols found)...done. (gdb) start Temporary breakpoint 1 at 0x4015fa Starting program: C:\Users\student\Downloads\iocla-tema3-resurse/./tema3.exe [New Thread 2388.0x9e4] Temporary breakpoint 1, 0x004015fa in main () (gdb) p fopen $1 = {<text variable, no debug info>} 0x6ff6b2c4 <msvcrt!fopen> (gdb) info sharedlibrary From To Syms Read Shared Object Library 0x77ec1000 0x77ffbc3c Yes (*) C:\Windows\system32\ntdll.dll 0x77de1000 0x77eb30f8 Yes (*) C:\Windows\system32\kernel32.dll 0x0dce1000 0x0dd2a668 Yes (*) C:\Windows\system32\KernelBase.dll 0x6ff51000 0x6fffb2c4 Yes (*) C:\Windows\system32\msvcrt.dll (*): Shared library is missing debugging information. (gdb)
La nivelul implementării, aveți de scris câteva fișiere de intrare pentru programul compilat care să rezolve câte una din cerințele din enunț (de la punctul 3).
Recomandăm să generați acește fișiere de intrare folosind un script Python sau orice alt limbaj de programare.
Temele vor trebui încărcate pe platforma vmchecker (în secțiunea IOCLA) și vor fi testate automat. Arhiva încărcată va fi o arhivă .zip
care trebuie să conțină:
payload_a
, payload_b
, payload_c
credentials.txt
care conține numele, prenumele și a 3-a cifră din numărul grupei, fiecare pe câte o line, astfel: <Nume> <Prenume> <A 3-a cifră din numărul grupei>
README
ce conține descrierea implementăriisecret_func1
, secret_func2
, fopen
Punctajul este repartizat în felul următor:
În cadrul corectării, fișierul tema3.c
este generat în mod automat pornind de la seed.c
și datele voastre din fișierul credentials.txt
. Acest lucru este realizat de scriptul de verificare checker.py
care verifică și corectitudinea conținutului fișierelor de tip payload.
Datele din fișierul credentials.txt
trebuie să fie corecte, cu excepția motivelor bine întemeiate.
Din moment ce programul de intrare scris în C este dat, analiza statică presupune să interpretați cod C, nu assembly.
Arhiva de resurse a temei, ce conține mangler.py
si seed.c
(în curând și checker-ul) o puteți descărca de aici.