Tema 2

Ce trebuie să știu? Studiați secțiunea de 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). Pentru orice fel de întrebare VĂ RUGĂM SĂ FOLOSIŢI FORUMUL!!!

Thread nou? Nu. Pentru o ușoară parcurgere a mesajelor, folosiți thread-urile de discuții existente în cadrul forumului, fără a crea altele. În consecință, thread-urile (subiectele de discuții) nou create vor fi șterse.

Căutare. Căutați pe forum informația pe care doriți să o obțineți, înainte să puneți o întrebare. De cele mai multe ori, cineva a mai întrebat același lucru. În fiecare thread al forumului aveți informații despre cum puteți căuta în forum.

Printscreen/poză? Nu. În cazul în care doriți să publicați un printscreen pe forum, recomandăm folosirea site-urilor pentru partajarea gratuită a imaginilor, precum imgur sau alternativele sale, publicând pe forum doar link către printscreen. Pozele inserate în răspunsuri vor fi șterse.

Actualizări. Urmăriți atât forumul cât și modificările aduse enunțului/checker-ului, modificări ce sunt publicate și explicate în paragrafele de mai jos.

Regulament. Înainte și în timpul realizării temei, vă rugăm să parcurgeți 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 acs.curs.pub.ro pentru întrebări și neclarități legate de teme.

Întrebări frecvente. Î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 întrebări frecvente întâlnite în cadrul temelor. Să țineți cont, vă rugăm, și de recomandările de comunicare electronică.

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.

Informații generale

Deadline: 28 noiembrie 2025 - ora 23:59
Timp de lucru: 17 zile
Punctaj: 0.5 puncte din nota temelor (se pot acoperi punctaje pierdute de la alte teme)

Actualizări enunț:

  • (tba) N/A

Cunoștințe evaluate

Linkuri utile pentru rezolvarea temei

Testarea temei. Finalizarea temei. Mașină virtuală.

Verificaţi toate indicaţiile din Tema 0 cu privire la maşina virtuală şi configuratiile necesare. Dacă aveţi probleme postați, pe forum!

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ă e necesar acest lucru vă rog să contactaţi în privat responsabilii de temă, la specificarea explicită a acestora pe forum!

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.

Urmăriți 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.

Task obligatoriu pentru toate temele la final

Când finalizați tema, asigurați-vă că ați submis tema cu sudo uso submit.

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.

Cerinţele temei

Pregătire checker

Porniţi lucrul la tema 2

student@usohomework:~$ sudo uso start 2

După ce vă conectați cu user-ul și parola de pe moodle pe platforma de teme, introduceți codul primit mai sus când ați rulat sudo uso start 2 pentru a porni tema!

Dacă vom anunţa pe forum că apar modificări la checker trebuie rulată comanda următoare. Mai jos vedeți cum trebuie să arate outputul la succes:

student@usohomework:~$ sudo uso update
User logged in as: rares.shefu.thau
Updatam tema. Te rog asteapta...
Tema updatata.

Conexiune SSH

Conectaţi-vă la maşina virtuală folosind SSH. ESTE RECOMANDAT SĂ LUCRAŢI FOLOSIND SSH LA ACEASTA TEMĂ, veţi avea nevoie de lucru în mai multe terminale!

mihai@wormhole:~$ ssh student@localhost
 
student@usohomework:~$ 

Pentru cei la care host-ul pe maşina fizică este Windows puteţi folosi utilitarul Putty. Aveţi aici un tutorial de Putty. Pur şi simplu alegeţi ca IP 127.0.0.1, protocol SSH, port 2222. Open and have fun. Deschideţi atâtea instanţe de Putty câte terminale aveţi nevoie (recomandăm minim 5 - 4 containere, 1 pentru maşina de USO). De asemenea, puteți folosi client-ul built-in de ssh al Windows-ului (mai multe detalii aici)

Revedeţi şi Task-ul 3 de la Tema 0

