Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> sqlinjection z union
nospor
post 16.02.2009, 17:24:23
Post #1





Grupa: Moderatorzy
Postów: 36 557
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.


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
nospor
post 16.02.2009, 18:35:25
Post #2





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




@pyro o tym, ze w ten sposob mozna pobrac to wiem smile.gif
Chodzilo mi o przyspieszenie tego etapu i dlatego chciałem dodać union. Gdyby nie te count() to bez problemu bym pobral, ale count() mnie zalatwia - dlatego zastanawiam sie czy mozna jakies uniwersalne zapytanie przy uzyciu np. IF napisac


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
pyro
post 16.02.2009, 18:37:10
Post #3





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

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


Cytat(nospor @ 16.02.2009, 18:35:25 ) *
@pyro o tym, ze w ten sposob mozna pobrac to wiem smile.gif
Chodzilo mi o przyspieszenie tego etapu i dlatego chciałem dodać union. Gdyby nie te count() to bez problemu bym pobral, ale count() mnie zalatwia - dlatego zastanawiam sie czy mozna jakies uniwersalne zapytanie przy uzyciu np. IF napisac

no raczej by się to sprowadzało do tego samego... Poza tym w ten sposób  możesz wyciągnąć dowolne dane w szybki sposob, wystarczy bot na kilkanascie,dziesiąt linijek i automatycznie bedzie dane podstawiał tongue.gif


--------------------
ET LINGUA EIUS LOQUETUR IUDICIUM
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 Wersja Lo-Fi Aktualny czas: 18.06.2025 - 07:45