This shows you the differences between two versions of the page.
|
uso:teme:tema-3 [2022/12/22 13:27] adelin_costin.popa [Informații generale] |
uso:teme:tema-3 [2025/11/29 16:32] (current) alexandru.raduta06 [Task 01 (15p)] Updated task1 |
||
|---|---|---|---|
| Line 28: | Line 28: | ||
| <note important> | <note important> | ||
| - | Deadline: **15 Ianuarie, ora 23:55**\\ | + | Deadline: **19 Decembrie, ora 23:59**\\ |
| - | Punctaj: **1.0 puncte** din nota finală\\ | + | |
| </note> | </note> | ||
| Line 37: | Line 36: | ||
| </note> | </note> | ||
| <note> | <note> | ||
| - | **Actualizări checker: <color red>versiunea 1.1.0</color>** | + | **Actualizări checker: <color red>versiunea 1.0.0</color>** |
| * s-a lansat versiunea iniţială | * s-a lansat versiunea iniţială | ||
| - | * update major la primele 3 taskuri | ||
| </note> | </note> | ||
| Line 45: | Line 43: | ||
| - | * Pe parcusul acestei teme vom folosi cunoștințe generale legate de scripting și securitate (mai precis spargerea parolelor, decriptare vs. decodificare, hashing), dar și comenzi uzuale de lucru în linia de comandă, așa că verificați laboratoarele aferente înainte să vă apucați de această temă. | + | * Pe parcusul acestei teme vom folosi cunoștințe generale legate de scripting, expresii regulate și securitate, dar și comenzi uzuale de lucru în linia de comandă, așa că verificați laboratoarele aferente înainte să vă apucați de această temă. |
| ===== Testarea temei. Finalizarea temei. Mașină virtuală. ===== | ===== Testarea temei. Finalizarea temei. Mașină virtuală. ===== | ||
| - | <note>La task-ul 2, pentru a primi toate punctele, trebuie salvate parolele //decodificate// (nu decriptate) în wordlist_decoded.txt (atenție la trailing whitespaces).</note> | + | <note> |
| + | În rezolvarea temei va trebui să instalați un fișier cu parole. Să aveți grijă să îl ștergeți înainte să trimiteți tema.</note> | ||
| <note warning>Este interzisă publicarea pe forum a comenzilor sau pozelor care fac parte din rezolvarea parțială sau integrală a | <note warning>Este interzisă publicarea pe forum a comenzilor sau pozelor care fac parte din rezolvarea parțială sau integrală a | ||
| Line 65: | Line 63: | ||
| - | ==== Task 01 (10p) ==== | + | ==== Task 01 (15p) ==== |
| - | <note important> | + | Scrieți un script bash script_user.sh care automatizează procesul de creare a unui utilizator nou în sistem, incluzând configurarea directorului home și logging-ul datelor. |
| - | Task-urile 2 și 3 sunt dependende de rezolvarea corectă și completă a Task-ului 1. În primele 3 task-uri vom simula trecerea prin mai multe filtre de securitate - de cele mai multe ori, pentru a ajunge la informația pe care o dorește, un atacator va avea de trecut mai multe bariere (firewalls, parole, drepturi limitate ale utilizatorului compromis etc.). În cele ce vor urma, vom încerca să ajungem la un fișier ascuns în 3 arhive protejate de parole. | + | |
| + | <note> | ||
| + | Apelul scriptului trebuie să arate în felul următor: | ||
| + | <code bash> | ||
| + | sudo ./script_user.sh username password cale_director_copiat | ||
| + | </code> | ||
| </note> | </note> | ||
| - | * În directorul ''/home/student/tema3-sec'' se află ''arhiva1.zip'', protejată de o parolă simplă. Folosiți un utilitar precum fcrackzip sau john the ripper pentru a extrage fișierele din aceasta. Lungimea parolei căutate este de 6 litere. | ||
| - | ==== Task 02 (15p) ==== | + | === a) Validarea argumentelor (3p) === |
| - | * În interiorul arhivei se află un fișier, ''wordlist.txt'', și ''arhiva2.zip'', pe care trebuie să o dezarhivați la rândul ei. Pentru aceasta, trebuie să vă folosiți de fișierul wordlist.txt, singura problemă este că parolele din el sunt criptate cu [[https://en.wikipedia.org/wiki/XOR_cipher|OTP/XOR]], cu cheia ''usostrongkey''. Criptarea cu xor este foarte simplă, presupune realizarea operației xor între textul în clar și cheie, decriptarea realizându-se prin aplicarea xor între textul cifrat și cheie. | + | Scriptul trebuie să verifice dacă argumentele primite sunt corecte. Scriptul trebuie să primescă 3 argumente la linia de comandă, parola trebuie să aiba minim 8 caractere, iar folderul specificat în argumentul 3 trebuie să fie existent. |
| - | * Mai mult, după criptare, cifrurile au fost codificate în [[https://en.wikipedia.org/wiki/Base64|base64]]. Codificarea este diferită de criptare, neascunzând datele, ci doar trecându-le într-un alt format (baza 64 în acest caz fiind formată din caracterele A-Z, a-z, 0-9 și +/) pentru a fi mai ușoară prelucrarea sau afișarea lor. Scopul acestui task este să decodificați și să decriptați parolele din wordlist pentru a le folosi în spargerea arhivei 2. | + | |
| - | * Dacă vă este mai ușor, puteți realiza un script care să facă aceste operații. Aveți însă grijă **SĂ NU MODIFICAȚI** wordlist.txt. Salvați decodificările în **wordlist_decoded.txt** pentru punctajul intermediar aferent acestei operații. | + | |
| - | <note tip>Hint: man base64.</note> | + | |
| - | <note tip>După decodificare, parolele criptate pe care le veți descoperi sunt sub forma unor bitstrings pentru o mai ușoară prelucrare. Folosiți scriptul python ''otp_decrypt.py'' pentru decriptarea unui bitstring (string format din biți, ex: "0100111"), pasându-i în linia de comandă, în ordine, bitstring-ul de decriptat și cheia (usostrongkey): | + | |
| - | ''$ python3 otp_decrypt.py <bitstring> <key>''. | + | Mesajele de eroare standard pentru neîntâlnirea uneia dintre cele 3 condiții: |
| - | (<code> $ wget https://pastebin.com/raw/4mhCcJmv </code>) | + | 1. "Eroare: Numar incorect de argumente" |
| - | </note> | + | |
| + | 2. "Eroare: Parola trebuie sa aiba minim 8 caractere" | ||
| - | ==== Task 03 (15p) ==== | + | 3. "Eroare: Folderul <cale> nu exista" |
| - | * La finalul punctului anterior ar fi trebuit să obțineți o ultimă arhivă, ''arhiva3.zip'', și trei fișiere ''user[1..3].txt'' cu câte un nume de utilizator și mai multe parole (fictive) pentru diverse site-uri. Doar una dintre ele este parola pentru arhiva3. Pentru a nu face brute-force, încercând fiecare parolă, mai aveți în arhiva2 și fișierul ''hashes.txt'', care conține hash-urile celor trei fișiere menționate. | + | === b) Crearea utilizatorului (5p) === |
| - | * Verificați care hash-uri sunt corecte, pentru a vă reduce căutarea (unele fișiere au fost modificate și nu mai sunt integre). | + | Scriptul trebuie să se ocupe de crearea utilizatorului (cu home directory și shell) și cu setarea parolei utilizatorului. |
| - | * Redenumiți fișierele corupte în user_corrupted_{i}.txt, unde {i} se va înlocui cu numărul prezent în denumirea fișierului inițial. | + | |
| - | * Numele de utilizator rămase pot fi căutate cu o unealtă precum Sherlock (https://github.com/sherlock-project/sherlock) pentru a descoperi care cont dintre cele listate în fișier există cu adevărat (parola rămâne una fictivă totuși). Sherlock primește un nume de utilizator și realizează o căutare extensivă pe o multitudine de site-uri (în special de social media) pentru a găsi conturi asociate cu acel nume de utilizator. Acest gen de activitate poartă numele de OSINT și reprezintă un pas important într-un potențial atac, atunci când dorești să afli cât mai multe informații despre țintă (fie ea sistem sau persoană). | + | |
| - | * Odată găsită parola, dezarhivați ultima barieră între voi și mesajul ascuns. | + | |
| - | ==== Task 04 (15p) ==== | + | === c) Copierea folderului în home (2p) === |
| - | + | Scriptul trebuie să copieze corect în /home/username/ directorul dat ca al treilea argument. | |
| - | <note> | + | |
| - | Pentru acest task se va lucra exclusiv în directorul /home/student/tema3-task4 | + | |
| - | Înainte de a vă apuca, intrați in directorul acesta. | + | === d) Logging (5p) === |
| + | Scriptul trebuie să extragă informații despre user din /etc/passwd și să pună datele pe câte o linie în fișierul user_info.log din /home/username | ||
| + | |||
| + | |||
| + | <note important> | ||
| + | Scriptul trebuie rulat cu privilegii de root/sudo | ||
| + | |||
| + | Fișierul de log: /home/username/user_info.log | ||
| + | |||
| + | Formatul log-ului trebuie să conțină pe câte o linie: username, UID, GID, home directory, shell | ||
| + | |||
| + | Scriptul trebuie să gestioneze corect erorile și să se oprească imediat dacă o verificare eșuează | ||
| </note> | </note> | ||
| - | * În directorul curent se află ''64based.txt''. Acest fișier a fost codificat de 20 de ori cu ''base64''. | + | ==== Task 02 (15p) ==== |
| - | * Creați un script numit ''unbase.sh'' care să decodifice conținutul acestuia și să scrie noul conținut în ''output/64unbased.txt''. | + | |
| - | ==== Task 05 (25p) ==== | + | |
| + | ==== Task 03 (15p) ==== | ||
| <note> | <note> | ||
| Line 112: | Line 118: | ||
| * Creați un script numit ''my_menu.sh'' care creează un meniu de bază pentru realizarea operațiilor pe fisiere si directoare într-un sistem cu Linux, conform diagramei: | * Creați un script numit ''my_menu.sh'' care creează un meniu de bază pentru realizarea operațiilor pe fisiere si directoare într-un sistem cu Linux, conform diagramei: | ||
| - | {{ :uso:teme:tema3-task5-diagrama.png?945x370 |}} | + | {{ :uso:teme:tema3-task5-diagrama.png?756x296 |}} |
| * Un exemplu de rulare a scriptului ar putea fi: | * Un exemplu de rulare a scriptului ar putea fi: | ||
| Line 120: | Line 126: | ||
| * Folosirea diacriticelor în cadrul scriptului nu este necesară și nici recomandată. | * Folosirea diacriticelor în cadrul scriptului nu este necesară și nici recomandată. | ||
| - | ==== Task 06 (20p) ==== | + | ==== Task 04 (25p) ==== |
| - | + | ||
| - | <note> | + | |
| - | Pentru acest task se va lucra exclusiv în directorul /home/student/tema3-task6 | + | |
| - | Înainte de a vă apuca, intrați in directorul acesta. | + | |
| - | </note> | + | |
| - | + | ||
| - | * În directorul curent se află un fișier [[https://en.wikipedia.org/wiki/JSON|JSON]], numit ''inventory.json''. | + | |
| - | * Acest fișier conține doi jucători de Minecraft și inventarele acestora. | + | |
| - | * [10p] 1. Creați un script numit ''find_common.sh'' care găsește toate itemele comune (bazat strict pe nume) ale celor doi jucători și le pune în ''outputs/common_items.txt''. | ||
| - | * [10p] 2. Creați un script numit ''find_best.sh'' care găsește toate itemele (de la ambii jucători) ce au câmp de durabilitate, le ordonează descrescător după aceasta și le pune în ''outputs/best_items.txt''. | ||
| - | * Pentru referință se vor folosi fișierele din directorul ''ref''. | + | ==== Task 05 (30p) ==== |
| - | * Pentru prelucrarea datelor din ''.json'' se recomandă folosirea utilitarului [[https://stedolan.github.io/jq/manual/|jq]]. | + | |