Hacking

1,868
-1

Published on

0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total Views
1,868
On Slideshare
0
From Embeds
0
Number of Embeds
1
Actions
Shares
0
Downloads
46
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Hacking

  1. 1. ‐ 1 -
  2. 2. Inhoud Pagina Inhoud 1 Kaft 2 Inhoud 3 Werkplan 5 Inleiding hacking 8 I am a JavaScript. Abuse me. 9 Its simple if you see it. 10 Dont look at me like this. 12 Sir, could you pop me? 13 Now, what is that really? 14 What you mean it’s not THAT easy? 16 Jedi mindtricks. 17 Security through obscuration! 18 Ok, finally its secure. Or? 19 Please dont let me forget it. 20 Amazing Code 23 Society matters 24 The password is regular! 26 Extra informatie 28 Server installatie 30 Logboek & resultaten 31 KaftAttentieDe antwoorden van de challenges zijn vertrouwelijk. Ze mogen niet rechtstreeks wordenovergenomen. -2-
  3. 3. WerkplanHet onderwerp van deze opdracht is Hacken. Als extra proberen we (ondergetekende en IdzardStoker) ook nog een server in te richten. Hacken doe ik op de site www.hackquest.de. Hierop staateen aantal opdrachten (challenges). Je moet door te hacken een wachtwoord weten te bemachtigen.Omdat er te veel verschillende soorten hacks op de site staan, specialiseer ik me op het hacken vanJavaScripts. Van elke opdracht maak ik een kort verslagje.Eerst zetten we een besturingssysteem op de server en vervolgens maken we hem bereikbaar. Overhet opzetten van de server wordt naderhand ook een verslag gemaakt.LeerdoelenIk weet door ervaring dat je veel meer kunt leren als je iets uit elkaar haalt, dan wanneer je alleennaar de buitenkant kijkt. Zo heb ik vroeger bijna elk apparaat bij mij in huis wel een keer opengemaakt en weet ik nu ook hoe bijna elk apparaat, in grote lijnen, werkt. Dit werkt hetzelfde als methacken. Omdat je dieper dan de interface moet kijken om ergens binnen te komen, moet je deapplicatie ook “openmaken”. Ik verwacht dan ook dat ik een hoop leer, maar wel over uiteenlopendeonderwerpen.Over het inrichten van een server heb ik een wat objectiever doel. Ik heb het nog nooit gedaan enben wel benieuwt hoe het moet. Het uiteindelijke doel is gewoon de server aan de praat te krijgen enbereikbaar te maken. Ik verwacht ook wel dat dit gaat lukken. -3-
  4. 4. -4-
  5. 5. Inleiding hackingEen persoon die hackt is een hacker. Tegenwoordig heeft het woord hacker twee betekenissen.Traditioneel is een hacker iemand die er van houdt om met software en andere elektronischesystemen te “prutsen”. Hackers houden ervan te ontdekken hoe computersystemen te werk gaan.Door ze uit elkaar te halen proberen ze vaak nieuwe toepassingen te bedenken (letterlijk is een hackhet vinden van toepassingen, die niet door de maker van het middel bedoeld zijn). Er zijn ook hackersdie onder toezicht van de eigenaar in systemen proberen in te breken (penetration testing). Dit doenze om te kijken of er geen beveiligingsfouten zijn. Dit type hacker noemt men de ethische hacker.Tegenwoordig heb je ook kwaadwillige hackers. Ze staan erom bekend in systemen in te breken. Ookschrijven ze virussen en leggen ze met opzet systemen plat. Technisch gezien zijn dit geen hackers,maar crackers (criminal hackers). Ze hacken voor persoonlijke baat, zonder echt naar deconsequenties te kijken. Vaak doen ze dit voor het geld dat ze ermee verdienen, maar het kan ookom wraak draaien of soms doen ze het slechts voor de faam (zoals het ILOVEYOUR-virus uit 2000).Een ander bekend voorbeeld van deze kwaadwillige acties is het verspreiden van spam (ongewensteemails). Het verwijderen van spam kost de Amerikaanse economie meer dan 22 miljard dollar opjaarbasis, dit terwijl het voor dat kleine groepje spammers maar net winstgevend is. De meestevormen van cracken zijn in Europa en de VS illegaal, toch zijn de crackers vaak slim genoeg om uithanden van de politie te blijven. Tegenwoordig komen de meeste virussen en spam uit Afrika enRusland, dit vanwege de mildere wetgeving.Omdat volgens woordenboeken elke hacker bij voorbaat een cracker is (Van Dale: hacker, iemand dieinbreekt in computers), hebben de hackers nieuwe benamingen bedacht. De crackers, degenen dieuit criminele oogmerk een systeem "kraken", worden ook wel black-hat hackers genoemd. Detraditionele hackers noemen zich white-hat hackers, analoog aan cowboyfilms waarin de "kwaden"zwarte hoeden droegen en de "goeden" witte hoeden. Ook zijn er grey-hat hackers, een kruisingtussen crackers en hackers. Het komt voor dat crackers proberen hun activiteiten te verhullen doorzich als hacker voor te doen. Daarbuiten heb je ook nog crackbies, een combinatie van cracker ennewbie, die ook wel sks (scriptkiddies) of n00bs (newbies) worden genoemd. Scriptkiddies zijncrackers die er eigenlijk geen verstand van hebben. Ze hebben wat programma’s (scripts) endaarmee cracken ze andere systemen. Het grote verschil is dat ze niet zo nieuwsgierig zijn als dehackers en crackers. Newbies staan daar nog onder. Het zijn mensen die op fora vragen of iemand“die en die wel even wil hacken”. Sommige beweren juist dat ze hele goede hackers zijn, dit terwijl zehet verschil tussen Windows en Linux nog niet eens weten. -5-
  6. 6. GeschiedenisDe geschiedenis en de term “hacken” is ontstaan op het Amerikaanse instituut MIT (MassachusettsInstitute of Technology). De eerste hackers waren scholieren uit een treinvereniging. Elke nieuweverbinding of verbetering in de treincircuits werd een hack genoemd. Toen de eerste computersverschenen op het MIT waren zij een van de eerste personen die hiermee onofficieel studeerden.Destijds werden computers bediend via gigantische stapels ponskaarten. Deze moesten met eenaparte machine (ponsmachine) gemaakt worden. Toen ze elkaars werk gingen verbeteren, doorbijvoorbeeld routines te schrijven die minder (pons)kaarten in beslag namen, is de term "hack" ookovergenomen in het programmeren.Omdat computers aanvankelijk nogal beperkt waren qua geheugen, gebeurde het dat programmeursstukken code moesten schrappen om een programma kleiner te maken. Volgens ingewijden werd ditook wel hacken genoemd, net als andere snelle, makkelijke of in ieder geval onverwachteoplossingen voor computerproblemen. Hacker zou in deze eerste context zijn afgeleid van het DuitseHacker, als in “iemand die meubels maakt met een bijl”.Op een dergelijke manier kan een hack slaan op een truc op een heel ander gebied. In de wiskundekan het slaan op een slimme oplossing voor een wiskundig probleem. De GNU Public License(www.gnu.org) wordt door sommigen gezien als een hack, omdat het slim gebruik maakt van de wetop de auteursrechten op een manier die de makers van die wetten niet konden voorzien. Ook hetgebruik in deze context heeft zich buiten MIT verspreid.Denk aan elektronica hobbyisten die eenvoudige aanpassingen doen aan grafische calculators,spelcomputers, elektronische instrumenten en dergelijke om ze aan te passen of uit te breiden met(voor eindgebruikers) onbedoelde of verborgen functies. Een aantal techno muzikanten paste in dejaren ‘80 hun Casio SK-1 keyboard aan door de bedrading van de gebruikte chips te veranderen om ervreemde digitale klanken mee te kunnen maken. Die werden onderdeel van de typische technomuziekstijl.Bedrijven reageren zeer verschillend op dergelijke praktijken. Texas Instruments accepteert hetopenlijk wat betreft zijn grafische calculators en Lego vindt het geen probleem wat betreft hun LEGOMindstorms technische speelgoed, maar Microsoft probeert het hacken van hun Xbox juist teblokkeren met DRM software in Blu-ray Disc spelers, ontworpen om aangepaste spelers tesaboteren. The Gilder, het onofficiële logo van de hackers -6-
  7. 7. Bij het hacken werk ik met Firefox 3.0.8 (behalve wanneer dit anders staat aangegeven). Sommigetoepassingen kunnen niet door Internet Explorer worden uitgevoerd, daarom raad ik je aan ookFirefox te downloaden op http://www.mozilla-europe.org/nl/firefox/. Voor de rest gebruik ikPolycrypt (http://www.net-force.nl/files/download/polycrypt.zip) en Notepad++ (http://notepad-plus.sourceforge.net/nl/site.htm). -7-
  8. 8. Javascript 43. I’m a JavaScript. Abuse me.We openen de pagina en zien een heel simpele login-pagina: alleen een wachtwoord is nodig.Vervolgens klikken we rechts op Alleen dit deelvenster tonen. Hiervan openen we de bron. In deeerste instantie zien we niets dat op een script lijkt; alleen het form. Maar als je naar de horizontalescrollbar kijkt, zie je dat die wel iets langer is dan de paar zinnen die je ziet. Scroll flink naar rechts enje ziet die script:<script type="text/javascript" language="Javascript">function PassConfirm() {var x=document.LayoutBereich1FORM.Eingabefeld1.value;if (x=="thisisnotthepassword") {window.open("veryok.php","_self");} else {alert("Dooh, try again!")}}</script>Omdat dit de eerste quest is, verwacht ik niet veel en dat klopt ook. Er staat maar één ding in dat ookmaar op een wachtwoord lijkt: thisisnotthepassword. We vullen het in en blijkt het ook te zijn ook. -8-
  9. 9. Javascript 44. It’s simple if you see.Op het eerste gezicht zie we een simpel login scherm: een user-form, een pass-form en een submit-knop. We moeten dus een gebruiker en wachtwoord vinden. Laten we beginnen. Eerst klikken werechts op Alleen dit deelvenster tonen. We krijgen nou alleen het inlogscherm te zien. Hiervanbekijken we de bron. En hier halen we alleen de scripts uit:<script type="text/javascript" language="javascript">function noRightClick(){ if (event.button==2) { alert(You know the drill. But this time its different.) }}document.onmousedown=noRightClick</script>Dit script zou ervoor moeten zorgen dat mijn rechtermuisknop niet werkt. Merkwaardig, want ik hadhier geen probleem mee (werkt waarschijnlijk alleen bij Internet Explorer).<script type="text/javascript" language="JavaScript"><!----- Script CopyRight © 1996 - 1997 S.Chris Brown (Spikeman)function Spikeman_password(form) {if (form.Name.value=="BGates") {if (form.Password.value=="moneymoneymoney") {window.open ("dope.php","_self")} else {alert("Sorry " +form.Name.value+ ", wrong password.")}} else {alert("Invalid Name")}}</script>Dit is het login-script. Geschreven in 1996; hadden ze toen al computers?! Hoe dan ook, ze warentoen niet zo slim: de gebruiker en zijn wachtwoord staan duidelijk zichtbaar in het script.Waarschijnlijk zie je het al: de gebruiker is BGates en het wachtwoord is moneymoneymoney. Eveninvullen en klaar! -9-
  10. 10. Javascript 45. Dont look at me like this.Wederom een simpel login scherm: een user-form, een pass-form en een submit-knop. Wanneer jerechts klikt en op Alleen dit deelvenster tonen klikt, krijg je een melding dat dit niet kan. Echter, het iswel mogelijk om rechts te klikken en vervolgens op Deelvensterbron. Je krijgt dan een stuk broncodete zien. Hieronder is alleen het belangrijkste te zien: de scripts.<script type="text/javascript">if (parent.location.href == self.location.href){ window.location.href = framesonly.php}</script>Dit script zorgt ervoor dat ik het frame niet apart kon openen. Geluk valt de broncode bekijken daarniet onder.<script type="text/javascript" language="JavaScript"><!--Hidefunction ValidateEntry (){var y=document.e.u.value;var z=document.e.p.value;var x=0;if(y==User){alert(Please complete this form);var x=1;}if (z==Password){alert(Please complete this form);var x=1;};if (x==1){alert(Entry was notsuccessful);var xxx=0;}else{AreYouWho(y,z);}}function LogIn (){document.e.u.value=Anonymous;document.e.p.value=Entry;};functionAreYouWho(z,y){var x=0;if (z==Password){var x=1;}if (y==User){var q=x+1;};if (q==2){window.open("simple.php","_self");}else{alert(Incorrect Log-In,Password or User Name invalid);var q=0;var x=0;}}// Unhide--></script>Bingo! Dit is het login-script. Vervolgens gaan we het wat leesbaarder neerzetten. We zetten watenters achter de puntkomma’s en nog wat extra enters op sommige andere plekken. - 10 -
  11. 11. <script type="text/javascript" language="JavaScript"><!--Hidefunction ValidateEntry (){var y=document.e.u.value;var z=document.e.p.value;var x=0;if (y==User){alert(Please complete this form);var x=1;}if (z==Password){alert(Please complete this form);var x=1;};if (x==1){alert(Entry was not successful);var xxx=0;}else{AreYouWho(y,z);}}function LogIn (){document.e.u.value=Anonymous;document.e.p.value=Entry;};function AreYouWho(z,y){var x=0;if (z==Password){var x=1;}if (y==User){var q=x+1;};if (q==2){window.open("simple.php","_self");}else{alert(Incorrect Log-In, Password or User Name invalid);var q=0;var x=0;}}// Unhide--></script>Het script maakt drie waardes aan: wachtwoord (Z, haalt hij uit document.e.p.value), gebruiker (Y,haalt hij uit document.e.u.value) en de X waarde (die is nul). Je kunt natuurlijk gaan puzzelen wat ernou exact gebeurt, maar als je goed kijkt zie je dat hij in het laatste blokje een alert geeft als er foutegegevens worden ingevuld. Dit doet hij bij else, dus bij if moet hij de goede gegevens krijgen. Hetenige wat hij daarna doet is naar de pagina simple.php gaan. We vullen dit dus in achter debestaande URL, je krijgt dan dit: http://hackquest.de/modules/HackQuest/hacking/185/simple.php.En we zijn binnen! - 11 -
  12. 12. Javascript 46. Sir could you pop me?Eindelijk een wat moeilijkere challenge. Als we beginnen, krijgen we eerst een aantal popups die omeen gebruikersnaam en wachtwoord vragen. Dit weten we natuurlijk nog niet en als we doorklikkengaat de pagina vanzelf weg. Hier kunnen we geen broncodes uit halen of je moet in die 0,2 secondevier keer klikken. Een probleem dus. Gelukkig is er (bijna) altijd wel een oplossing. We weten dat heteen JavaScript is wat die irritante popups veroorzaakt. Als we dat nou eens uitzetten. In Firefox is datbij instellingen zo gedaan (Extra -> Opties -> Inhoud -> Java en JavaScript uitvinken). Dan proberenwe het nog eens. De popups zijn weg en we zien alleen de tekst die we net ook al zagen, alleenduurde hij toen slechts 0,2 seconde en blijft hij nou staan. Hiervan bekijken we de broncode doorrechts te klikken en dan op Deelvensterbron. Hier is gebruik gemaakt van een programma genaamdHTML Source Code Hide V2.03. Het lijkt erop dat die programma zoveel witte regels in de broncodezet, dat de browser het niet meer aankan. Jammer genoeg blijkt deze geniepige manier nog tewerken ook, zelfs als Firefox de hoogste processorprioriteit krijgt lijkt hij nog vast te lopen. Wemoeten dus een andere manier vinden. We hebben een programma nodig dat stabiel genoeg is omde bron te bekijken. Ik denk dat de DOM Inspector wel werkt. Dit is gratis te verkrijgen als FirefoxAdd-on. Je moet wel eerst Firefox hebben (maar dat hoor je eigenlijk allang te hebben), vervolgensdownload je DOM Inspector hier: https://addons.mozilla.org/nl/firefox/addon/6622 . Wanneer wehet deelvenster apart openen en daarin de DOM Inspector draaien kunnen we de broncode zonderhapering bekijken. Vervolgens gaan we naar HTML -> BODY -> CENTER -> SCRIPT -> en een paar keernaar beneden. Dit is de broncode:var message1 = "Enter username";var un = prompt (message1,"");var password = "Reeves" ;var message = "Enter password";var incmess = "Incorrect username or password! Access denied!";var minimizemsg = "The window will now minimize to prevent you peeking!"var pw = prompt (message,"");if (un == username) {if (pw != password) {alert (incmess);window.open("../../../../modules.php?op=modload&name=HackQuest&file=challenges","_top")} else {window.open("film.php","_self")}}if (un != username) {alert (incmess);window.open("../../../../modules.php?op=modload&name=HackQuest&file=challenges","_top")}Dat hele gedoe met die HTML Source Code Hide heeft me moe gemaakt; ik heb geen zin om nog naareen wachtwoord te gaan zoeken. We vullen wel gewoon film.php achter de URL. Gaat stukkensneller. De URL wordt dan: http://hackquest.de/modules/HackQuest/hacking/253/film.php. Ziezodeze is af. Vergeet niet Java en JavaScript weer te activeren. - 12 -
  13. 13. Javascript 47. Now, what is that really?Eerst achterhalen we de broncode. Dit doen we op de gebruikelijke manier en hoef ik denk ik nietmeer uit te leggen. Dit is het script:<script language="javascript">function pw (form){ var d1, d2, d3;d1=window.document.bgColor;d2=form.Name.value;d3=form.Password.value; if (d2==d1.length) { if (d3==d1) { window.open (d1.substr(1, 10)+".php","_self") } else { alert("Sorry all wrong.") } } else { alert("Sorry all wrong.") }}</script>Maar er valt me iets op in de regel die ervoor staat:<body bgcolor="secret" topmargin="2" leftmargin="2" marginwidth="2" marginheight="2"text="#FFFFFF" link="#00FFFF" vlink="#FF0000" alink="#00FFFF">Hoe zou de achtergrondkleur secret eruit zien? Er staat toch echt dat de achtergrondkleur secret is.En als we terugkijken: d1=window.document.bgColor; Het heeft dus iets met het wachtwoord temaken. Als we goed kijken geeft hij succes wanneer d2 gelijk is aan de lengte van d1 en als d3 gelijk isaan d1. Stel dat de achtergrondkleur zwart is, dan is de gebruikersnaam 5 en het wachtwoord zwart.Alleen wat is die achtergrondkleur? Het simpelste lijkt mij dat de computer zelf te laten vertellen. Weslaan de pagina op door Dit deelvenster opslaan als… En we openen deze in Notepad++. We halenhet hele script weg en vervangen dat door:<script language="javascript">var d1;d1=window.document.bgColor;alert(d1);</script>Open de pagina en een popup verschijnt met deze tekst: #0ec0e0. Simpel toch? Als we tellen zien wedat het zeven karakters heeft. D2 is dus 7 en d1 is #0ec0e0. Even invullen op de site et voila! - 13 -
  14. 14. Javascript 48. What you mean it’s not THAT easy?Zo te zien hebben we een pincode nodig. Eerst de broncode van het script bekijken:<script type="text/javascript" language="JavaScript"> <!-- Key-code script by Bart Jellema --> var usermulcode=10 var code=0 // the entered code var mul=1 // the multiplied digits var digit=0 // number of digits entered so far var fails=0 // number of tries done function Clear_code() { document.codepad.thecode.value= code=0 mul=1 digit=0 } function Enter_code(number) { code=code*10+number mul=mul*number document.codepad.thecode.value=code digit++ if (digit==4) { if (mul==120) { window.open (code+".php", "_self") } else { fails++ code=0 mul=1 digit=0 if (fails<3) { if(fails==1){ document.codepad.thecode.value="Try again" } if(fails==2){ document.codepad.thecode.value="Last time" } } else { document.codepad.thecode.value="Bye!" } } } } - 14 -
  15. 15. function keycodepad(mulcode) { usermulcode=mulcode document.write("<table><tr><td><form name="codepad">"); document.write("<input type="button" value=" 1 " onClick="Enter_code(1)">"); document.write("<input type="button" value=" 2 " onClick="Enter_code(2)">"); document.write("<input type="button" value=" 3 " onClick="Enter_code(3)">"); document.write("<input type="button" value=" 4 " onClick="Enter_code(4)"><br />"); document.write("<input type="button" value=" 5 " onClick="Enter_code(5)">"); document.write("<input type="button" value=" 6 " onClick="Enter_code(6)">"); document.write("<input type="button" value=" 7 " onClick="Enter_code(7)">"); document.write("<input type="button" value=" 8 " onClick="Enter_code(8)"><br />"); document.write("<input type="button" value=" 9 " onClick="Enter_code(9)">"); document.write("<input type="button" value=" 0 " onClick="Enter_code(0)">"); document.write("<input type="button" value=" C " onClick="Clear_code()"><br />"); document.write("<input type="text" name="thecode" size=9 value=""><br />"); document.write("</form></table>"); } <!-- Key-codescriptbyBartJellema--> </script>Het belangrijkste is natuurlijk kijken wanneer we succes hebben. In dit geval:if (digit==4) { if (mul==120) { window.open (code+".php", "_self") }}Hiervoor zagen we wat mul was. Mul is het product van de ingevoerde data. We hebben vier getallen(digits) nodig die samen 120 worden. Nou, even mijn rekenknobbel activeren: 120/2=60 60/3=2020/4=5 5/5=1. En omgekeerd 1*2=2 2*3=6 6*4=24 24*5=120. Waren al die wiskundeproefwerkenmaar even makkelijk. We vullen (in willekeurige volgorde) 2, 3, 4 en 5 in en we zijn binnen. Of tochniet. Het blijkt dat er slechts één code werkt. En omdat je niet kunt zien welke het is, moeten wevoor de code bruteforce gebruiken. We moeten alle mogelijkheden uitproberen (of tenminste tot ereentje werkt). Er zijn 36 mogelijkheden om 120 te krijgen, namelijk: 2256 - 2265 - 2345 - 2354 - 2435- 2453 - 2526 - 2534 - 2543 - 2562 - 2625 - 2652 - 3245 - 3254 - 3425 - 3452 - 3524 - 3542 - 4235 -4253 - 4325 - 4352 - 4523 - 4532 - 5226 - 5234 - 5243 - 5262 - 5324 - 5342 - 5423 - 5432 - 5622 - 6225- 6252 - 6522. Het simpelste is om ze maar gewoon uit te proberen, dit kost je 5 minuten, maar danmerk je dat de echte code 3542 is. - 15 -
  16. 16. Javascript 49. Jedi mindtricksHier zien we dat de bron op een bepaalde manier gecodeerd is. Om de bron te zien moeten we hemdus decoderen. In dit geval is het een Unescape-codering. Dit decoderen we met het programmaPolyCrypt. Dit programma is hier: http://www.net-force.nl/files/download/polycrypt.zip te vinden.Wanneer we de tekst in het URL-encoding vak zetten en op Decrypt drukken komt er een hele lapcode. Hieronder staat alleen het login-script.<SCRIPT language=Javascript>function PassConfirm() { var y="alphabravocharliedeltae"; var x="lidocaineadrenalineekel"; var z="sidewinderamraamphoenix"; var s = ""; for (Count=0; Count < y.length; Count++) { var t1 = y.substring (Count, Count+1); var t2 = z.substring (Count, Count+1); var t3 = x.substring (Count, Count+1); if (t1 * t2 * t3 >= 5 || t3^t1 >= 3) s=s+t1; else { if (t3 == t2) s=s+t3; if (t2 == t1) s=s+t2; if (t1 == t3) s=s+t3; } } var x=document.LayoutBereich1FORM.Eingabefeld1.value if (x==s) { y = s + ".php" window.open(y,"_self") } else { alert("Dooh, try again!") }}</SCRIPT>Ik heb wederom geen zin om hier lang naar te kijken. We kopiëren de volledige broncode vanPolyCrypt naar Notepad++. Het enige wat we moeten veranderen is if (x==s) { hier staat als x gelijk isaan s kom je binnen. Als we daar nou eens zorgen dat hij ons juist altijd binnen laat, behalve als xgelijk is aan s. We veranderen de == door !=. We slaan het op en openen de pagina in Firefox envullen iets in (zou wel toevallig zijn dat het nou net toch het goede wachtwoord is) en warempel, erkomt iets bij de URL te staan. Dit zetten we ook achter de URL op de online pagina, die wordt dan:http://hackquest.de/modules/HackQuest/hacking/916/ideaee.php en daar komt wat tevoorschijn. - 16 -
  17. 17. Javascript 50. Security through obscuration!Nou wordt het interessant. Dit ziet er al een stuk lastiger uit. Toch vind ik de slechtste tot nu toe. Ditheeft eigenlijk niets met security te maken omdat dit gewoon niet realistisch is. Ik zou het maargewoon vertellen: open dit keer niet meteen alles in een aparte pagina, maar klik rechts op deblauwe balk. Open hiervan de bron met Deelvensterbron bekijken. Er staat ergens: <ahref="welldone.php">. Zet dit achter de URL, je krijgt:http://hackquest.de/modules/HackQuest/hacking/724/welldone.php. Dus... - 17 -
  18. 18. Javascript 51. Ok, finally its secure. Or?Wederom een beetje een slechte quest. Als we de code tevoorschijn halen, is deze behoorlijkingewikkeld. Je kunt dat helemaal gaan decoderen, maar als je goed kijkt valt je iets op. Een normaleURL op Hackquest ziet er zo uit: http://hackquest.de/modules/HackQuest/hacking/164/164.php.Maar de URL van deze specifieke quest zo:http://hackquest.de/modules/HackQuest/hacking/274/octodron/274.php. Er staat dus nog wattussen. Als we nou dat laatste (274.php) weghalen komen we op een index. De rest spreekt voor zich,klik op de onderste link (ClickThisHiddenFile.php) en je bent binnen. - 18 -
  19. 19. Javascript 52. Please don’t let me forget it.En alweer een beetje een rare. Ik denk dat je over deze quests ook uren kunt nadenken hoe zewerken en hoe je ze “eigenlijk” moet oplossen, maar wij doen het op de snelle manier. Als we hetscript bekijken zien we dit:<SCRIPT LANGUAGE="JavaScript">function testEncode(form) { var dater = new Date(); Day = dater.getDate(); dater = null; var Ret = encode (form.inputbox1.value, Day) location = Ret + ".php"}function encode (OrigString, CipherVal) { Ref="0123456789abcdefghijklmnopqrstuvwxyz._~ABCDEFGHIJKLMNOPQRSTUVWXYZ" CipherVal = parseInt(CipherVal) var Temp="" for (Count=0; Count < OrigString.length; Count++) { var TempChar = OrigString.substring (Count, Count+1) var Conv = cton(TempChar) var Cipher=Conv^CipherVal Cipher=ntoc(Cipher) Temp += Cipher } return (Temp)}function cton (Char) { return (Ref.indexOf(Char));}function ntoc (Val) { return (Ref.substring(Val, Val+1))}</SCRIPT>Het heeft dus iets met de dag te maken. “Toevallig” staat er ook op de pagina: last edited05.02.2008. Als we nou eens de computerklok terugzetten naar 5 februari 2008 (Javascript is eenclient-side taal, het script kijkt dus naar de computerklok en niet naar de klok van de server). Als datgebeurt is vullen we het andere opvallende in, namelijk HackKing. En dan zijn we binnen. Vergeetniet de datum weer goed te zetten! - 19 -
  20. 20. Javascript 53. Amazing codeWe zijn er bijna doorheen. Maar eerst deze nog. We openen alles in een deelvenster en bekijken debron. Nou is er iets opvallend:<script src="www.hackquest.de/modules/HackQuest/hacking/475/stylesheet.css" />Een .css is namelijk een stylesheet en zeker geen script, toch wordt hij zo benoemd. Een tweede dingdat me opvalt is: <base target="_self">. Bij alle andere challenges is dit namelijk <basetarget="_parent">. Dit zorgt ervoor dat de bovenstaande URL niet de volledige URL is, maar achterde bestaande moet komen. Dus om het .css bestand te bekijken gaan we naar:http://www.hackquest.de/modules/HackQuest/hacking/475/www.hackquest.de/modules/HackQuest/hacking/475/stylesheet.css. Daar vinden we deze code:function checkEntry(form) { var cryptpass = "Bbkwho"; var cryptpass2 = "x67x6Cx71x42x6Ex6Ax65x57"; var cryptpass3 = "156154162157151145157123166155"; var challpass = ""; var challpass2 = ""; var challpass3 = ""; for (i=0;i<=5;i++) { cryptchar = cryptpass.charCodeAt(i); cryptchar2 = cryptpass2.charCodeAt(i); if (i%2) { cryptchar--; cryptchar2++; cryptchar2++; } else { cryptchar++; cryptchar2--; cryptchar2--; } challpass = challpass + String.fromCharCode(cryptchar); challpass2 = String.fromCharCode(cryptchar2) + challpass2; } challpass2 = cryptpass2.charAt(7) + cryptpass2.charAt(6) + challpass2; for (i=1;i<=10;i++) { j = (7*i)%10; challpass3 = challpass3 + cryptpass3.charAt(j); } if ((form.pass.value === challpass) || (form.pass.value === challpass2) || (form.pass.value ===challpass3)) { window.open(form.pass.value+ ".php","_self"); } else { window.open("denied.php?Pass=" + form.pass.value,"_self"); }} - 20 -
  21. 21. Nou moeten we die drie variabelen eruit halen: challpass, challpass2 & challpass3. Deze zijn nietafhankelijk van de input. Dus als we het script gaan omschrijven, zou die gegeven moeten worden.We maken er dit van:<html><head></head><body><script type="text/javascript">var cryptpass = "Bbkwho";var cryptpass2 = "x67x6Cx71x42x6Ex6Ax65x57";var cryptpass3 = "156154162157151145157123166155";var challpass = "";var challpass2 = "";var challpass3 = "";for (i=0;i<=5;i++) { cryptchar = cryptpass.charCodeAt(i); cryptchar2 = cryptpass2.charCodeAt(i); if (i%2) { cryptchar--; cryptchar2++; cryptchar2++; } else { cryptchar++; cryptchar2--; cryptchar2--; } challpass = challpass + String.fromCharCode(cryptchar); challpass2 = String.fromCharCode(cryptchar2) + challpass2;}challpass2 = cryptpass2.charAt(7) + cryptpass2.charAt(6) + challpass2;for (i=1;i<=10;i++) { j = (7*i)%10; challpass3 = challpass3 + cryptpass3.charAt(j);}alert(challpass+ | +challpass2+ | +challpass3);</script></body></html>Hieruit alert hij drie dingen: Calvin, WellDone & Silvermoon. Alle drie doen ze eigenlijk niets wanneerje ze invult. Maar als we het derde in de URL invoeren, wordt het :http://hackquest.de/modules/HackQuest/hacking/475/Silvermoon.php. Dit lijkt bijna exact op defoutmelding die we krijgen wanneer we gewoon maar wat invullen (bijvoorbeeld ../ 475/iets.php).Toch verandert er één letter: de T. Als we naar de bron kijken zien we dit: - 21 -
  22. 22. </script><link rel="stylesheet" type="text/css" href="check.css" /><script type="text/javascript" language="javascript">function getQueryVariable(variable) { var query = window.location.search.substring(1); var vars = query.split("&"); for (var i=0;i<vars.length;i++) { var pair = vars[i].split("="); if (pair[0] == variable) { return pair[1]; } } return "Silvermoon";}</script>Daar staat weer een vermelding naar zo’n nep stylesheet. Als we die openen krijgen we dit:a:link { color:#000000; text-decoration:none; cursor:text }a:visited { color:#000000; text-decoration:none; cursor:text }a:hover { color:#000000; text-decoration:none; cursor:text }a:active { color:#000000; text-decoration:none; cursor:text }a:focus { color:#000000; text-decoration:none; cursor:text }Er gebeurt dus iets als je over de link gaat. Als je even over de pagina gaat, merk je dat de cursorverandert als je over de middelste zin heen gaat. Even klikken en je bent binnen. - 22 -
  23. 23. Javascript 54. Society mattersPoeh hé, dit is me een script. Het gebruikt een wiskundig algoritme om een link weer te geven.Hiervoor gebruikt hij het opgegeven wachtwoord. Dit wordt een heleboel rekenen dus, alleen is dehint me iets te duidelijk. We weten dat het om een zin (Passphrase) gaat. En met een beetjegeschiedenisles weet je dat de piramide met het oog erin voor het oog van God staat. Een plek waardat teken ook op staat is de Amerikaanse dollar. Laten we die er eens bijpakken:En laat er nou nét een zin onder de piramide staan: Novus Ordo Seclorum… Dit is een mooi voorbeeldvan social engineering. De zwakste schakel in deze challenge was de mens met haar (te) voor de handliggende wachtwoord. - 23 -
  24. 24. Javascript 55. The password is regular!De op-één-na-laatste en de tot-nu-toe moeilijkste. De bron ophalen is geen probleem en ik denk nietdat hier gemene truckjes worden gebruikt. We gaan het script regel voor regel analyseren.<script type="text/javascript" language="Javascript">function PassConfirm() { var chk = false; var x=document.myform.input1.valueEerst wordt de variabele chk aangemaakt, waarschijnlijk afgeleid van het woord check (controleer).Het staat op false (negatief) omdat het wachtwoord nog niet gecheckt is. Var x is hetgeen wat hij uithet wachtwoordveld ophaalt. Tot nu toe niets moeilijks. Nou wordt er gebruik gemaakt van regularexpressions.var re = new RegExp(".*[a-z]{2}[ ].*[d-i](?=.*)");var m = re.exec(x);if (m != null) { re = new RegExp(".*[G-Z].*[A-Z].+[f-s](?=.*)"); m = re.exec(m[0]);Een regular expressions is een manier om patronen te beschrijven waarmee een computer tekst kanherkennen. Je stelt er als het ware voorwaardes mee op. In het begin wordt var re aangemaakt. Datis de expressie: .*[a-z]{2}[ ].*[d-i. Vervolgens wordt gekeken of het ingevoerde wachtwoord aan dievoorwaardes voldoet. In dit geval staat de .* voor een teken dat een x aantal keer voorkomt. Gevolgddoor een teken dat twee keer voorkomt en binnen de alfabetische reeks van a tot en met z valt,enzovoort. Wanneer de variabele aan die voorwaardes voldoet, gaat hij naar de volgende expressie.Dit gaat zo door tot de 15e expressie, dan zet hij er .php achter en opent hij deze URL. Eerst makenwe een mooie lijst van alle regulieren expressies. Op de pagina eronder staat een lijst met debeschrijvingen van alle tekens.<script type="text/javascript" language="Javascript">.*[a-z]{2}[ ].*[d-i](?=.*).*[G-Z].*[A-Z].+[f-s](?=.*)([^XazhY]|[^ijkW]).+[W][A-Z].+[^i](?=.*)([^Xa-ehY]|[^f-zW]).+[W][A-Z].+[^f](?=.*)([Zdf]|[pass]).+[s][D]+([^spa])w+[ ].*[n-o][sigma]([^f-iK-L]).*[^alamo][e-g].*([^76]|[^A-Za]).*[^a-z][^x]{3}([^2]|[^D-Za]|[D-Ze-f]){2}[b-r].*[^a-z][A-Bhijk].*([^2]|[^D-Za]|[D-Ze-f]){2}[^b-q].*[ ].*[^klmadj][^dkdcewl]{2}.[3djes]([byxprln]).*[ ].*[^BhA][^dkdcewl]{2}.*([m-r])[gDaSod].*s.*[g-n]*([A]|[^A])*[amzrbrqw][^A-Za-dg]s[^A-V]+[g-n].*[^d ] w+ [ ] [^XYZ ] w + [^ghijklm ] .{1}.*e.*</script> - 24 -
  25. 25. Teken BeschrijvingNormaal teken Het opgegeven teken zelf wordt gezocht[...] Een van de tekens moet worden gevonden[^...] Een teken dat niet tussen de haakjes voorkomt[A-Z] Een teken van A tot Z(...) Een bereik waarmee je tekens groepeert? Het voorafgaande teken of bereik is optioneel+ Het voorafgaande teken of bereik moet een of meerdere keren voorkomen* Het voorafgaande teken of bereik kan een willekeurig aantal keren of helemaal niet voorkomen{n,m} Het voorafgaande teken of bereik moet n en hoogstens m keer gevonden worden| Onderscheid tussen verschillende mogelijkheden^ Caret: het begin van de tekenreeks$ Dollar: het einde van de tekenreeks : een backslash /: een slash w: een word karakter: [a-zA-Z0-9_] W: geen word karakter: [^a-zA-Z0-9_] d: digit - een cijfer [0-9] D: geen cijfer [^0-9] n: regelterugloop t: tabsprong b: woordgrens B: geen woordgrensAls we het analyseren merken we uit deze expressie: .*e.* dat er ergens een e in staat, en dat deze eniet op de eerste en laatste plaats komt. In ([Zdf]|[pass]) en ([^2]|[^D-Za]|[D-Ze-f]){2} zien we dathet wachtwoord met een Z, d, f, p, a, s, e of een letter tussen de D en Z begint. Maar door ([^spa]),[^d ] en door ([^f-iK-L]) vallen de s, p, d, a, f en de K tot en met de L af. Wat we dan over houden zijnde D tot en met de J en de M tot en met de Z. Op deze manier zou je de challenge moeten oplossen.Dit is me tot op heden nog niet gelukt. Wel weet ik dus dat er een e in zit en dat het op ng eindigt.Een andere tip is dat het een “geek”-woord is… Veel succes. - 25 -
  26. 26. Extra informatieAls je meer wilt weten over hacken en gerelateerde onderwerpen kun je dat hier doen:http://www.hackquest.deDe site waar het hier om draait. Er staan challenges op waarbij je door het hacken van “puzzels”meer leert.http://www.net-force.nlEen challenge site (net als HackQuest), er staan goede gidsen in de library.http://www.security.nlBlijf up-to-date over wat er in security-land gebeurt.http://hacks.mit.eduDe eerste “hacks” van MIT.http://www.remote-exploit.org/backtrack_download.htmlDé Linux-distro voor hackers en pen-testers.http://www.w3schools.comLeer elke gangbare internettaal.http://www.ict.teno.be/oostende/vdabrefs/jsvdab/jsNaslag_Regexp.aspEen goede gids in regular expressions.http://www.ivobrugge.be/cursuswebEen site met veel online cursussen.http://www.google.nlGoogle is a hacker’s best friend.http://www.rickdriessen.euDe mooiste website ooit! - 26 -
  27. 27. Als extra opdracht hebben we (ik en Idzard Stoker) geprobeerd een server op te zetten. Op devolgende pagina’s volgt een kort verslag. - 27 -
  28. 28. DebianWe kregen een lege bestandsserver. Het doel was om deze volledig bereikbaar te maken envervolgens te beveiligen. Hiervoor hadden we eerst een besturingssysteem nodig. Na meerdere(gratis) besturingssystemen te hebben vergeleken, kwamen we uit op Debian. Debian is een gratisdistributie van Linux. Het staat bekent om zijn stabiliteit en veiligheid. Debian wordt standaard algeleverd met een behoorlijk aantal programma’s, dit is ook de reden dat wij voor deze distributiehebben gekozen. Omdat we allebei nog niet zo veel ervaring met Linux hadden werden we ervanverzekerd ook niet zo veel te hoeven instaleren.Het installeren van Debian is niet lastig. We downloaden een bestand(http://cdimage.debian.org/debian-cd/5.0.0/i386/iso-cd/debian-500-i386-netinst.iso) en ditbrandden we op een CD-ROM. Deze versie bevat niet het gehele besturingssysteem, maar eenprogramma dat ervoor zorgt dat de rest vanzelf gedownload wordt. Dit scheelt een hoop tijd, wanthij downloadt en installeert het OS op deze manier tegelijk. Wanneer we de CD in de computerstoppen en hem aanzetten doorlopen we een simpel installatiemenu, vervolgens installeert hij allesen kunnen we Debian gebruiken.Het eerste waar we tegenaan liepen was het gemis van Firefox. Normaal kun je dit gewoon viapakketten instaleren, maar dit lukte niet. Toen we een CD met Windows Server 2003 aangebodenkregen zijn we daar zonder te twijfelen op overgestapt.Windows Server 2003Het installeren van Windows is gemakkelijker dan dat van Debian. Windows is vaker gevisualiseerddan een Linux OS (dit vooral omdat er vele miljoenen dollars in gepompt zijn). Na wat updates enprogramma’s als Firefox te hebben geïnstalleerd (hier lukt het wel!), hebben we Wamp geïnstalleerd.Wamp (www.wampserver.com) is een server die Apache, PHP en MySQL ondersteunt. Als we eensite (HTML-bestand) in de aangewezen map zetten, kun je die site bekijken op localhost: 127.0.0.1.Wanneer we dan het IP van de server (194.123.50.2) op een andere PC invullen, gaat hij automatischnaar die site. We hebben dus een internetsite!Vervolgens instaleren we een FTP server. We downloaden FileZilla (www.filezilla-project.org) endaarvan de server-versie. Het installeren is niet moeilijk: gewoon de aanwijzingen volgen. Vervolgenszijn de poorten 20 en 21 in de router opengezet. We maken een account aan en geven het rechten.Als beveiliging stellen we in dat na tien mislukte pogingen het account voor een uur geblokkeerdblijft. Op deze manier zijn brute force-aanvallen nutteloos. Nu kunnen we ook naar de server FTP’en. Linux Vs. Windows - 28 -
  29. 29. - 29 -
  30. 30. LogboekBij dit verslag zit geen logboek waarin staat wat ik wanneer gedaan heb en hoelang ik daarovergedaan heb. Ik was namelijk al op HackQuest (en de soortgelijke site netforce.nl) actief voordat ikecht met de opdracht begon. Ik weet wel zeker dat ik meer dan de toegewezen studielasturen hebgemaakt. Ook heb ik niet elke behaalde challenge besproken. Dit, omdat ik soms al vergeten was hoeik hem opgelost had voordat ik aan deze opdracht was begonnen. Hoe dan ook waren het er toch teveel om te documenteren (62 op dit moment).ResultaatUiteindelijk heb ik een hoop geleerd. Echt het hacken van computers niet, maar wel een hoop overJavascript en algemene computerdingen. Zo weet ik wat meer over reguliere expressie,over aantalencryptie-protocolen en hoe je een server moet opzetten. Wel merk ik hoe frustrerend het soms isom met computers te werken. Vooral bij het hacken, wat eigenlijk puzzels zijn, kan het antwoordsoms in enkele minuten zijn gevonden, maar soms heb ik meer dan vijf uur naar de oplossinggezocht. Ook heeft het configureren van de server (met name de DNS gegevens en de firewall) veeltijd gekost.Momenteel heb ik bij HackQuest 30 hacks opgelost. En bij Net-Force 32. Waarschijnlijk worden dit erin de loop van de tijd nog wel meer. Mijn voortgang kun je volgen ophttp://hackquest.de/user.php?op=userinfo&uname=Big-R (voor HackQuest) en op http://www.net-force.nl/members/view/13254/ (voor Net-Force).Ik wil ook nog wel wat met de server mee“spelen”. Ik wil vooral kijken of ik er, via FTP, een gameserver van kan maken en er het ouderwetsespel Ravenshiel Rainbow 6 op kan draaien.Wat ik wel mis bij deze opdracht, is toch wat extra begeleiding. Ik weet dat dit vaker niet mogelijkwas, je moet namelijk veel verstand van Javascript hebben om al die challenges op te lossen. En ookwas het jammer dat het zo lang duurde voor we alle DNS gegeven hadden. Al met al ben ik ergtevreden over hetgeen ik bereikt en geleerd heb. Mijn kennis over computers is door de jaren heenflink vergroot. - 30 -
  31. 31. - 31 -

×