2015-08-05 18 views
5

Bir enjeksiyon saldırısı başlatırken alabildiğim sql sözdizimi sorunlarını anlamıyorum, bu nedenle bunları açıklayan herhangi bir yardım çok takdir edilmektedir. Kullanıcı adı/parola combo alan ve sonra çok basit bir şekilde çalışan bir hedef php giriş betiğim var.sql injection boolean sözdizimi

Select * FROM users WHERE username='$username' AND password='$password' 

ben

Select * FROM users WHERE username='' OR '1=1' AND password='' OR '1=1' 

olarak değerlendirilirse ve veritabanında ilk kullanıcı girişi için bir maç (alır çünkü temel

$username = ' OR '1=1 
$password = ' OR '1=1 

sistem yöneticisi olarak beni günlükleri arz zaman yönetici). Şimdi senaryoyu, adrian adında rastgele bir kullanıcı olarak girmeye çalışıyorum. Benim düşünce parantez dahil edildiğinde ben

Select * FROM users WHERE username='adrian' AND password='' OR (1=1 AND username='adrian') -- ' 

I operasyonların boolean sırası soldan sağa düşündüm değerlendirmek düşündüm

$username = adrian 
$password = ' OR (1=1 AND username='adrian') -- 

kaynağı oldu:

Select * FROM users WHERE [[[username='adrian'] AND password=''] OR (1=1 AND username='adrian')] -- ' 

ama Bu beni hiç kimse olarak kaydetmiyor (ve bana hata yapmadan). VE son değerlendirilir bile, bu açıklama hala kullanıcı adrian için de geçerli olacağı

Select * FROM users WHERE [username='adrian'] AND [password='' OR (1=1 AND username='adrian')] 

olarak değerlendirilir. Bu arada

$username = adrian 
$password = 'or(1=1 and username='adrian') -- 

'veya' benim yaklaşım çalışır iken Peki neden benim yaklaşım "VEYA" çalışmıyor
Select * FROM users WHERE username='adrian' AND password=''or(1=1 AND username='adrian') -- ' 

olarak değerlendirilirse, hangi düzgün olarak Adrian beni günlüğü nedir?

SOLVED: Rehberlik için teşekkürler. Şimdi daha iyi sql anlıyorum ama benim asıl sorun otomatik doldurma sonra boşluk kaldırarak olmasıydı "-" Ben ilk defa berbat ve sonra aptalca sonra dışarı

enter image description here

+2

Maalesef ... tekrar açıldı var. – Orangepill

+0

Operatör önceliği: '=', sonra 'AND', sonra' OR'. – Gumbo

+0

İşte size bir öneri: Platformunuz (bu durumda, [PHP] (https://secure.php.net/manual/en/pdo.prepared-statements.php)) hazırlanmış ifadeleri ve parametre bağlamayı destekliyorsa, onları kullanmalı. Bu genellikle sizin için kaçan sorunları ele alır. – Powerlord

cevap

3

itibaren otomatik olarak doldurulması dayanıyordu olmalı Operasyonların sırası sadece sağa değil. Gerçekte soldan sağa (veya konumsal öncelik), böyle bir ifadeyi değerlendirirken göz önüne alınan en son şeydir. operatörünün önceliğini önceliğinden anlamalısınız, çünkü bu böyle bir ifadenin davranışını belirlemenin en önemli yönü. Bu durumda AND, OR'dan daha yüksek önceliğe sahiptir. aşağıdaki gibi deyim davranırdı demektir

:

Select * FROM users WHERE (username='adrian' AND password='') OR (1=1 AND username='adrian') 

Yani, bir satır alacağı sürece adrian adında bir kullanıcı olarak döndü.

Kontrol dışarı operatör precendence üzerinde MySQL dokümantasyon - Bu konuda https://dev.mysql.com/doc/refman/5.6/en/operator-precedence.html

İlgili konular