This shows you the differences between two versions of the page.
|
uso:teme:tema-3 [2023/12/05 00:54] constantin.croicia |
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: **23 Decembrie, ora 23:55**\\ | + | Deadline: **19 Decembrie, ora 23:59**\\ |
| - | Punctaj: **1.0 puncte** din nota finală\\ | + | |
| </note> | </note> | ||
| Line 44: | 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 64: | 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" |
| + | |||
| + | === b) Crearea utilizatorului (5p) === | ||
| + | Scriptul trebuie să se ocupe de crearea utilizatorului (cu home directory și shell) și cu setarea parolei utilizatorului. | ||
| - | * 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. | + | === c) Copierea folderului în home (2p) === |
| - | * 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ă copieze corect în /home/username/ directorul dat ca al treilea argument. |
| - | * 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 (10p) ==== | + | |
| - | + | === d) Logging (5p) === | |
| - | <note> | + | 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 |
| - | Pentru acest task se va lucra exclusiv în directorul /home/student/tema3-task4 | + | |
| - | Înainte de a vă apuca, intrați in directorul acesta. | + | |
| + | <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 ''64unbased.txt''. | + | |
| - | ==== Task 05 (20p) ==== | + | |
| + | ==== Task 03 (15p) ==== | ||
| <note> | <note> | ||
| Line 111: | 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 119: | 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 (30p) ==== | + | ==== 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. | ||
| - | |||
| - | Pentru cerințele a și b veți reține output-ul în log_fixed.txt. | ||
| - | Celelalte linii le veți afișa exact așa cum apar în fișierul log.txt. | ||
| - | |||
| - | Toate scrierile către fișiere vor fi făcute direct din scripturi, ci nu la momentul execuției. | ||
| - | Exemplu: `./fix_requests.sh > log_fixed.txt` nu va fi acceptat ca soluție. | ||
| - | </note> | ||
| - | |||
| - | <note important> | ||
| - | De fiecare dată când veți rula `sudo uso start 3` se va genera un nou log.txt. | ||
| - | </note> | ||
| - | * [5p] a. Creați un script numit ''fix_requests.sh'' care afișează în ''log_fixed.txt'' conținutul din ''log.txt'', dar modificând liniie care au ca tip de cerere HEAD, astfel încât să fie afișate invers. | + | ==== Task 05 (30p) ==== |
| - | * **Exemplu: <color green>)46x ;46niW ;0.01 TN swodniW( 17.2964.0.79/emorhC :tnegA-resU 1.1/PTTH tuoba/ DAEH</color>** | + | |
| - | * [5p] b. Modificați scriptul ''fix_requests.sh'' astfel încat toate liniile care au ca tip de cerere OPTIONS să fie afișate cu majuscule. | + | |
| - | * **Exemplu: <color green>OPTIONS /SOME_OTHER_PATH HTTP/1.1 USER-AGENT: CHROME/97.0.4692.71 (WINDOWS NT 6.1; WOW64)</color>** | + | |
| - | * [10p] c. Creați un script numit ''get_users.sh''. În cadrul acestuia, cu ajutorul cererilor de tip POST (din fișierul ''log.txt'') făcute către ''/login'', rețineți în fișierul ''users_db.txt'' toți utilizatorii și parola lor respectivă (ca hash de tipul sha256), sortați alfabetic după utilizatori. | + | |
| - | * **Exemplu: <color green>adelin:1bc9414dc185b89669dba035340c4684a6733bbf1cdac568dadcfd2eef731054</color>** | + | |
| - | * [10p] d. Creați un script numit ''get_browsers.sh'' în care identificați ce browsere folosesc utilizatorii de iPhone (din fișierul ''log.txt'') și le rețineți în fișierul ''iphone_users_browsers.txt'' alături de numărul de apariții, sortate de la cel mai folosit browser pana la cel mai puțin folosit. | + | |
| - | * **Exemplu: <color green>Safari - 120</color>** | + | |