1 / 17

SQL INJECTION

SQL INJECTION. Wykorzystanie błędów w językach skryptowych Pomiędzy warstwą programistyczną a warstwą danych Bezradne niskopoziomowe mechanizmy bezpieczeństwa JSP, ASP, XML, XSL, XSQL, Perl, CGI, JavaScript, VB, narzędzia do obsługi baz danych, C, COBOL. Przykład 1.

jimbo
Download Presentation

SQL INJECTION

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. SQL INJECTION • Wykorzystanie błędów w językach skryptowych • Pomiędzy warstwą programistyczną a warstwą danych • Bezradne niskopoziomowe mechanizmy bezpieczeństwa • JSP, ASP, XML, XSL, XSQL, Perl, CGI, JavaScript, VB, narzędzia do obsługi baz danych, C, COBOL ...

  2. Przykład 1 • Skrypt w JSP połączony z Oracle • W polu formularza wczytywane sal • Konstruowane zapytanie (dla sal=800): SELECT ename, sal FROM scott.emp WHERE sal=800

  3. Przykład 1 • W polu sal wpisujemy: sal=800 UNION SELECT username, user_id from all_users • Uzyskujemy zapytanie: SELECT ename, sal FROM scott.emp WHERE sal=800 UNION SELECT username, user_id from all_users

  4. Zagrożenia • Dostęp do dowolnych danych w bazie • Możliwość modyfikacji i usunięcia danych • Atak wysokiego poziomu • Omija firewalle i zabezpieczenia na poziomie IP • Omija skanery antywirusowe i filtry treści • Nie istnieją sygnatury dla tego ataku

  5. Przykład – zagrożenia Oracle Można: • Dodać wyrażenie za pomocą UNION • Dodać podzapytania do istniejących • Uzyskać wszystkie dane z bazy • Uzyskać dostęp do zainstalowanych procedur i pakietów (np. pozwalających na zapisywanie i czytanie plików systemowych

  6. Przykład – zagrożenia Oracle Można: • Dodać instrukcje INSERT, UPDATE, DELETE • Dodać języki DDL (do definicji danych) • Dołączyć inną bazę danych Nie są wykonalne: • Wielokrotne instrukcje • Odwołanie do bind variables

  7. Przykład 2 • LoginPage.php: <HTML> <BODY> <FORM ACTION=LoginPage2.php> Użytkownik: <INPUT NAME=”username”> <br> Hasło: <INPUT NAME=”password”> <br> <INPUT TYPE=”submit” VALUE=”Zaloguj”> </FORM>

  8. Przykład 2 • LoginPage2.php: ... function MyAuth( $conn,$username,$password) { $query = ”SELECT id FROM users WHERE”; $query .= ”username = '” . $username . ”'AND ”; $query .= ”password = '” . $password . ”'”; $res = pg_query( $query); if (pg_num_rows( $res) == 1) { $row = pg_fetch_array( $res); $id = $row['id']; } else { $id = 0; } }

  9. Przykład 2 • Tworzone zapytanie: ”SELECT id FROM users WHERE username = '” . $username . ”' AND password = '” . $password .”'” • . - operator konkatenacji • ” - ograniczają poszczególne ciągi znaków • ' - fragmenty danych wprowadzane przez użytkownika

  10. Przykład 2 • Złośliwe dane: Użytkownik: 'delete from users-- Hasło: • Uzyskujemy zapytanie: ”SELECT id FROM users WHERE username = '” . '; delete from users--” . ”' AND password = '” . . ”'”;

  11. Przykład 1 • W efekcie uzyskujemy: ”SELECT id FROM users WHERE username = '” . '; delete from users--” . ”' AND password = '” . . ”'”; • ' - zakończenie pojedynczego cudzysłowu • ; - zakończenie zapytania i rozpoczęcie nowego • -- - początek komentarza

  12. Przykład 1 • Wygenerowane zapytanie: SELECT id FROM users WHERE username = ''; delete from users • Zawartość tablicy users zostanie usunięta, uniemożliwiając innym dostęp do systemu • Można doklejać dowolne zapytania, o ile pozwala na to API i składnia bazy danych

  13. Metody zapobiegania • Wszystkie dane z zewnątrz aplikacji powinny być filtrowane (przede wszystkim słowa kluczowe) • Stosowanie zasady najmniejszych przywilejów • Precyzyjne określenie funkcji dostępnych użytkownikowi za pośrednictwem interfejsu • Oddzielenie dostępu do bazy danych od interfejsu • Usuwanie zbędnych plików (*.bak)

  14. Przykład 3 • Im więcej intruz wie o strukturze bazy danych, tym większe prawdopodobieństwo skuteczności ataku • Podajemy: Użytkownik: ' HAVING 1 = 1-- • Uzyskujemy zapytanie: SELECT id FROM users WHERE username = '' HAVING 1 = 1

  15. Przykład 3 • Zapytanie: SELECT id FROM users WHERE username = '' HAVING 1 = 1 Jest poprawne składniowo, ale niepoprawne ze względu na strukturę danych. Zwrócony komunikat: Attribute users.id must be GROUPed or used in an aggregate function

  16. Podsumowanie • Dane z zewnątrz aplikacji powinny być filtrowane • Przy nadawaniu uprawnień należy stosować zasadę najmniejszych przywilejów • Precyzyjne określenie funkcji dostępnych użytkownikowi za pośrednictwem interfejsu • W środowisku aplikacji nie powinno być żadnych zbędnych plików

  17. Tematy pokrewne • HTML injection • Niedostateczne sprawdzanie danych wejściowych przez aplikacje sieciowe • Pozwala na zostawianie swoich pułapek na stronie, przechwytywanie danych • Second-order code injection • Dostarczenie aplikacji sieciowej potencjalnie niebezpiecznego kodu, który nie jest od razu wykonywany lecz przechowany • Przechowany kod (cache, baza danych) niebezpieczny przy wczytaniu i uruchomieniu przez ofiarę

More Related