Avatar billede 7th Praktikant
26. september 2003 - 05:28 Der er 10 kommentarer og
1 løsning

SQL injection

Jeg er ved at skrive lidt om SQL injection i en rapport, men jeg kan ikke få mit lille eksempel til at virke. Jeg har iøvrigt fulgt artiklen http://www.sitepoint.com/article/794/

Mit eksempel ser således ud.

$input = mysql_query ("SELECT user FROM usernames WHERE user='".$_POST['user']."' AND pass='".$_POST['pass']."'") or die (mysql_error ());

if (mysql_num_rows ($input) == 1) {
echo "Access granted.";
}

else {
echo "Access denied.";
}

Ifølge artiklen skulle det så være muligt at indtaste ' OR 1=1 --- og xxx, og på den måde lave en injection, men det virker ikke :( Jeg håber der er en som kan hjælpe, så jeg kan få mit eksempel til at virke.
Avatar billede fangel Nybegynder
26. september 2003 - 07:54 #1
det burde virke - et ex

$usr = "benny";
$pass = "42' OR '1=1";

$input = mysql_query ("SELECT user FROM usernames WHERE user='".$_POST['user']."' AND pass='".$_POST['pass']."'") or die (mysql_error ());

if (mysql_num_rows ($input) == 1) {
echo "Access granted.";
}

else {
echo "Access denied.";
}

det kan være fordi du køre med gpc_magic_quotes - så escaper den selv tegnene, prøv derfor hvor det ikke kommer fra form...

Morten
Avatar billede fangel Nybegynder
26. september 2003 - 07:55 #2
men det bliver så

WHERE ___ AND ___ OR ___

dvs at den første + enten den anden eller den tredje skal være sand - så man skal stadi kende en bruger...

Morten
Avatar billede fangel Nybegynder
26. september 2003 - 07:57 #3
ellers kan du med held hente 1 gratis ex. af php|architect - www.phparch.com

det skal bare være januar nummeret - der er en rigtigt god artiklen om sikkerhed i PHP - bl.a. sql incj.

Morten
Avatar billede squashguy Nybegynder
26. september 2003 - 08:14 #4
lille detalje: -- er vist ikke gyldig i mysql (mssql); her skal du bruge # for at udkommentere resten af sætningen.
Avatar billede fangel Nybegynder
26. september 2003 - 08:24 #5
i MySQl hedder den vidst nok - (eller også er det en tankestreg - eller to stregner)

Morten
Avatar billede 7th Praktikant
26. september 2003 - 17:20 #6
$user = "test' OR '1=1";
$pass = "test";

$input = mysql_query ("SELECT user FROM usernames WHERE user='$user' AND pass='$pass'") or die (mysql_error ());

if (mysql_num_rows ($input) == 1) {
echo "Access granted.";
}

else {
echo "Access denied.";
}

Så kan jeg godt få det til at virke. Hvor checker jeg for gpc_magic_quotes? Har kigget i httpd.conf og php.ini uden held, og hvad er en tankestreg?
Avatar billede squashguy Nybegynder
26. september 2003 - 18:42 #7
en anden variation er ved tal. jeg har flere steder oplevet der kontrolleres for apostroffer v/strenge, men at talinput overses. f.eks.:

select * from mintabel where id = et_tal

hvor et_tal er input fra brugeren. jeg fodrer den med: 2;drop table mintabel

resultatet bliver denne sætning:

select * from mintabel where id =2;drop table mintabel

udfaldet giver sig selv..
Avatar billede 7th Praktikant
28. september 2003 - 06:10 #8
Løst :o) Hvis # er en tankestreg, så hjalp det ihvertfald mig :)
Avatar billede 7th Praktikant
28. september 2003 - 06:19 #9
Du havde iøvrigt ret med hensyn til det med get_magic_quotes_gpc dea_pg.

Nogen som vil lægge et svar?
Avatar billede fangel Nybegynder
28. september 2003 - 09:16 #10
tjo ;)

en tankestreg er en '-' der er lidt længere end en normal '-' ;)

Morten
Avatar billede 7th Praktikant
28. september 2003 - 18:34 #11
$user = "' OR 1=1 #";
$pass = "et eller andet";

$input = mysql_query ("SELECT user FROM usernames WHERE user='".stripslashes ($user)."' AND pass='$pass'") or die (mysql_error ());

if (mysql_num_rows ($input) == 1) {
echo "Access granted.";
}

else {
echo "Access denied.";
}
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester