Skip to content

Commit 0dc8a1c

Browse files
Add 'Zakresy funkcjonalnosci' chapter
1 parent 39f9006 commit 0dc8a1c

13 files changed

+215
-36
lines changed

README.md

+10
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
# Capture The Flag game based on Reverse Engineering
2+
3+
This repository contains both CTF challenges source code located in [src](https://github.com/piotrek-szczygiel/bachelor-thesis/tree/master/src) directory
4+
and also latex source code located in [thesis](https://github.com/piotrek-szczygiel/bachelor-thesis/tree/master/thesis) directory.
5+
6+
You can play the game on [szczygiel.dev](https://szczygiel.dev).
7+
Just create an account and hack away!
8+
Website was created using self-hosted version of [CTFd](https://ctfd.io) platform.
9+
10+
You can find latest PDF version of thesis on [releases](https://github.com/piotrek-szczygiel/bachelor-thesis/releases) page.

thesis/.gitignore

+3
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,10 @@
11
thesis.aux
2+
thesis.bbl
3+
thesis.blg
24
thesis.fdb_latexmk
35
thesis.fls
46
thesis.log
57
thesis.out
68
thesis.pdf
79
thesis.synctex.gz
10+
thesis.toc

thesis/bibliography.bib

+34-4
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
@Article{artykul2011,
1+
Article{artykul2011,
22
author = {Autor},
33
title = {Artyku{\l} w czasopi{\'s}mie},
44
journal = {Czasopismo},
@@ -9,22 +9,52 @@ @Article{artykul2011
99
sk{\l}adowych rozwi{\k{a}}zania}
1010
}
1111
12-
@Book{ksiazka2011,
12+
Book{ksiazka2011,
1313
author = {Autor},
1414
title = {Ksi{\k{a}}{\.z}ka},
1515
publisher = {Wydawnictwo},
1616
year = {2011}
1717
}
1818
19-
@Misc{narzedzie2011,
19+
Misc{narzedzie2011,
2020
key = {narzedzie},
2121
title = {Narz{\k{e}}dzie/technologia},
2222
howpublished = {\url{strona.internetowa.narzedzia}}
2323
}
2424
25-
@Misc{projekt2011,
25+
Misc{projekt2011,
2626
author = {Autor},
2727
title = {Inny projekt},
2828
howpublished = {\url{strona.internetowa.projektu}},
2929
year = 2011
3030
}
31+
32+
@Misc{CTFd,
33+
key = {CTFd},
34+
title = {Platforma CTFd},
35+
howpublished = {\url{https://ctfd.io}}
36+
}
37+
38+
@Misc{picoCTF,
39+
key = {picoCTF},
40+
title = {Zawody picoCTF},
41+
howpublished = {\url{https://picoctf.com}}
42+
}
43+
44+
@Misc{docker,
45+
key = {docker},
46+
title = {Docker},
47+
howpublished = {\url{https://docker.com}}
48+
}
49+
50+
@Misc{Caddy,
51+
key = {Caddy},
52+
title = {Serwer Caddy},
53+
howpublished = {\url{https://caddyserver.com}}
54+
}
55+
56+
@Misc{lets_encrypt,
57+
key = {lets_encrypt},
58+
title = {Organizacja Let's Encrypt},
59+
howpublished = {\url{https://letsencrypt.org}}
60+
}

thesis/images/szczygiel_dev.png

48.8 KB
Loading
21.6 KB
Loading
25 KB
Loading
31.1 KB
Loading

thesis/images/szczygiel_dev_login.png

20.6 KB
Loading
22.1 KB
Loading
27.6 KB
Loading
38.6 KB
Loading

thesis/images/szczygiel_dev_users.png

21 KB
Loading

thesis/thesis.tex

+168-32
Original file line numberDiff line numberDiff line change
@@ -21,9 +21,14 @@
2121

2222
\maketitle
2323

24+
\tableofcontents
25+
\newpage
26+
2427
\section{\SectionTitleProjectVision}
2528
\label{sec:cel-wizja}
2629

30+
\subsection{Wprowadzenie}
31+
2732
Gra typu Capture-the-Flag jest to rodzaj zawodów z ogólnie pojętego
2833
bezpieczeństwa komputerowego. Ich celem zwykle jest edukacja uczestników
2934
o zabezpieczeniach systemów oraz możliwość pokazania im jak reagować
@@ -35,7 +40,7 @@ \section{\SectionTitleProjectVision}
3540
z dziedziny eksploitacji stron internetowych, flagę możemy znaleźć klikając
3641
"Pokaż źródło strony" w przeglądarce internetowej.
3742

38-
\begin{figure}[h]
43+
\begin{figure}[ht]
3944
\centering
4045
\includegraphics[width=10cm]{flag_page_source}
4146
\caption{Flaga \textbf{f7s0jkl} ukryta w źródle strony internetowej}
@@ -60,12 +65,12 @@ \section{\SectionTitleProjectVision}
6065
Platforma sama w sobie nie jest niczym specjalnym, udostępnia jedynie takie powszechne
6166
funkcjonalności jak rejestracja użytkowników, ranking najlepszych graczy,
6267
pobieranie zadań oraz interfejs umożliwiający wprowadzanie znalezionych
63-
flag. Z tego względu użyję już gotowej platformy \href{https://ctfd.io}{CTFd}.
68+
flag. Z tego względu użyję już gotowej platformy CTFd \cite{CTFd}.
6469
Użycie takiego gotowego rozwiązania pozwoli mi w pełni skupić się na samych zadaniach
6570
i nie przejmować się takimi rzeczami jak gracze próbujący łamać zabezpieczenia
6671
platformy.
6772

68-
\begin{figure}[h]
73+
\begin{figure}[ht]
6974
\centering
7075
\includegraphics[width=10cm]{ctfd}
7176
\caption{Przykładowe zadanie na stronie demonstracyjnej CTFd}
@@ -83,13 +88,15 @@ \section{\SectionTitleProjectVision}
8388
zachęcające go do dalszej rozgrywki. Finalne zadania powinny stanowić wyzwanie
8489
nawet dla doświadczonych graczy. \pagebreak
8590

91+
\subsection{Dostępne platformy}
92+
8693
Aktualnie istnieje wiele różnych zawodów CTF online.
87-
Jednym z popularniejszych jest \newline \href{https://picoctf.com}{picoCTF}.
88-
Można tam kiedykolwiek wejść, zalogować się i zająć się rozwiązywaniem problemów.
94+
Jednym z popularniejszych jest \newline picoCTF \cite{picoCTF}.
95+
Można tam wejść kiedykolwiek, zalogować się i zająć się rozwiązywaniem problemów.
8996

90-
\begin{figure}[h]
97+
\begin{figure}[ht]
9198
\centering
92-
\includegraphics[width=10cm]{picoctf}
99+
\includegraphics[width=15cm]{picoctf}
93100
\caption{Zadanie z kategorii Forensics na stronie picoCTF}
94101
\label{fig:picoctf}
95102
\end{figure}
@@ -99,11 +106,13 @@ \section{\SectionTitleProjectVision}
99106
Mnie natomiast bardzo interesuję temat inżynierii wstecznej i chciałem
100107
przygotować wyzwania oparte o zadania tylko z tej kategorii.
101108

109+
\subsection{Języki programowania i narzędzia}
110+
102111
Zadania będą tworzone w języku C. Jest to powszechnie znany język, który
103112
z wyłączoną zbyt agresywną optymalizacją ze strony kompilatora, generuje
104113
w miarę przewidywalny kod maszynowy. Zaletą tego jest to, że narzędzia
105114
do debugowania, dezasemblacji oraz wykonywania innych analiz programów
106-
bardzo dobrze radzą sobie z takimi plikami. Dzięki temu język ten
115+
dobrze radzą sobie z takimi plikami. Dzięki temu język ten
107116
zapewni nam kontrolę nad tym w jakim stopniu graczowi ułatwimy
108117
lub utrudnimy rozgrywkę. W celu zapewnienia większej różnorodności
109118
środowisk korzystać będziemy zarówno z systemu Windows jak i Linux.
@@ -112,46 +121,173 @@ \section{\SectionTitleProjectVision}
112121
Poczynając od linuxowych programów linii poleceń takich jak \emph{strings}
113122
czy \emph{gdb}, pisania własnych narzędzi w języku \emph{Python},
114123
czy w końcu korzystając z pełnoprawnych narzędzi z interfejsem graficznym takich
115-
jak używana przez NSA \emph{Ghidra}, czy debugger dla systemu
124+
jak używana przez NSA \emph{Ghidra}, \emph{Cutter}, czy debugger dla systemu
116125
Windows \emph{RemedyBG}.
117126

118127
\clearpage
119128

120-
%\emph{Charakterystyka problemu, motywacja projektu (w tym przegląd
121-
% istniejących rozwiązań prowadząca do uzasadnienia celu prac),
122-
% wizja produktu i analiza zagrożeń.}
123-
124129
\section{\SectionTitleScope}
125130
\label{sec:zakres-funkcjonalnosci}
126-
%\emph{Kontekst użytkowania produktu (aktorzy, współpracujące systemy)
127-
% oraz specyfikacja wymagań funkcjonalnych i niefunkcjonalnych.}
131+
132+
\subsection{Platforma}
133+
134+
Jak wspominałem w poprzednim rozdziale, do interfejsu webowego skorzystam
135+
z gotowej platformy CTFd \cite{CTFd}. Finalny produkt będzie
136+
dostępny na mojej stronie, pod adresem \href{https://szczygiel.dev}{https://szczygiel.dev}.
137+
Strona postawiona będzie na prywatnym serwerze VPS. Platforma będzie
138+
uruchomiona w środowisku docker \cite{docker},
139+
a wystawiona do świata będzie poprzez serwer Caddy \cite{Caddy},
140+
który w prosty sposób zapewni nam HTTPS, dzięki organizacji Let's Encrypt \cite{lets_encrypt}.
141+
142+
\subsection{Użytkownicy}
143+
144+
Użytkownikiem systemu będzie każda osoba zainteresowana rozwiązywaniem
145+
tego rodzaju zadań. Może to być zarówno ktoś kształcący się lub pracujący
146+
w dziale informatycznym, jak i osoba dla której jest to jedynie hobby.
147+
148+
Wszystkie gotowe zadania zostaną wrzucone na platformę, dzięki czemu
149+
każda zainteresowana osoba będzie mogła spróbować swoich sił.
150+
151+
\clearpage
152+
153+
\subsection{Prezentacja interfejsu użytkownika}
154+
155+
\begin{figure}[ht]
156+
Pierwsze co zobaczy każdy użytkownik wchodzący na platformę, to strona główna.
157+
Będzie z niej można przejść do reszty podstron, takich jak logowanie, rejestracja,
158+
wylogowanie, spis graczy, tabela wyników oraz lista dostępnych zadań.
159+
160+
\vspace{1cm}
161+
162+
\centering
163+
\includegraphics[width=14cm]{szczygiel_dev}
164+
\caption{Strona głowna platformy CTF}
165+
\label{fig:szczygiel_dev}
166+
\end{figure}
167+
168+
\begin{figure}[ht]
169+
Poniżej przedstawiony jest interfejs rejestracji nowego użytkownika.
170+
Nie będzie to nic skomplikowanego - wystarczy podać login, email oraz hasło.
171+
172+
\vspace{1cm}
173+
174+
\centering
175+
\includegraphics[width=14cm]{szczygiel_dev_register}
176+
\caption{Rejestracja nowego użytkownika}
177+
\label{fig:szczygiel_dev_register}
178+
\end{figure}
179+
180+
\begin{figure}[ht]
181+
Jeśli użytkownik posiada konto to będzie się mógł na nie zalogować.
182+
183+
\vspace{1cm}
184+
185+
\centering
186+
\includegraphics[width=14cm]{szczygiel_dev_login}
187+
\caption{Panel logowania dla istniejącego użytkownika}
188+
\label{fig:szczygiel_dev_login}
189+
\end{figure}
190+
191+
\begin{figure}[ht]
192+
Będąc zalogowanym, można wybrać zadanie które ma się ochote rozwiązać.
193+
194+
\vspace{1cm}
195+
196+
\centering
197+
\includegraphics[width=14cm]{szczygiel_dev_challenges}
198+
\caption{Wybór zadania do rozwiązania}
199+
\label{fig:szczygiel_dev_challenges}
200+
\end{figure}
201+
202+
\begin{figure}[ht]
203+
Po wybraniu interesującego nas zadania, może pobrać dostarczony plik,
204+
a następnie po rozwiązaniu zadania wprowadzić prawidłową (lub nie) flagę.
205+
206+
\vspace{1cm}
207+
208+
\centering
209+
\includegraphics[width=14cm]{szczygiel_dev_incorrect}
210+
\caption{Interfejs zadania oraz wprowadzenie nieprawidłowej flagi}
211+
\label{fig:szczygiel_dev_incorrect}
212+
\end{figure}
213+
214+
\begin{figure}[ht]
215+
Po wprowadzeniu prawidłowej flagi otrzymamy stosowny komunikat.
216+
Można również zauważyć, że zadanie w tle zmieniło kolor na zielony.
217+
218+
\vspace{1cm}
219+
220+
\centering
221+
\includegraphics[width=14cm]{szczygiel_dev_correct}
222+
\caption{Efekt wprowadzenia prawidłowej flagi}
223+
\label{fig:szczygiel_dev_correct}
224+
\end{figure}
225+
226+
\begin{figure}[ht]
227+
Dostępna jest również lista zarejestrowanych użytkowników.
228+
Można wejść w profil każdego użytkownika i zobaczyć jego postępy.
229+
230+
\vspace{1cm}
231+
232+
\centering
233+
\includegraphics[width=14cm]{szczygiel_dev_users}
234+
\caption{Spis zarejestrowanych użytkowników}
235+
\label{fig:szczygiel_dev_users}
236+
\end{figure}
237+
238+
\begin{figure}[ht]
239+
Wchodząc na profil użytkownika możemy zobaczyć o nim różne informacje.
240+
Jest to przede wszystkim rozkład prawidłowych oraz nie prawidłowych
241+
wprowadzeń flag oraz wykres posiadanych punktów w czasie.
242+
Na dole widzimy również wszystkie rozwiązane przez użytkownika zadania.
243+
244+
\vspace{1cm}
245+
246+
\centering
247+
\includegraphics[width=14cm]{szczygiel_dev_user_info}
248+
\caption{Szczegóły postępów konkretnego użytkownika}
249+
\label{fig:szczygiel_dev_user_info}
250+
\end{figure}
251+
252+
\begin{figure}[ht]
253+
Każdy użytkownik może również zmienić oraz dodać informację o sobie.
254+
Będzie mógł zmienić nazwę użytkownika, email, hasło, oraz dodać
255+
takie szczegóły jak strona internetowa, firma dla której pracuję czy kraj pochodzenia.
256+
257+
\vspace{1cm}
258+
259+
\centering
260+
\includegraphics[width=14cm]{szczygiel_dev_settings}
261+
\caption{Edycja profilu użytkownika}
262+
\label{fig:szczygiel_dev_settings}
263+
\end{figure}
264+
265+
\clearpage
128266

129267
\section{\SectionTitleRealizationAspects}
130268
\label{sec:wybrane-aspekty-realizacji}
131-
% \emph{Przyjęte założenia, struktura i zasada działania systemu,
132-
% wykorzystane rozwiązania technologiczne wraz z uzasadnieniem
133-
% ich wyboru, istotne mechanizmy i zastosowane algorytmy.}
269+
\emph{Przyjęte założenia, struktura i zasada działania systemu,
270+
wykorzystane rozwiązania technologiczne wraz z uzasadnieniem
271+
ich wyboru, istotne mechanizmy i zastosowane algorytmy.}
134272

135273
\section{\SectionTitleWorkOrganization}
136274
\label{sec:organizacja-pracy}
137-
% \emph{Struktura zespołu (role poszczególnych osób), krótki opis i
138-
% uzasadnienie przyjętej metodyki i/lub kolejności prac, planowane i
139-
% zrealizowane etapy prac ze wskazaniem udziału poszczególnych
140-
% członków zespołu, wykorzystane praktyki i narzędzia w zarządzaniu
141-
% projektem.}
275+
\emph{Struktura zespołu (role poszczególnych osób), krótki opis i
276+
uzasadnienie przyjętej metodyki i/lub kolejności prac, planowane i
277+
zrealizowane etapy prac ze wskazaniem udziału poszczególnych
278+
członków zespołu, wykorzystane praktyki i narzędzia w zarządzaniu
279+
projektem.}
142280

143281
\section{\SectionTitleResults}
144282
\label{sec:wyniki-projektu}
145-
% \emph{Wskazanie wyników projektu (co konkretnie udało się uzyskać:
146-
% oprogramowanie, dokumentacja, raporty z testów/wdrożenia, itd.), prezentacja wyników
147-
% i ocena ich użyteczności (jak zostało to zweryfikowane --- np.\ wnioski
148-
% klienta/użytkownika, zrealizowane testy wydajnościowe, itd.),
149-
% istniejące ograniczenia i propozycje dalszych prac.}
150-
151-
% o ile to możliwe proszę używać odwołań \cite w konkretnych miejscach a nie \nocite
283+
\emph{Wskazanie wyników projektu (co konkretnie udało się uzyskać:
284+
oprogramowanie, dokumentacja, raporty z testów/wdrożenia, itd.), prezentacja wyników
285+
i ocena ich użyteczności (jak zostało to zweryfikowane --- np.\ wnioski
286+
klienta/użytkownika, zrealizowane testy wydajnościowe, itd.),
287+
istniejące ograniczenia i propozycje dalszych prac.}
152288

153-
% \nocite{artykul2011,ksiazka2011,narzedzie2011,projekt2011}
289+
\clearpage
154290

155-
% \bibliography{bibliography}
291+
\bibliography{bibliography}
156292

157293
\end{document}

0 commit comments

Comments
 (0)