Mutillidae vulnerable website
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
Links
Reageer via E-mail (dalmolen@xs4all.nl)
Deze pagina is voor het laatst gewijzigd op: 03-02-23 21:16:52