Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> sqlinjection z union
nospor
post
Post #1





Grupa: Moderatorzy
Postów: 36 559
Pomógł: 6315
Dołączył: 27.12.2004




Pytanie teoretyczne:
czy jest możliwość wstawienia zapytania z union, do następującej teoretycznej sytuacji:

skrypt niezabezpieczony w zaden sposob przed sqlinjection, mozna wkladac co nam się chce.

wykonywane zapytanie:
  1. SELECT cos, cos2, cos3 FROM tabela WHERE pole = 'cosZforma';

gdzie cosZforma to dana, która moze w formularzu dowolnie modyfikowac.

Chcac wstawic uniona, wystarczy wiec za cosZforma wstawic:
' union select c1,c2,c3 from innatabela where '1=1
w rezulatacie otrzymamy poprawne zapytanie z union
  1. SELECT cos, cos2, cos3 FROM tabela WHERE pole = '' UNION SELECT c1,c2,c3 FROM innatabela WHERE '1=1';


pojawia sie jednak problem, gdyz nasze glowne zapytanie poprzedzane jest zapytaniem zliczającym, czyli
  1. SELECT count(*) FROM tabela WHERE pole = 'cosZforma';

w rezulatacie po wstawieniu naszej zmiennej otrzymamy
  1. SELECT count(*) FROM tabela WHERE pole = '' UNION SELECT c1,c2,c3 FROM innatabela WHERE '1=1';

Co wywali nam zapytanie, gdyz union dostarczy nam inną liczbę kolumn.
Skrypt dalej sie nie wykona, bo zapytanie z count(*) zwraca nam false i nie jedziemy dalej.

Czy istnieje jakies ominiecie tego? By w jednym ciągu zawrzec zarówna jedną kolumne i kilka kolumn? Tak by przeszlo zarowno przez zapytanie z count() jak i drugie pobierające dane?

ps: nie chce nikogo hackowac. Interesuje mnie, czy jest to możliwe.
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
pyro
post
Post #2





Grupa: Zarejestrowani
Postów: 2 148
Pomógł: 230
Dołączył: 26.03.2008

Ostrzeżenie: (0%)
-----


Jeżeli w kodzie PHP  jest to interpretowane w ten sposob:

  1. <?php
  2. $blah = mysql_fetch_row($zapytanie);
  3.  
  4.  
  5. if($blah[0] == 0)
  6. {
  7. // nie  ma artykulow ;(
  8. }
  9. else
  10. {
  11. // znaleziono x artykulow
  12. }
  13. ?>


to w takim wypadku raczej union na niewiele się zdziała, jeśli jednak w kodzie php jest to interpretowane tak: (nie ma potrzeby tak robic, ale widzialem skrypty w ktorych ludzie mimo to dają wynik do while() (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) )

  1. <?php
  2. while($blah = mysql_fetch_row($zapytanie))
  3. {
  4. $znalezionych = $blah[0];
  5.  
  6.  
  7.  
  8. }
  9. ?>


To w takim wypadku wystarczy dodać najzwyklejsze UNION, wtedy druga wartośc nadpisze pierwszą (tą z count), a tą drugą wartością bedą dane wyciągnięte z użycią UNION (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)

Ten post edytował pyro 16.02.2009, 19:00:34
Go to the top of the page
+Quote Post

Posty w temacie


Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 5.10.2025 - 06:29