Task 01 - Internet (10p)

a) Verificarea cconectivitate in Internet [4p]

Trimiteți exact 5 pachete catre adresa 8.8.8.8 la intervale regulate de 6 sec afisand TIMESTAMP-ul pachetelor si activand reserve DNS resolution Salvați outputul în: /home/student/tema2/task1/PING_PONG.txt

b) Urmarind Ruta [3p]

Trimiteti un singur pachet catre adresa 1.1.1.1, salvand output-ul /home/student/tema2/task1/four_ones.txt

c) Internet IPv6 [3p]

Folosind nslookup gasiti adresa ipv4 si adresa ipv6 a google.com. Salvati fiecare adresa pe cate o linie in fisierul /home/student/tema2/task1/ipv6.txt

Task 02 - GET (12p)

Pentru acest task, ne vom folosi de un clasic wordlist(un leak de parole care au fost facute publice de hackeri) numit 'rockyou', unul dintre cele mai mari din istorie.

a) Get Wordlists (6p)

b) Acum ne vom folosi(adica voi) de skill-urile dobandite pentru a descarca folosind un request de tip GET(=a obtine o resursa de pe internet) fisierul rockyou.txt.gz, un celebru wordlist cu parole din datacentere sparte. Link-ul este acesta https://weakpass.com/wordlists/rockyou.txt. Problema este ca va trebui sa identificati link-ul aferent fisierului, nu paginii html. Dupa descarcare, salvati parola de pe line 7777 in fisierul /home/student/tema2/task2/my_password.txt

Hint: apasati F12 si folositi tabul Network pentru a investiga link-ul pe care il accesati cand incercati sa descarcati wordlistul.

b) Checksum (6p)

Dupa ce descarcati si dezarhivati wordlist-ul, redirectionati un checksum de tip sha256 al acestui wordlist in fisierul /home/student/tema2/task2/wordlist_checksum.txt

Task 03 - Wordlists (10p)

Pentru acest task ne vom juca cu fisierul extras la task-ul anterior(rockyou.txt) folosind comenzi precum grep, cat, wc.v Pentru fiecare subtask veti salva output-ul aferent pe o linie noua in fisierul home/student/tema2/task3/values.txt pe care vav trebui sa il creati voi

Pentru a primi punctajul, trebuie să faceți următoarele task-uri folosind o singură comandă în terminal!
Se acceptă și comenzi înlănțuite prin ;.
După fiecare subtask, atașați la finalul fișierului task3/outputs.txt comanda folosită pentru a afisa la stdout raspunsul salvat in fisierul cu valori, altfel punctajul primit va fi 0. Exemplu:

values.txt outputs.txt
student echo $(whoami)
10 echo “10”
99 echo “99”

a) Octeti wordlist (5p)

a) Scrieti pe prima linie a fisierului /home/student/tema2/task3/values.txt numarul de octeti ocupat de wordlist-ul rockyou.txt.

b) Parola cringe (5p)

b) Adaugati pe a doua linie a fisierului /home/student/tema2/task3/values.txt parola aflata pe pozitia 1337 d.p.d.v. alfabetic din primele 3000 de parole aflate in wordlist-ul nesortat.

Aveți în vedere laboratoarele menționate, în care găsiți noțiuni despre instructiuni precum 'tail', 'sort', 'grep'. Comenzile din fisierul outputs.txt vor fi rulate astfel incat sa se obtina valorile aferente din fisierul values.txt

Task 04 - Regex (18p)

Pentru acest task va trebui sa descarcam un alt wordlist mai 'domestic' decat acel anterior si mai relevant pentru noi ca si limba(nu ne intereseaza parole cu alfabete non latine) si anume: https://github.com/kkrypt0nn/wordlists/blob/main/wordlists/passwords/most_used_passwords.txt;

