Eerste hulp bij hacken. Doe het op de command line
Met twintig Correspondentlezers leer ik hacken. Jij kunt ook meedoen. In dit eerste stuk: vier redenen waarom ook jij een stuk gereedschap, dat in de krochten van je computer schuilt, moet afstoffen en gebruiken.
Met twintig Correspondentlezers ga ik leren hacken. Les 1 is grip krijgen op de command line, het zwarte vlak met een prompt (vaak een $-teken) dat je om instructies vraagt. Jij bent nu aan zet. Toets een commando in. Jij bent nu de baas. Maar waar begin je? Wat moet je de computer in godesnaam vertellen?
De wat oudere lezer zal de command line nog hebben gebruikt op zijn personal computer of Mac. Het was de enige manier om met je computer te communiceren. Kopiëren, programma’s opstarten, een editor gebruiken, het internet op: het moest allemaal via commando’s achter het prompt Totdat Apple met de MacIntosh (1984) en Microsoft met Windows 95 (juist, uit 1995) de command line onder het digitale tapijt veegden. Sindsdien praten we met onze computer door middel van een Graphical User Interface (GUI), met plaatjes, vensters, knoppen en menu’s.
Desondanks is de command line nog springlevend. De belangrijkste besturingssystemen van nu zijn namelijk niet Mac OS of Windows, maar de afgeleide systemen van het legendarische Unix. Dat werd eind jaren zestig, begin jaren zeventig ontworpen door Bell Labs. Het was een heel flexibel systeem. Gewapend met je command line kon je er voor die tijd fantastische dingen mee doen. In de jaren zeventig en tachtig bouwden hackers Unix-achtige systemen die later zouden uitmonden in bijvoorbeeld Linux, een besturingssysteem waar een groot deel van het internet op draait (en ook je smartphone). Al die nieuwe, veelgebruikte systemen dragen het Unix-DNA in zich. En ook de command line.
Daarom was René Krewinkel - cartoonist, maar ook al ruim twintig jaar systeemarchitect en Unix-gebruiker - vorige week op de redactie. Hij weet alles van de command line en volgens hem doet ‘een echte hacker het op de command line.’ Hij wilde ons een grondige introductie geven.
Maar ook voor de niet-hacker zijn er vier goede redenen om je mouwen op te stropen, een terminal te openen en code te gaan rammen.
1. Je kunt programma’s combineren (en veel sneller werken)
Maar eerst: wat GUI’s en command lines gemeen hebben. Beide systemen zijn gebouwd op een zogenoemde shell. Die shell krijgt commando’s van de GUI (klikken op een knop) en de command line (tekst en tekens), interpreteert die en stuurt ze naar het besturingssysteem dat die commando’s uitvoert.
Het verschil zit hem erin dat in een GUI de commando’s zijn voorgeprogrammeerd. Er zijn echter veel meer commando’s mogelijk. Commando’s waar je de command line voor kunt gebruiken.
Stel je wilt een lijstje bestanden inzien die in een computermap zit. In een GUI druk je op de betreffende map en krijg je een overzicht van wat erin zit. Als je meer wilt weten, kun je in het menu selecteren hoe je het overzicht gepresenteerd wilt zien. In de command line toets je ‘ls’ in, gevolgd door een optie. En daar begint de pret. Op de man page, de handleiding, staan tientallen opties opgesomd.
Daarnaast werken de meeste programma’s in de GUI zelfstandig, je werkt in één tegelijk. Als je in een ander programma wilt werken, moet je van venster wisselen. In de command line kun je programma’s laten samenwerken, een soort ketting maken van programma’s waar je data doorheen kan pompen.
Laat ik een voorbeeld geven.
Ik ben bezig met een project over de escortmarkt in Nederland. Er is een aantal websites waarop escortservices hun diensten aanbieden. Die sites heb ik gescrapet, waardoor ik per site een bestand van dames en heren heb die zich aanbieden, wat hun werkgebied is, hoeveel ze vragen, wat ze voor dat geld doen, et cetera. Uit die bestanden wil ik een overzicht halen van mannen en vrouwen die in Amsterdam werken en Nederlands spreken. Via de GUI (in dit geval Microsoft Excel) moet ik alle bestanden openen, gaan filteren, sorteren, knippen en plakken. Dat kost me ongeveer een kwartier. In de command line typ ik dit in:
egrep “Amsterdam|amsterdam” * | grep “Nederlands” > amsterdam.txt
En als ik de resultaten vervolgens tóch in Excel wil zien, voeg ik dit toe:
open amsterdam.txt -a “Microsoft Excel”
Binnen tien seconden ben ik klaar.
Met deze commando’s heb ik dit gedaan:
- egrep: Zoek naar ‘Amsterdam’ of ‘amsterdam’ (voor het geval de stad niet met een hoofdletter is geschreven).
- *: Zoek door alle bestanden in de folder waar ik nu in zit.
- | grep: Zoek in de output van de vorige zoektocht naar ‘Nederlands.’
- >: Stop die nieuwe output in een nieuw tekstbestand dat ‘amsterdam’ heet.
- open: Open dat tekstbestand.
- En doe dat met de applicatie Microsoft Excel.
2. Je kunt op andere computers inloggen (en dus ook hacken)
Ook voor het hacken is de command line onontbeerlijk. Een van de belangrijkste eigenschappen van de command line is namelijk dat je hem kunt gebruiken om op andere computers in een netwerk in te loggen. Wel zo handig als je een computer wilt overnemen.
Via de command line kun je ook informatie verzamelen over je doelwit. Je kunt makkelijk het ip-adres van een server achterhalen die je wilt aanvallen, plus de administratieve informatie (wie de site heeft geregistreerd bijvoorbeeld). Je kunt ook met behulp van ‘traceroute’ nagaan hoe het verkeer van jouw computer over internet wordt geleid. Je ziet precies welke servers jouw data doorsturen. Zodoende kun je, met een beetje mazzel, zien waar de firewall staat, een belangrijke beschermlaag rond een computer. Met het commando ‘nmap’ kun je uitvogelen welke poorten van een computer openstaan en welke software en versies daarvan de server draait, zodat je kunt zien waar mogelijke kwetsbaarheden zitten. Je kunt andere programma’s aanroepen om die kwetsbaarheden verder te verkennen.
Dat allemaal door het intikken van commando’s. In een latere aflevering van deze serie kom ik hier nog uitgebreid op terug.
Eitje toch?
3. De pure ervaring
Het is een sentiment dat ik vaak hoor van doorgewinterde techneuten en zelf ook ervaar sinds ik intensief met de command line werk: het gevoel dat je echt met je computer bezig bent. Dat je alle krochten van je machine leert kennen. Bijvoorbeeld omdat je zelf een aantal commando’s achter elkaar moet plakken (‘pipen’) om een gewenste output te krijgen.
Nog kritiekpunten? Ja. De command line biedt veel mogelijkheden, maar is ook nodeloos ingewikkeld. Krewinkel: ‘Als je een programmeurachtergrond hebt, werken sommige programma’s wel intuïtief, maar voor een leek zijn ze moeilijk te doorgronden.’ Hij noemt het voorbeeld van vi, een oude, doch populaire editor waarin je de code van bestanden kunt aanpassen. ‘Vi staat voor visual editor, maar er is niks visueels aan te ontdekken. De navigatie is zodoende erg lastig.’
Krewinkel ziet kortom veel ruimte voor verbetering. Een helder overzicht van commando’s bijvoorbeeld. Of dat je wat meer fouten mag maken, want één verkeerde toetsaanslag en je prachtig geformuleerde commando is naar de filistijnen.
Maar, zo geeft Krewinkel ook toe, de command line geeft wél het gevoel alsof je een ambacht uitoefent. ‘Met een grafische interface [zoals GUI, DT] concentreer je je niet op de processen in je computer.’
Tijdens de workshop zal hij geregeld zeggen dat je geen echte vent/hacker/programmeur bent als je niet op de command line werkt. ‘Dat maakt je overigens geen minder mens,’ voegt hij er toch maar aan toe.
4. Van fouten kun je leren
Intensief gebruik van de command line heeft mij een paradoxale les geleerd. Je computer is ontzagwekkend krachtig, maar het is niet nodig er ontzag voor te hebben. Het is niet altijd even logisch wat er zich in het binnenste van je computer afspeelt, maar het is wel degelijk te begrijpen.
Dat kan het best met de command line. Je moet zó precies zijn, dat je waarschijnlijk in het begin veel fouten maakt. Maar juist van die fouten kun je leren. Je zal zélf op zoek moeten naar een uitweg. Fora afstruinen, handleidingen doorlezen. Het zijn juist die momenten dat kwartjes vallen en de computerlogica zich langzaam onthult.
En dat is de derde en misschien wel beste reden om met de command line aan de slag te gaan: je leert er in korte tijd waanzinnig veel van.
Het gebruik van de command line is als rijden zonder TomTom. Als je altijd op de TomTom vertrouwt, leer je de weg nooit goed kennen. Of je kent alleen de weg die je altijd rijdt en niet de alternatieve wegen die je had kunnen nemen, maar die soms mooier of efficiënter zijn. Soms moet je het gemak even loslaten, de TomTom uitzetten en durven verdwalen. De volgende keer vind je dan zelf je weg. En wie weet wat voor moois je allemaal tegenkomt.
Strips door Rob van Barneveld.