資料庫安全測試

2021-10-08 21:32:19 字數 2478 閱讀 1671

假如你是乙個公司聘請的安全測試人員,現在你將在公司的內網中對員工用網以及公司的資料庫安全效能進行測試。

1.運用nmap掃瞄發現資料庫

由於我們當前能夠接入公司的內網,那麼找到資料庫所在伺服器對應的ip位址才能實行有效的攻擊測試,我們將選取nmap作為強有力的工具,nmap的一些基本指令如下所示:

nmap (網路對映器)是gordon lyon最初編寫的一種安全掃瞄器,用於發現計算機網路上的主機和服務,從而建立網路的「對映」。為了實現其目標,nmap將特定資料報傳送到目標主機。

(1)nmap -st (範圍)《目標ip>,這個命令掃瞄tcp預設連線子網。

(2)sudo nmap -o (範圍)《目標ip>,這個命令確定主機的作業系統。

(3)nmap -sv (範圍)《目標ip>,這個命令來列出每個主機的服務版本。

(4)nmap -p(範圍)《目標ip> 這個命令是端**換機(範圍)是1-65535的埠數 《目標ip>是您的特定目標ip位址

2.sqli介紹

我們將對最常用的主要的sql注入攻擊進行介紹:

(1)tautologies

重言式是始終正確的陳述。 它們可以用作 sql 注入的工具,比如我們在前段輸入的視窗輸入一段重言的正確邏輯字段,那麼資料庫收到輸入後採取的相應指令就可以繞開驗證。

例如:where password=』』 or 1 = 1 --』

當然還可以用字串或數字的正規表示式來進行繞過驗證。

(2)union query

利用select語句將兩列或多列資料結合,在攻擊時,返回的結果將是兩個選擇select語句產生的,乙個是由攻擊者產生,另乙個由系統決定。

(3)2nd order injection

資料庫會儲存之前使用者輸入的資料,當惡意輸入被儲存在資料庫,新的命令或指令會觸發。

4.sql盲注攻擊

對於乙個未知的資料庫,我們無法了解其中包含了什麼**或是哪些元素,我們可以採取sql盲注的攻擊手段。

4.1boolean blind sqli布林盲注

利用布林的判斷是否注入成功

例如:1 and 1=2 1』 and 『1』='2 1" and 「1」="2

(1)當輸入1』 and 『1』='2顯示為假時,則說明注入成功;

(2)接下來判斷字串長度 利用length()函式,通過二分法來判斷 id=1』 and length(database())>10 – id=1』 and length(database())>5 –

(3)通過ascii碼的範圍,利用二分法來判斷每個字元的值,再轉換為英文 ascii() 函式 ascii碼範圍在0-127 id=1』 and ascii(substr(database(),1,1))>64–

大於64為真,則值再64《字母<127 然後逐步來判斷ascii碼的值,最終確定字母

4.2time-based blind sqli延時盲注

延時注入會用到布林盲注的所有函式,包括:length()、substr()、ascii()函式

if()函式: if()函式,顧名思義,這個乙個條件判斷函式,所以 有三個引數,其用法為if(a,b,c)

第乙個引數a:判斷語句,返回結果為真假

第二個引數b:如果前面的判斷返回為真,則執行b

第三個引數c:如果前面的判斷返回為假,則執行c

例項:select if(1=1,1,2)和select if(1=2,1,2)

sleep()函式: 通過在語句中新增乙個sleep(n)函式,強制讓語句停留n秒鐘 例項:select 1 sleep(5)

延時注入用到的函式length()、substr()、ascii()、if()和sleep()函式。

這裡直接用資料庫闡述原理,在實際中,如下面的例子注入點為id=1,我們已經無法使用union來直接查詢並且正確頁面和錯誤頁面一致,我們無法區分。此處我們需要用到關鍵字and,我們知道只有and前後的條件都為真的時候,資料庫才會輸出結果。

判斷資料庫名長度: 首先我們來判斷一下資料庫的是幾個字元,用到length()、if()、sleep()函式,此處選取的資料庫名稱為test,如下圖所示當判斷條件為等於4時,輸出為empty並沉睡五秒,當判斷條件不等於4時,輸出了我們查詢的資料,這是因為如果不為4,if函式返回後面的值1,and 1為真,所以資料庫名的字元個數為4。

例項:select user from test where id=1 and if((length(database())=4),sleep(5),1),其中(database())為子查詢,需要加括號

猜解資料庫名: 我們已經知道了資料庫名是四個字元,接下來我們可以使用substr()函式對資料庫名的字元乙個個擷取。在通過ascii()函式判斷字元的ascii碼值,第乙個字元的ascii碼值為116,第二個為101,同樣的步驟,第三個為115,第四個為116,然後和ascii碼表比對,發現資料庫名為test

例項:select user from test where id=1 and if((ascii(substr(database(),1,1))=116),sleep(5),1)

資料庫安全測試

其中一些方法包括 1 不受限制的資料庫特權 2 sql 注入 3 糟糕的審計追蹤 4 暴露的資料庫備份 5 資料庫配置錯誤 6 缺乏安全專業知識 7 拒絕服務 dos 8 資料管理不善 滲透測試 這是對系統的故意攻擊,旨在發現安全漏洞,攻擊者可以通過這些漏洞訪問包括資料庫在內的整個系統 漏洞掃瞄 使...

資料庫安全

先分3點從全域性來看 對作業系統的安全需求 防止對dbms的非法訪問和修改,保護儲存的資料 檔案的安全性,對資料庫使用者的認證 對資料庫系統本身的安全需求 使用者認證管理 訪問控制 審計,資料庫的穩定性,保證資料的安全性與完整性,完善的恢復功能,資料加密 對資料庫應用系統的安全需求 訪問控制 認證管...

資料庫安全

先分3點從全域性來看 對作業系統的安全需求 防止對dbms的非法訪問和修改,保護儲存的資料 檔案的安全性,對資料庫使用者的認證 對資料庫系統本身的安全需求 使用者認證管理 訪問控制 審計,資料庫的穩定性,保證資料的安全性與完整性,完善的恢復功能,資料加密 對資料庫應用系統的安全需求 訪問控制 認證管...