Hint: Link-ul de mai sus duce catre pagina web, iar prin wget trebuie descarcat fisierul RAW. Folositi-va de interfata GitHub sau de internet pentru a afla acest URL si ulterior sa il descrcati pe VM. Daca veti incerca wget https://github.com/kkrypt0nn/wordlists/blob/main/wordlists/passwords/ NU va functiona corect. Nu veti primi fisierul text, ci pagina web aferenta. Folositi-va de interfata web a GitHub si de resursele valabile pe internet pentru a afla structura aferenta URL-ul

a) Filtre basic (6p)

Dupa ce descarcati wordlist-ul, veti scrie in fisierul home/student/tema2/task4/password_statistics.txt urmatoarele informatii

  • numarul de parole care incep cu caractere alfabetice
  • numarul de parola care incep cu caractere speciale
  • toate parolele care NU fac matching pe niciuna din cerintele de mai sus

Fisierul va trebui sa contina un numar per linie. Orice alt format nu va fi luat in considerare.

b) Filtre avansate (12p)

Doarece subtask-ul a) a fost de incalzire, acum dorim sa scriem pe a patra liniie numarul total de parole care respecta cel putin una din conditiile urmatoare:

  • incepe cu 3 vocale
  • se termina cu 3 consoane
  • contine la mijloc o cifra(nu la inceput si nu la final)

Cel putin una inseamna ca se aplica OR logic pentru fiecare conditie in parte, evident exista si parole care respecta mai multe reguli simultan, deci reuniunea nu va fi egala cu suma multimilor ce respecta fiecare conditie in parte, ci va fi mai multa.

Task 05 - Virus (10 p)

Un prieten vă cere ajutorul cu un virus. El vă spune că, de fiecare dată când pornește sistemul său, acesta se blochează după câteva minute. Virusul acesta se multiplică la un anumit interval de timp, umplând memoria sistemului cu procese, care nu fac nimic util.

Task-ul vostru este să opriți toate procesele malițioase, folosind o singură comandă. Prin “o singură comandă” se înțelege ceva executat în terminal, după o singură apăsare a tastei enter, care nu conține comenzi înlănțuite prin ;.

Pentru acest task, aveți de realizat următoarele:

  • căutați cum pot fi oprite, cu o singură comandă, mai multe procese
  • rulați sudo /home/student/tema2/task5/task5
  • gășiți procesele pe care trebuie să le opriți si opriți-le
  • scrieți în fișierul /home/student/tema2/task5/sol.txt comanda folosită

  • Dacă nu sunteți suficient de rapizi în oprirea proceselor, mașină virtuală se va bloca!
  • Rulați script-ul de start doar când sunteți siguri că știți cum să opriți procesele.
  • Dacă script-ul este gol, dezactivați orice antivirus, mai puțin Firewall-ul Windows.

Task 06 - SSH fep (15p)

Fiind studenți la UPB, aveți unele beneficii. Unul dintre ele posibilitatea de a folosi mașini din cloud-ul facultății. Vă puteți conecta la aceste mașini folosind username-ul și parola de pe Moodle în felul următor: ssh <user>@fep.grid.pub.ro

a) fep connection (9p)

- faceți configurația necesară pentru a vă putea conecta la fep fără a vi se cere parola, prin ssh. [7p]

  • Pentru ca checker-ul să poată verifica că ați făcut configurația corectă, va trebui să scrieți în fișierul /home/student/tema2/task6/user.txt username-ul vostru de pe moodle.
  • La generarea cheilor, folosiți setările default. Checker-ul se așteaptă ca fișierele care conțin cheile să aibă denumirea și locația implicită (~/.ssh/id_rsa[.pub])
  • Task-ul va trebui să fie rezolvat fără folosirea unui alias al comenzii!

b) Shortcut (6p)

- faceti configuratia necesara pentru a va conecta la fep folosind doar comanda ssh fep. Din nou, conectarea trebuie sa fie fara parola. [7p]

