Sprawozdanie lab3 - Stopień: 5 PDF

Title Sprawozdanie lab3 - Stopień: 5
Course Bezp. syst. i usług inform. 2
Institution Politechnika Wroclawska
Pages 3
File Size 213.1 KB
File Type PDF
Total Downloads 18
Total Views 127

Summary

Lab 3 report...


Description

Kajetan Parzyszek 225940

11-11-2019r.

Bezp. syst. i usług inform. 2 – Laboratorium Prowadzący Mgr inż. Przemysław Świercz

Laboratorium 3 Gry programistyczne Cel ćwiczenia: Wydobycie flag ukrytych w zaszyfrowanych xor’em tekstach. Wstęp: Na stronie https://stary.rozwal.to/ znajdują się różnego rodzaju wyzwania pozwalające na sprawdzenie swoich zdolności pod kątem wyszukiwania dziur w zabezpieczeniach stron internetowych lub też zwykłych zagadek logicznych. Celem ćwiczenia było przejście dwóch ćwiczeń z kategorii kryptografii, szyfr Bob’a oraz Alice. Zadania te wykonywane były przy użyciu języka python.

1. Bob uwielbia xorować – 20 pkt ( http://training.securitum.com/rozwal/abc/6.php ) W tekście zadania otrzymujemy informację że flaga została zaszyfrowana przez Bob’a w podanym tekście z wykorzystaniem jednego bajtu. GCg7Ozs7Oy01e3oNMz4gP3ogP3ovPjs2NXoZM3opMz96KDUgKSAjPCg1LTs5 ei4/MSkueiA7KSAjPCg1LTs0I3oqNTA/PiM0OSAjN3o4OzAuPzd0ehQ1ej41 OCg7dno8Njs9O3ouNWB6CBUADRsWBSEJMzQ9Nj8CNSgYIy4/GTMqMj8oJw= =

Tekst szyfru prezentuje się jak powyżej, od razu można zauważyć że zastosowano prawdopodobnie kodowanie base64 ze względu na obecność znaków wyrównujących (==). Czyli najpierw podany tekst należy zdekodować. Następnie wiedząc że cały klucz ma długość jednego bajtu tworzymy pętlę po kluczu od 0 do 256, gdzie wartość klucza zamieniamy na string a następnie wykonujemy operację xor na kolejnych pozycjach wiadomości. Jeżeli w rozszyfrowanej wiadomości znajdziemy fragment „Rozwal_{„(jednakowy format dla każdej flagi) jest to prawdopodobnie wiadomość jaką chcieliśmy uzyskać. Poniżej krótki fragment kody prezentujący wyżej omówione działania.

while key < 256: key_str = str(chr(key)) decrypted = [chr(ord(a) ^ ord(b)) for (a, b) in zip(messege_decoded, cycle(key_str))] decrypted = "".join(decrypted) if "ROZWAL_{" in decrypted: print(decrypted) break key += 1

Otrzymane przez nas w powyższy sposób rozwiązanie prezentuje się następująco. Braaaaawo! Widze ze udalo Ci sie rozszyfrowac tekst zaszyfrowany pojedynczym bajtem. No dobra, flaga to: ROZWAL_{SingleXorByteCipher}

2. Alice też xoruje – 125 pkt ( http://training.securitum.com/rozwal/abc/7.php ) Zadanie drugie różni się od pierwszego jedynie tym że do xorowania wykorzystane zostało pełne hasło o nieznanej długości, a nie jedynie jeden bajt. Z tego też powodu podejście siłowe z poprzedniego zadania nie sprawdzi się już tak dobrze. Ponownie otrzymujemy zaszyfrowany tekst: PAADREshCgcRDgZPBAoPSxgGBBEOAR0ABksVEUUeDw4YCksoBlQWAg5PB goRGBUNAxkEGBUGS x8KGkUfDgQHEUVLIgEWAgoDVAoFSw0NBksFBhEGBEsLGBARGBUNSUsKD Q1FBgQVGAwcDk8WHA cETwQXEQ4fBgocCgsOAAUCClQADQ4EABwcBQoTCksKGxUOHkVPOQoRDk 8eABgRDA4ASx8dGwY DDk8EBA8PBhoCHksVEQcSSwEdAEsJFhgKSxEOVBEZHgsaCkVLIB9JSw0DFQI KSxsbRTkkNSMk JzQUNQkCCAo9FiIGHwYAGBgKEBg=

Ponownie zauważamy że zastosowano kodowanie base64. Tym razem sytuacja jest nieco trudniejsza gdyż do rozwiązania musimy dojść małymi krokami, a mianowicie z wykorzystanie znanej nam części plain text’u

ukrytego w zaszyfrowanej wiadomości, tak jak uprzednio jest to „Rozwal_{„. Podejście stosujemy podobne jak w zadaniu poprzednim, jeżeli w rozszyfrowanym tekście znajduje się nasz fragment wiadomości to oznacza że jesteśmy na dobrej drodze do rozwiązania. Algorytm rozwiązania prezentuje się następująco: • Dla plain text’u w każdej możliwej pozycji wiadomości (i) o W pętli (j) wygeneruj klucz częściowy na podstawie xorowania plain text’u z zakodowaną wiadomością (poz. i + j) o Pomiń klucze z niedrukowalnymi wartościami o Dla różnych długości klucza (n) wykonaj: ▪ Dla różnych pozycji klucza (m) wykonaj: • Rozszerz klucz i powiel do długości tekstu • Rozszyfruj tekst za pomocą klucza • Pomiń niedrukowalne rezultaty • Wypisz częściowy klucz oraz otrzymaną wiadomość W ten sposób otrzymujemy część klucza oraz część odkodowanego tekstu. Następnie zmieniamy plain text dla którego uruchamiany jest algorytm (nowy plain text otrzymujemy z częściowo odkodowanego tekstu) i uruchamiamy algorytm ponownie, ewentualnie otrzymując brakujące części klucza/wiadomości. W ten sposób po pierwszym uruchomieniu algorytmu dla plain text’u „ROZWAL_{„ otrzymaliśmy: Partial Key: koÿÿkkotek Plaintext: Woÿÿ Jestem ÿÿd wrazenÿÿm ze udaÿÿ Ci sie ÿÿzszyfrowÿÿ ten tekÿÿ. Musialÿÿn byc niÿÿo dluzszÿÿ aby mozÿÿwe bylo ÿÿzeprowadÿÿnie efekÿÿwnego atÿÿu. Moze ÿÿszcze trÿÿhe paddiÿÿu zeby nÿÿ bylo zaÿÿrudno. Oÿÿ flaga tÿÿROZWAL_{ÿÿiceIsImpÿÿssed}

Następnie uruchamiamy algorytm raz jeszcze dla plain text’u „rozszyfrow” wyciągniętego z wiadomości i otrzymujemy pełne rozwiązanie: Partial Key: kotekkotek Plaintext: Wow! Jestem pod wrazeniem ze udalo Ci sie rozszyfrowac ten tekst. Musial on byc nieco dluzszy, aby mozliwe bylo przeprowadzenie efektywnego ataku. Moze jeszcze troche paddingu zeby nie bylo za trudno. Ok, flaga to ROZWAL_{AliceIsImpressed}...


Similar Free PDFs