KB » Computer » Mutillidae vulnerable website

Mutillidae vulnerable website

    Tweeten

Introductie

Mutillidae is een expres kwetsbaar gemaakte website, die ook onderdeel uitmaakt van de virtuele Linux machine Metasploitable (2).

1 van de 1e dingen die je moet doen is het registreren van een gebruiker. Als je gebruikt maakt van Mutillidae als onderdeel van Metasploitable 2 krijg je daarbij met een foutje te maken. Maar dat is simpel te verhelpen.


Inloggen

Security level 0

Als je webadressen ziet in de vorm van http://target.com/page.php?something=something zou een site kwetsbaar kunnen zijn voor SQL injection. Probeer zo'n site te kraken door creatief gebruik van single quote, 'and', 'order by', etc.

Ga als vbd. naar de login page van Mutillidae. Registreer eerst, en probeer dan opnieuw in te loggen, met je normale userid en als password een single quote. Je krijgt dan een uitgebreide foutmelding. O.a. krijg je gedane query te zien.

Pas nu de query aan, zodat je als wachtwoord invult:
password' and 1=1 #
Je vult je echte password in, en sluit het zelf af met een single quote. Daarna kan je doorgaan met het statement, maar omdat het systeem aan het eind nog steeds een quote plaatst, moet je die onschadelijk maken met het commentaarteken ('#').

Als het voorgaande lukt, dan weet je dus dat de site gevoelig is voor dit type SQL injection. Je kan dan gebruiker admin gebruiken, en het password vervangen door:
xxxx' or 1=1 #
xxxx is random gekozen, en door de OR is de conditie nu per definitie waar, en kom je in het systeem als admin.

Maar het kan nog simpeler, nl. inloggen zonder password. Je vervangt in dit geval de inhoud van het userid-veld door
admin' #, en zet iets willekeurigs in het password-veld.

Security level 1

Bovenstaande simpele injections lukken niet meer op level 1. Je krijgt dan de melding 'illegal characters detected'.

De filtering op dangerous characters kan gebeuren aan de client side of aan de server side. In het 1e geval kan je het met BurpSuite makkelijk omzeilen. Je kan met dit programma sowieso detecteren waar de filtering gebeurt.

Packets komen binnen op het Raw tabblad van het Intercept-tabblad. Met Forward kan je ze doorsturen naar de server.

Het blijkt dat een login met SQL-injection en het hash-teken Burp niet eens bereikt, dus filtering aan client side (door Javascript-code). Dus voeg je de gevaarlijke tekens pas toe in Burp, nadat je eerst op een normale manier inlogt.

Je kan bv. inloggen met admin en een willekeurig password. De cruciale regel staat nu onderaan in het raw packet. Op het tabblad Params ga je het password vervangen door wat je bij de SQL injection gebruikte, en klaar is kees (klik 2x op Forward en je bent ingelogd als admin).

Security level 5

Op security niveau 5 worden in het SQL-statement alle quotes e.d. uit de user input gehaald.


A1 - SQL injection

SQLi - Extract Data

User Info

In dit geval kan je de injectie ook via de URL doen. Je gaat de waarde van de user veranderen. Er zijn ook sites waar niet eens een loginnaam en password-veld zijn, maar met bv. een URL in de vorm news.php?id=2

I.p.v. met AND, OR e.d. te werken, ga je het hier proberen met ORDER BY. Dus als je als user name Henk hebt opgegeven, verander je dat in Henk' order by 1 # (je weet zeker dat er minimaal 1 record is, dus er moet iets getoond worden). Order by 1 betekent dat er op de 1e kolom gesorteerd wordt.

Er zijn nu 2 mogelijkheden: je plakt de nieuwe waarde in het user-veld, of je plakt hem in de URL. In het laatste geval moet je wel het hash-teken vervangen door %23. Je kan dit evt. ook automatisch laten doen (zoek met Google naar HTTP encoder).

Als je een groter nummer invoert in de ORDER BY clause, en je krijgt een error (iets van 'unknown column'), dan weet je dat de query uitgevoerd wordt.

Als ORDER BY 5 geen fout geeft, en ORDER BY 6 wel, weet je dat er 5 kolommen in de tabel zitten. Je kan dan de username vervangen door Henk' union select 1,2,3,4,5 #. Je krijgt als uitvoer de gegevens van Henk, en dan nog 3 regels met:

Username=2 Password=3 Signature=4

Wat je dus op de plek van 2, 3 en 4 zet wordt letterlijk weergegeven. Je kan er ook waardes als user() neerzetten. Henk' union select 1,database(),user(),version(),5 #
Je krijgt dan als database owasp10 terug.

Hier wordt de volgende waarde ingevuld: Henk' union select 1,table_name,null,null,5 from information_schema.tables #

En dan: Henk' union select 1,table_name,null,null,5 from information_schema.tables where table_schema = 'owasp10' #

Nu wil je de kolomnamen van de tabel accounts weten: Henk' union select 1,column_name,null,null,5 from information_schema.columns where table_name = 'accounts' #

Je kan niets invullen voor veld 1 en 5 in de queries, omdat die niet op het scherm weergegeven worden.

Henk' union select 1,username,password,is_admin,5 from accounts #

SQLi - Bypass Authentication

Login

SQLi - Insert Injection

Register

Blind SQL via Timing

Login

User Info

SQLMAP Practice Target

View Someones Blog

User Info

HTML Injection (HTMLi)

Add to your blog

HTMLi via HTTP Headers

Site Footer

HTTP Response Splitting (Hint: Difficult)

HTMLi via DOM Injection

HTML5 Storage

HTMLi via Cookie Injection

Capture Data Page

Command Injection

DNS Lookup

JavaScript Injection

Those "Back" Buttons

Password Generator

HTTP Parameter Pollution

Poll Question



    Tweeten

© Henk Dalmolen
Reageer via E-mail (dalmolen@xs4all.nl)

Deze pagina is voor het laatst gewijzigd op: 03-02-23 21:16:52