Acest lucru se poate realiza prin folosirea unei perechi de chei.

Task 07 - Analyzer (15p)

Avem un scenariu in care presupunem ca avem un proces care executa cod malitios pe masina noastra virtuala(fiind VM-ul facultatii probabil nu va pasa, asa ca imaginativa ca este PC-ul vostru). Acestaconsuma foarte putine resurse - CPU si memorie -, asa ca este posibil ca nu fie usor detectabil. Trebuie sa scrieti un script in bash care sa identifice top K procese care consuma cel mai putin CPU ori MEM.

Scriptul se va rula astfel: ./analyzer.sh <RESOURCE> K

Primul argument parsat de catre script va fi MEM sau CPU, iar cel de al doilea parametru va fi un numar natural K. Un exemplu de rulare ar fi:

./analyzer.sh MEM 4 → top 4 procese care consuma cea mai putina memorie Posibil output:

PID,%MEM
2,0.0
3,0.0
4,0.2
5,0.3

./analyzer.sh CPU 7 → top 7 procese care consuma cel mai putin CPU

PID,%CPU
3,0.0
4,0.0
5,0.0
6,0.1
7,0.2

Scriptul trebuie sa respecte intocmai formatarea din exemplu a output-ului, si anume:

  1. Include prima linie ce contine PID-ul si resursa(%MEM/%CPU)
  2. Afiseaza K linii PLUS header-ul de tabel cu numele coloanelor
  3. Cele 2 valori de pe fiecare linie sa fie separate prin virgula

Pentru acest task nu exista subtask-uri, implicit nici punctaj partial

Task 08 - ZAR (20p)

Pentru acest task va trebui sa combinati cunostintele de USO cu cele de PCLP1 si sa scrieti un cod care sa simuleze datul cu zarul(2 zaruri). Citit cu atentie ambele subtask-uri pentru a intelege scopul exercitiului intrucat nu sunt disjuncte, iar rezolvarea celor 2 nu se succede d.p.d.v. temporal, ci se rezolva concomitent.

Pentru versionarea codului cu Git este suficient sa initializati proiectul de Git in directorul task8. De asemenea verificati ca fisierul sa aiba extensia .sh, iar parametrii primiti py si c sa fie litere mici ale alfabetului

a) Implementare Zar (12p)

1. Functionalitatea proiectului consta in apelarea unui mic shell script care va primi ca argument limbajul de programare in care vom simula zarurile pe care le aruncam - ori C, ori Python in felul urmator:

./zar.sh py

./zar.sh c

Output-ul trebuie sa arate astfel: Dau cu zaru X Y unde X si Y sunt posibile numere ce apar pe fata unui zar, si anume numere naturale nenule, cuprinse intre 1 si 6. Exista 2 situatii exceptionale:

  • Dau cu zaru 6 5 n-am nevoie de servici
  • Dau cu zaru 6 6 ca mine nu se mai naste

Gasiti o posibila implementare pentru acest proiect la linkul https://github.com/Nico7777777/tema2-sample. Va puteti inspira pentru structura branch-urilor si commit-urilor.

b) Versionare cod (8p)

Al doilea subtask consta in implementarea acestui proiect utilizand un Git repo si avand minim 3 branch-uri(master este inclus in acestea 3). Pentru simplitate se recomanda a nu modifica fisiere sau bucati de cod simultan in 2 branch-uri simultan intrucat poate duce la conflicte(adica 2 implementari diferite)

Implementarea trebuie sa va apartina voua si numai voua. De asemenea pentru numele commit-uri se recomanda utilizarea unor descrieri sugestive. Utilizarea unui limbaj licentios poate duce la pierderea punctajului pe tema

Task obligatoriu pentru toate temele la final

Când finalizați tema asigurați-vă că ați submis tema cu sudo uso submit.

uso/teme/tema-2.txt · Last modified: 2025/11/16 10:22 by alexandru.raduta06
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0