This shows you the differences between two versions of the page.
|
uso:teme:tema-3 [2023/12/01 21:59] adelin_costin.popa |
uso:teme:tema-3 [2025/12/11 08:38] (current) ionut.mihalache1506 [Testarea temei. Finalizarea temei. Mașină virtuală.] |
||
|---|---|---|---|
| Line 1: | Line 1: | ||
| - | <hidden> | ||
| ====== Tema 3 ====== | ====== Tema 3 ====== | ||
| + | <note> | ||
| **Ce trebuie să știu?** Studiați secțiunea de [[#cunostinte_evaluate|Cunoștințe evaluate]] și suportul agregat necesar temei. | **Ce trebuie să știu?** Studiați secțiunea de [[#cunostinte_evaluate|Cunoștințe evaluate]] și suportul agregat necesar temei. | ||
| Nu contactaţi responsabilii de temă pe mail privat decât dacă aceştia vă cer explicit (e.g. pentru debugging local, vizualizarea unor comenzi din rezolvare) | Nu contactaţi responsabilii de temă pe mail privat decât dacă aceştia vă cer explicit (e.g. pentru debugging local, vizualizarea unor comenzi din rezolvare) | ||
| Line 19: | Line 19: | ||
| **Ajutor reciproc.** Vă încurajăm ca atunci când găsiți soluția la o problemă pe care ați postat-o anterior pe forum să postați și soluția găsită. De asemenea dacă știți răspunsul la întrebările colegilor sunteți încurajați să le răspundeți. Studenţii cu o atitudine pozitivă, activă şi care îşi ajută colegii pot fi răsplătiţi cu puncte karma sau un PIN USO. | **Ajutor reciproc.** Vă încurajăm ca atunci când găsiți soluția la o problemă pe care ați postat-o anterior pe forum să postați și soluția găsită. De asemenea dacă știți răspunsul la întrebările colegilor sunteți încurajați să le răspundeți. Studenţii cu o atitudine pozitivă, activă şi care îşi ajută colegii pot fi răsplătiţi cu puncte karma sau un PIN USO. | ||
| - | |||
| - | <note important> | ||
| - | Înainte și în timpul realizării temei, vă rugăm să parcurgeți [[uso:regulament#realizarea_temelor|indicațiile legate de realizarea temelor]], încluzând ce înseamnă o temă copiată și cum penalizăm temele copiate. Folosiți cu încredere forumurile de pe [[http://acs.curs.pub.ro/|acs.curs.pub.ro]] pentru întrebări și neclarități legate de teme. | ||
| - | |||
| - | În timpul realizării temei, când vă loviți de probleme și aveți nevoie de suportul echipei de USO, parcurgeți și lista de [[uso:teme:intrebari-frecvente|întrebări frecvente întâlnite în cadrul temelor]]. Să țineți cont, va rugăm, și de [[uso:regulament#recomandari_de_comunicare_electronica|recomandările de comunicare electronică]]. | ||
| </note> | </note> | ||
| Line 29: | Line 24: | ||
| <note important> | <note important> | ||
| - | Deadline: **23 Decembrie, ora 23:55**\\ | + | Deadline: **19 Decembrie, ora 23:59**\\ |
| - | Punctaj: **1.0 puncte** din nota finală\\ | + | Timp de lucru: **17 zile**\\ |
| + | Punctaj: **0.5 puncte** din nota temelor (se pot acoperi punctaje pierdute de la alte teme)\\ | ||
| </note> | </note> | ||
| <note> | <note> | ||
| - | **Actualizări enunț:** | + | **Actualizări enunț: <color red>versiunea 1.1 (4.12)</color>** |
| - | * s-a lansat versiunea iniţială | + | * s-a actualizat enunțul pentru task 4 |
| </note> | </note> | ||
| <note> | <note> | ||
| - | **Actualizări checker: <color red>versiunea 1.0.0</color>** | + | **Actualizări checker: <color red>versiunea 1.1 (3.12)</color>** |
| - | * s-a lansat versiunea iniţială | + | * s-a actualizat testul pentru task 4 |
| </note> | </note> | ||
| Line 45: | Line 41: | ||
| - | * 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 temei ori a unui task. Dacă se întâmplă acest lucru punctajul pe toate temele (trecute sau viitoare) este anulat.. Dacă e necesar acest lucru vă rog să contactaţi în privat responsabilii de temă, la specificarea explicită a acestora pe forum! | ||
| - | <note warning>Este interzisă publicarea pe forum a comenzilor sau pozelor care fac parte din rezolvarea parțială sau integrală a | + | **Aveţi voie, însă, să sugerați diferite abordări pe care mergeţi sau să dați idei generale (dar nu comenzi sau fişiere shell script) celorlalți chiar direct pe forum. Încurajăm clarificarea lucrurilor între studenţi atât timp cât nu sunt rezolvate cerinţele în mod direct. **</note> |
| - | temei ori a unui task. Dacă e necesar acest lucru vă rog să contactaţi în privat responsabilii de temă, la specificarea explicită a acestora pe forum! | + | Este interzis studenților să modifice parametrii de rulare ai mașinii virtuale. Orice tentativă malițioasă de modificare a fișierelor și executabilelor care fac mașina virtuală sa ruleze in parametrii optimi (fișierele si folderele ce nu țin de enunțul temei curente), ne conferă dreptul de a oferi 0 puncte pe temele respectivului student. |
| + | </note> | ||
| - | **Aveţi voie, însă, să sugerați diferite abordări pe care mergeţi sau să dați idei generale (dar nu comenzi sau fişiere shell script) celorlalți chiar direct pe forum. Încurajăm clarificarea lucrurilor între studenţi atât timp cât nu sunt rezolvate cerinţele în mod direct.** | + | ===== Cerințele temei ===== |
| - | Urmăriți [[uso:regulament#realizarea_temelor|indicațiile legate de realizarea temelor]]. La prima abatere studentul primește un avertisment, iar punctajul obținut pe temă îi este redus cu valoarea punctajului pe task-ul respectiv. Începând cu a doua abatere, se va anula întregul punctaj pe tema curentă. Temele anterioare sau cele viitoare nu vor fi afectate. Abaterile se păstrează pe parcursul semestrului. Ori de câte ori se încalcă această regulă, se va ține cont de istoricul abaterilor. Abaterile vor fi actualizate în catalog.</note> | + | ==== Task 00 - Pornirea temei (0p) ==== |
| + | |||
| + | Pentru a putea începe tema, nu uitați să rulați comanda: | ||
| + | |||
| + | <code bash> | ||
| + | student@uso-teme:~$ sudo uso start 3 | ||
| + | </code> | ||
| + | |||
| + | <note tip> | ||
| + | Pentru realizarea temei recomandăm folosirea SSH pentru terminal și pentru editorul de cod. | ||
| + | </note> | ||
| <note warning> | <note warning> | ||
| - | Este interzis studenților să modifice parametrii de rulare ai mașinii virtuale. Orice tentativă malițioasă de modificare a fișierelor și executabilelor care fac mașina virtuală sa ruleze in parametrii optimi (fișierele si folderele ce nu țin de enunțul temei curente), ne conferă dreptul de a oferi 0 puncte pe temele respectivului student. | + | **Tema trebuie realizată folosind doar scripturi bash, și nimic altceva (nu este permis să se apeleze dintr-un script bash un program scris în alt limbaj).** |
| + | |||
| + | **Tema poate să conțină doar scripturi bash și fișiere text.** | ||
| </note> | </note> | ||
| + | ==== Task 01 - Script User (15p) ==== | ||
| + | <note> | ||
| + | Pentru acest task se va lucra exclusiv în directorul /home/student/tema3-task1 | ||
| - | ==== Task 01 (10p) ==== | + | Înainte de a vă apuca, intrați in directorul acesta. |
| + | </note> | ||
| - | <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" |
| + | |||
| + | 2. "Eroare: Parola trebuie sa aiba minim 8 caractere" | ||
| + | |||
| + | 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. | ||
| + | |||
| + | === c) Copierea folderului în home (2p) === | ||
| + | |||
| + | Scriptul trebuie să copieze corect în /home/username/ directorul dat ca al treilea argument. | ||
| + | |||
| + | === 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 | ||
| + | |||
| + | Shell-ul implicit pentru utilizatorul nou trebuie să fie /bin/bash | ||
| + | |||
| + | 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> | ||
| + | ==== Task 02 - Animație (15p) ==== | ||
| - | ==== Task 03 (15p) ==== | + | <note> |
| + | Pentru acest task se va lucra exclusiv în directorul /home/student/tema3-task2 | ||
| + | |||
| + | Înainte de a vă apuca, intrați in directorul acesta. | ||
| + | </note> | ||
| - | * 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. | + | Scrieți un script bash animatie.sh care ne arată cât timp s-a scurs din taskul pe care îl rulăm, în cazul nostru o să fie procese sleep. |
| - | * Verificați care hash-uri sunt corecte, pentru a vă reduce căutarea (unele fișiere au fost modificate și nu mai sunt integre). | + | |
| - | * 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) ==== | ||
| - | | ||
| <note> | <note> | ||
| - | Pentru acest task se va lucra exclusiv în directorul /home/student/tema3-task4 | + | Apelul scriptului trebuie să arate în felul următor: |
| - | Înainte de a vă apuca, intrați in directorul acesta. | + | <code bash> |
| + | ./animatie.sh timp_total interval1 interval2 ... | ||
| + | </code> | ||
| </note> | </note> | ||
| - | * În directorul curent se află ''64based.txt''. Acest fișier a fost codificat de 20 de ori cu ''base64''. | + | === a) Validarea argumentelor (3p) === |
| - | * 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) ==== | + | Scriptul trebuie să verifice dacă argumentele primite sunt corecte. Scriptul trebuie să primescă măcar două argumente. Primul argument este timpul total al taskului, iar următoarele sunt durata intervalelor. |
| + | |||
| + | Mesajele de eroare standard pentru neîntâlnirea condiției: | ||
| + | |||
| + | 1. "Numar gresit de argumente", când sunt mai puțin de 2 argumente. | ||
| + | |||
| + | 2. "Intervalele sunt prea mari", când suma intervalelor este mai mare decât durata totală. | ||
| + | |||
| + | === b) Rularea unui task întreg (7p) === | ||
| + | |||
| + | Scriptul trebuie să citească intervalele, și să afișeze la finalul fiecăruia bara de progres actualizată. Durata intervalului este dată în secunde. Progresul este notat cu "=", iar timpul rămas este notat cu "-". Un exemplu de rulare a scriptului este următorul: | ||
| + | |||
| + | <code bash> | ||
| + | $ ./animatie.sh 5 2 1 2 | ||
| + | [-----] | ||
| + | [==---] | ||
| + | [===--] | ||
| + | [=====] | ||
| + | </code> | ||
| + | |||
| + | === c) Rularea unui task parțial (3p) === | ||
| + | |||
| + | Scriptul trebuie să verifice dacă taskul s-a finalizat cu succes, sau dacă a dat crash. Dacă totalul intervalelor este mai mic decât timpul total atunci taskul nu a ajuns la final, și se afișează un mesaj. Un exemplu de rulare a scriptului în care procesul nu ajunge la final este următorul: | ||
| + | |||
| + | <code bash> | ||
| + | $ ./animatie.sh 5 2 1 1 | ||
| + | [-----] | ||
| + | [==---] | ||
| + | [===--] | ||
| + | [====-] | ||
| + | Taskul a dat crash | ||
| + | </code> | ||
| + | |||
| + | === d) Adaugarea codurilor de întoarcere (2p) === | ||
| + | |||
| + | Scriptul trebuie să întoarcă un cod potrivit pentru execuția lui. Codurile de întoarcere sunt următoarele: | ||
| + | |||
| + | - Dacă taskul a fost rulat cu succes până la final, codul de întoarcere este 0. | ||
| + | |||
| + | - Dacă task a fost rulat cu succes, dar nu și-a terminat execuția, codul de întoarcere este numărul de secunde rămase. | ||
| + | |||
| + | - Dacă scriptul a primit un număr greșit de argumente, atunci codul de întoarcere este 1. | ||
| + | |||
| + | - Dacă suma intervalelor este mai mare decât timpul total, atunci codul de întoarcere este 2. | ||
| + | |||
| + | |||
| + | ==== Task 03 - My Menu (15p) ==== | ||
| <note> | <note> | ||
| - | Pentru acest task se va lucra exclusiv în directorul /home/student/tema3-task5 | + | Pentru acest task se va lucra exclusiv în directorul /home/student/tema3-task3 |
| - | Înainte de a vă apuca, intrați in directorul acesta. | + | |
| + | Înainte de a vă apuca, intrați in directorul acesta. | ||
| </note> | </note> | ||
| * 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 209: | ||
| * 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 - URLs (25p) ==== |
| <note> | <note> | ||
| - | Pentru acest task se va lucra exclusiv în directorul /home/student/tema3-task6 | + | Pentru acest task se va lucra exclusiv în directorul /home/student/tema3-task4 |
| - | Î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. | + | Înainte de a vă apuca, intrați in directorul acesta. |
| - | Celelalte linii le veți afișa exact așa cum apar în fișierul log.txt. | + | </note> |
| - | Toate scrierile către fișiere vor fi făcute direct din scripturi, ci nu la momentul execuției. | + | <note important> |
| - | Exemplu: `./fix_requests.sh > log_fixed.txt` nu va fi acceptat ca soluție. | + | Pentru acest task trebuie să descărcați fișierul urls.txt https://raw.githubusercontent.com/Raduta-Alexandru/uso-tema3-files/refs/heads/main/urls.txt |
| </note> | </note> | ||
| + | |||
| + | La taskul 4 trebuie să scrieți 2 scripturi. Primul script, numit extract_url.sh, ne filtrează URLuri, iar al doilea script, numit generate_mails.sh, ne generează mailuri pe baza rezultatului primului script. | ||
| + | |||
| + | <note> | ||
| + | Apelul scripturilor trebuie să arate în felul următor: | ||
| + | <code bash> | ||
| + | ./extract_url.sh urls.txt | ||
| + | ./generate_mails.sh correct_urls.txt | ||
| + | </code> | ||
| + | </note> | ||
| + | |||
| + | === a) Extragerea URLurilor valide (12p) === | ||
| + | |||
| + | Fișierul "urls.txt" conține multe URLuri pe care trebuie să le extrageți folosind scriptul extract_url.sh. Sunt 3 tipuri de URLuri care ne interesează: | ||
| + | |||
| + | URLuri Web (http:%%//%%, https:%%//%%) | ||
| + | |||
| + | URLuri de transfer (ftp:%%//%%) | ||
| + | |||
| + | Adrese de mail formatate ca link (mailto:) | ||
| + | |||
| + | Scriptul trebuie să extragă din fișierul primit ca argument toate URLurile valide. Vom considera că un URL este valid dacă: | ||
| + | |||
| + | - Este compus din Protocol + Separator + Domeniu + Cale(Opțională) | ||
| + | |||
| + | - Protocoalele acceptate sunt cele precizate mai sus, unde le sunt precizate și separatoarele, mai exact "%%//%%" pentru http, https și ftp, și ":" pentru mailto. | ||
| + | |||
| + | - Domeniul poate să conțină litere mici sau mari, cifre, puncte și cratime. Domeniul trebuie să se termine cu un top level domain de minim 2 litere (ex: .ro, .com). | ||
| + | |||
| + | - Conține caracterul "@" dacă e mail, și nu îl conține dacă nu e mail. | ||
| + | |||
| + | - Opțional poate să aibă și o cale. Calea este la final, după un /. Calea poate să conțină cifre, litere și caractere uzuale pentru cai (., _, ?, =, &, %, -). URLul poate să aibă o cale de maxim un nivel adâncime. În cazul în care are mai mult decât un nivel adâncime, se returnează URLul doar cu primul nivel ( exemplu: https://www.exemplu.ro/files/curs1.pdf devine https://www.exemplu.ro/files ). | ||
| + | |||
| + | Rezultatul scriptului trebuie salvat în fișierul /home/student/tema3-task4/correct_urls.txt. | ||
| <note important> | <note important> | ||
| - | De fiecare dată când veți rula `sudo uso start 3` se va genera un nou log.txt. | + | Rezultatul scriptului trebuie sortat alfabetic și trebuie să nu existe dubluri |
| </note> | </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. | + | === b) Extragerea mailurilor valide (13p) === |
| - | * **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. | + | În urma rularii scriptului precedent am obținut o lista de URLuri, dintre care și mailuri. |
| - | * **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 făcute către ''/login'' din fișierul ''log.txt'', rețineți în fișierul ''users_db.txt'' toți utilizatorii și parola lor respectivă (ca hash de tipul sha256). | + | Scriptul generate_mails.sh extrage toate mailurile pentru @pub și generează echivalentul său pentru @studenti.upb. |
| - | * **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. | + | De exemplu, mailto:uso-team@pub.ro devine uso-team@studenti.upb.ro. |
| - | * **Exemplu: <color green>Safari - 120</color>** | + | |
| - | </hidden> | + | Rezultatul scriptului trebuie salval în fișierul /home/student/tema3-task4/mails.txt. |
| + | |||
| + | <note important> | ||
| + | Rezultatul scriptului trebuie sortat alfabetic și trebuie să nu existe dubluri | ||
| + | </note> | ||
| + | |||
| + | ==== Task 05 - Parole Gaming (30p) ==== | ||
| + | |||
| + | <note> | ||
| + | Pentru acest task se va lucra exclusiv în directorul /home/student/tema3-task5 | ||
| + | |||
| + | Înainte de a vă apuca, intrați in directorul acesta. | ||
| + | </note> | ||
| + | |||
| + | <note important> | ||
| + | Pentru acest task trebuie să descărcați fișierele common_words.txt și passwords.txt https://raw.githubusercontent.com/Raduta-Alexandru/uso-tema3-files/refs/heads/main/common_words.txt https://raw.githubusercontent.com/Raduta-Alexandru/uso-tema3-files/refs/heads/main/passwords.txt | ||
| + | </note> | ||
| + | |||
| + | |||
| + | <note> | ||
| + | Apelul scriptului trebuie să arate în felul următor: | ||
| + | <code bash> | ||
| + | ./parole_gaming.sh common_words.txt passwords.txt | ||
| + | </code> | ||
| + | </note> | ||
| + | |||
| + | Scrieți un script care primește ca argumente două fișiere. Primul este un dicționar de parole cunoscute, iar al doilea este plin cu potențiale parole. | ||
| + | |||
| + | Scriptul parole_gaming.sh verifică fiecare parolă din cele potențiale, și scrie în fișierul cleaned_passwords.txt toate parolele valide, adică cele care trec toate cele 8 criterii de validitate: | ||
| + | |||
| + | - Conține cel puțin o literă mare. | ||
| + | |||
| + | - Conține cel puțin o literă mică. | ||
| + | |||
| + | - Conține cel puțin o cifră. | ||
| + | |||
| + | - Conține cel puțin un semn de punctuație din setul: "!@#$%^&*?-_=+". | ||
| + | |||
| + | - Nu conține spații. | ||
| + | |||
| + | - Are lungimea între 8 și 128 de caractere. | ||
| + | |||
| + | - Nu are mai mult de 3 caractere identice consecutive (Ex: "aabaa" îndeplinește acest criteriu, dar "aaaab" nu îl întâlnește). | ||
| + | |||
| + | - Nu conține niciun cuvânt din dicționar (Ex: "aA!1test" nu îndeplinește acest criteriu, deoarece "test" este un cuvânt din dicționar). | ||
| + | |||
| + | Rezultatul scriptului trebuie salvat în fișierul /home/student/tema3-task5/cleaned_passwords.txt | ||
| + | |||
| + | ==== Task obligatoriu pentru toate temele (0p) === | ||
| + | |||
| + | Finalizați tema si asigurați-vă că ați submis tema cu ''sudo uso submit''. | ||