doc.tex (4410B)
1 \documentclass[12pt]{article} 2 \usepackage[utf8]{inputenc} 3 \usepackage[greek,english]{babel} 4 \usepackage{alphabeta} 5 \usepackage{fancyhdr} 6 \usepackage{listings} 7 \usepackage{mathtools} 8 \usepackage{xcolor} 9 \usepackage{float} 10 \usepackage{siunitx} 11 \usepackage[margin=0.5in]{geometry} 12 \usepackage[backend=bibtex]{biblatex} 13 14 \lstset { 15 basicstyle=\ttfamily, 16 columns=fullflexible, 17 breaklines=true, 18 keepspaces=true, 19 showstringspaces=false 20 } 21 22 \title{Εργαστήριο Ασφάλειας στην Τεχνολογία της Πληροφορίας -- Εργασία 1} 23 \author{Χρήστος Μαργιώλης -- 19390133} 24 \date{Απρίλιος 2024} 25 26 \begin{document} 27 28 \begin{titlepage} 29 \maketitle 30 \begin{figure}[t!] 31 \begin{center} 32 \includegraphics[scale=0.3]{./res/uniwalogo.png} \\ 33 \Large 34 \textbf{Πανεπιστήμιο Δυτικής Αττικής} \\ 35 \large 36 Τμήμα Μηχανικών Πληροφορικής και Ηλεκτρονικών Υπολογιστών 37 \end{center} 38 \end{figure} 39 \end{titlepage} 40 41 \renewcommand{\contentsname}{Περιεχόμενα} 42 \tableofcontents 43 \pagebreak 44 45 \section{Δραστηριότητα 1: Ανάπτυξη και δοκιμή του shellcode} 46 47 Αρχικά απενεργοποιούμε το ASLR: \\ 48 49 \includegraphics[width=\textwidth]{res/aslr.png} \\ 50 51 Γράφουμε το πρόγραμμα \lstinline{shellcode.c}: 52 53 \lstinputlisting[language=c]{../src/shellcode.c} 54 55 Κάνουμε compile και το τρέχουμε: \\ 56 57 \includegraphics[width=\textwidth]{res/shellcode.png} \\ 58 59 Μετατρέπουμε το πρόγραμμα σε setuid: \\ 60 61 \includegraphics[width=\textwidth]{res/chownshellcode.png} \\ 62 63 Παράκαμψη αντιμέτρου \lstinline{/bin/sh} δημιουργώντας symbolic link με το 64 \lstinline{/bin/zsh} και επανεκτέλεση του προγράμματος: \\ 65 66 \includegraphics[width=\textwidth]{res/zshshellcode.png} \\ 67 68 \section{Δραστηριότητα 2: Ανάπτυξη του ευπαθούς προγράμματος} 69 70 \lstinputlisting[language=c]{../src/stack.c} 71 72 Κάνουμε compile και το τρέχουμε: \\ 73 74 \includegraphics[width=\textwidth]{res/stack.png} \\ 75 76 \section{Δραστηριότητα 3: Δημιουργία του αρχείου εισόδου (badfile)} 77 78 \lstinputlisting[language=c]{../src/exploit.c} 79 80 Κάνουμε compile και τρέχουμε το πρόγραμμα ώστε να παραχθεί το αρχείο εισόδου: \\ 81 82 \includegraphics[width=\textwidth]{res/exploit.png} \\ 83 84 Αναλύουμε τα περιεχόμενα του badfile μέσω του προγράμματος hexdump: \\ 85 86 \includegraphics[width=\textwidth]{res/hexdump.png} \\ 87 88 \section{Δραστηριότητα 4: Εύρεση της διεύθυνσης του shellcode μέσα στο badfile} 89 90 Κάνουμε compile το πρόγραμμα δίνοντας την επιλογή \lstinline{-g} ώστε να 91 παραχθει debug δεδομένα τα οποία θα χρησιμοποιηθούν από τον GDB: \\ 92 93 \includegraphics[width=\textwidth]{res/stack_gdb.png} \\ 94 95 Βάζουμε breakpoint στην συνάρτηση \lstinline{bof()} και τρέχουμε το πρόγραμμα στον 96 GDB: \\ 97 98 \includegraphics[width=\textwidth]{res/gdb1.png} \\ 99 100 Τυπώνουμε τις διευθύνσεις του buffer, καθώς και του καταχωρητή \lstinline{ebp} 101 και τέλος υπολογίζουμε την απόστασή τους: \\ 102 103 \includegraphics[width=\textwidth]{res/gdb2.png} \\ 104 105 \section{Δραστηριότητα 5: Προετοιμασία του αρχείου εισόδου} 106 107 Τροποποιούμε τον κώδικα του \lstinline{exploit.c} ώστε να δείχνει στην σωστή 108 διεύθυνση μνήμης (το offset \lstinline{0x60} προέκυψε μετά από δοκιμές): 109 110 \begin{lstlisting}[language=C] 111 *((long *)(buf + 0x24)) = 0xbfffeb48 + 0x60; 112 \end{lstlisting} 113 114 Μεταγλωττίζουμε και ελέγχουμε το νέο badfile: \\ 115 116 \includegraphics[width=\textwidth]{res/offset.png} \\ 117 118 \section{Δραστηριότητα 6: Εκτέλεση της επίθεσης} 119 120 \includegraphics[width=\textwidth]{res/attack.png} \\ 121 122 \end{document}