Beste mensen, ik zit met het volgende probleem:
Voor een opdracht van school heb in een virtuele omgeving een server (Windows 2000, IIS en SQL MYSQL server) en een client (XP pro). Nu moeten wij vanaf de client de server via een inlog script binnen gaan en vervolgens een 'spook order' plaatsen. Dit alles moet via SQL injection gebeuren.
Op voorhand wil ik even vermelden dat ik geen ervaring heb met MYSQL of met PHP, deze opdracht is uit het kader van algemene beveiliging.
Inloggen middels SQL injection is simpel, daarvoor gebruik ik de volgende string:
De volgende stap is dus er achter komen welke tabellen er in de database zitten waar we zojuist zijn ingelogd. Direct op de MYSQL database zou ik dat doen met:
Als ik dit echter simpel weg achter mijn inlog string plak, krijg ik geen output. Ik krijg de melding dat ik succesvol ben ingelogd en verder niets. Nu dacht ik dit te kunnen oplossen met de volgende string:
Helaas werkt dit ook niet. Zodra er zich ergens in de string het $ teken bevind, krijg ik een fout melding. Van de laatste string heb ik verschillende versies geprobeerd. Helaas werkt geen van alle:
Omdat ik niet voorbij dit punt kwam heb ik min of meer vals gespeeld door direct op de VM server in te loggen en via phpMyAdmin de naam van de table te weten ben gekomen. Nu kon ik vrij gemakkelijk een 'spook order' plaatsen met de volgende string:
tblname staat voor de naam van de table. De x-en staan voor het aantal columns in de table. Om achter de column naam te komen verhoog ik het aantal karakters tot over de maximaal toegestane waarde per column en in de error die volgt krijg ik precies te zien hoe de column heet. Herhaal deze stappen en je weet precies hoe deze table er uitziet.
Helaas werd deze manier niet echt gewaardeerd door mijn begeleider, hij deelde ons mee dat het wel mogelijk moest zijn om via SQL injection de table namen te voorschijn te toveren.
Mijn directe vraag is dan ook, is hier iemand die deze methode kent en wilt delen? zou iemand mij hierbij willen ondersteunen? Ik ben namelijk al heel wat uren kwijt met het opzoeken en testen van de reeds geprobeerde methode. Bij voorbaat dank.
/btw, als het topic verkeerd staat mijn excuus.
Voor een opdracht van school heb in een virtuele omgeving een server (Windows 2000, IIS en SQL MYSQL server) en een client (XP pro). Nu moeten wij vanaf de client de server via een inlog script binnen gaan en vervolgens een 'spook order' plaatsen. Dit alles moet via SQL injection gebeuren.
Op voorhand wil ik even vermelden dat ik geen ervaring heb met MYSQL of met PHP, deze opdracht is uit het kader van algemene beveiliging.
Inloggen middels SQL injection is simpel, daarvoor gebruik ik de volgende string:
code:
1
| a' or 1=1;# |
De volgende stap is dus er achter komen welke tabellen er in de database zitten waar we zojuist zijn ingelogd. Direct op de MYSQL database zou ik dat doen met:
code:
1
| show tables; |
Als ik dit echter simpel weg achter mijn inlog string plak, krijg ik geen output. Ik krijg de melding dat ik succesvol ben ingelogd en verder niets. Nu dacht ik dit te kunnen oplossen met de volgende string:
code:
1
| a' or 1=1; $tbl = show tables; echo $tbl;# |
Helaas werkt dit ook niet. Zodra er zich ergens in de string het $ teken bevind, krijg ik een fout melding. Van de laatste string heb ik verschillende versies geprobeerd. Helaas werkt geen van alle:
code:
1
2
3
4
5
6
7
| a' or 1=1;$result = mysql_query("SELECT * FROM *") or die(mysql_error());echo . $result .;# a' or 1=1;"<?php $r = show databases; echo $r ?>";# a' or 1=1 ?>; <?php $query = show tables ?>; echo . $query .;# a' or 1=1; $query1 = "show tables"; $result1 = mysql_query($query1); echo($result1); |
Omdat ik niet voorbij dit punt kwam heb ik min of meer vals gespeeld door direct op de VM server in te loggen en via phpMyAdmin de naam van de table te weten ben gekomen. Nu kon ik vrij gemakkelijk een 'spook order' plaatsen met de volgende string:
code:
1
| a' or 1=1; insert into tblname values(x,x,x,x,x,x,x,x,x,x,x,x,x,x);# |
tblname staat voor de naam van de table. De x-en staan voor het aantal columns in de table. Om achter de column naam te komen verhoog ik het aantal karakters tot over de maximaal toegestane waarde per column en in de error die volgt krijg ik precies te zien hoe de column heet. Herhaal deze stappen en je weet precies hoe deze table er uitziet.
Helaas werd deze manier niet echt gewaardeerd door mijn begeleider, hij deelde ons mee dat het wel mogelijk moest zijn om via SQL injection de table namen te voorschijn te toveren.
Mijn directe vraag is dan ook, is hier iemand die deze methode kent en wilt delen? zou iemand mij hierbij willen ondersteunen? Ik ben namelijk al heel wat uren kwijt met het opzoeken en testen van de reeds geprobeerde methode. Bij voorbaat dank.
/btw, als het topic verkeerd staat mijn excuus.