Wpis z mikrobloga

Mirki mam za zadanie zademonstrować jak działa SQL Injection. Stworzyłem sobie prostą bazę danych która wygląda następująco.

create table contacts(
userid NUMBER(6) CONSTRAINT receptapk PRIMARY KEY,
name VARCHAR2(30),
surname VARCHAR2(20),
phone Number(9)
);

Do tego mam formularz który ma trzy pola tekstowe; imie, nazwisko, numer telefonu.
Jeżeli dodam następujące dane w formularzu: Ada, Test, 123 to w bazie dodaje się nowy rekord.

INSERT INTO CONTACTS (userid,name,surname,phone) VALUES (CUSTOMERSEQ.nextval,'Ada', 'Test', '123')

Teraz chce zademonstrować sql Injection więc daję dane:
Ada,
Test,
1'); drop table contacts; --

INSERT INTO CONTACTS (userid,name,surname,phone) VALUES (CUSTOMERSEQ.nextval,'Ada', 'Test', '1'); drop table contacts;--')

Jednak zapytanie wyrzuca błąd w postaci:

java.sql.SQLSyntaxErrorException: ORA-00933: polecenie SQL niepoprawnie zakończone

Jak mogę poprawić to zapytanie by usuwało rekordy w bazie?

Chce to zrobić w Javie a baza którą używam to Oracle.

#bazydanych #programowanie
  • 8
  • Odpowiedz
@slitch: Być może ta biblioteka SQL, której używasz nie lubi stacked queries, spróbuj wkleić do imienia coś takiego może:

Ada', (SELECT substr((SELECT banner FROM v$version), 1, 20) FROM dual), '123') --

powinno wyjść takie zapytanie:

INSERT INTO CONTACTS (userid,name,surname,phone) VALUES (CUSTOMERSEQ.nextval,'Ada', (SELECT substr((SELECT banner FROM v$version), 1, 20) FROM dual), '123') --

(przy założeniu, że nic nie #!$%@?łem)
  • Odpowiedz