新聞中心
隨著網(wǎng)絡(luò)技術(shù)的發(fā)展,數(shù)據(jù)庫已經(jīng)成為各種業(yè)務(wù)系統(tǒng)中不可或缺的一部分,也是攻擊者針對各種系統(tǒng)的主要目標(biāo)之一。數(shù)據(jù)庫注入攻擊就是攻擊者通過錯誤地使用Web應(yīng)用程序向服務(wù)器插入惡意的SQL語句,借此來獲得敏感數(shù)據(jù)或控制其執(zhí)行。正因為數(shù)據(jù)庫注入攻擊如此常見和危險,我們必須了解其原理,并對其進(jìn)行防范。

目前成都創(chuàng)新互聯(lián)公司已為超過千家的企業(yè)提供了網(wǎng)站建設(shè)、域名、網(wǎng)絡(luò)空間、網(wǎng)站運(yùn)營、企業(yè)網(wǎng)站設(shè)計、聶榮網(wǎng)站維護(hù)等服務(wù),公司將堅持客戶導(dǎo)向、應(yīng)用為本的策略,正道將秉承"和諧、參與、激情"的文化,與客戶和合作伙伴齊心協(xié)力一起成長,共同發(fā)展。
一、數(shù)據(jù)庫注入的原理
數(shù)據(jù)庫注入是指攻擊者向Web應(yīng)用程序的輸入欄里輸入一些特定的字符或語句,從而欺騙應(yīng)用程序提交一些不合規(guī)的SQL查詢或命令。一般來說,注入攻擊依靠于Web應(yīng)用程序沒有正確過濾和檢查用戶輸入,從而導(dǎo)致攻擊者可以繞過身份驗證和授權(quán)控制,并以非法的方式訪問或破壞數(shù)據(jù)庫。通過發(fā)現(xiàn)和利用Web應(yīng)用程序中的注入漏洞,攻擊者可以執(zhí)行以下行動:
1. 竊取用戶身份信息和敏感數(shù)據(jù)
2. 將設(shè)備感染病毒、更改數(shù)據(jù)或插入惡意文件
3. 盜取登錄憑證和Cookies
4. 破壞數(shù)據(jù)庫、系統(tǒng)和應(yīng)用程序
二、常見的注入攻擊類型
常見的注入攻擊類型:
1. 盲注
2. 堆疊查詢注入
3. 差異錯誤注入
4. 時間盲注
在這里,簡要介紹一下最常見的一種注入類型 – 盲注。盲注是指攻擊者通過構(gòu)造帶條件的SQL查詢,來確認(rèn)結(jié)果是否與預(yù)期相同,以此來發(fā)現(xiàn)和利用漏洞。盲注有兩種類型:基于布爾邏輯和基于時間的盲注?;诓紶栠壿嫷拿ぷ⑹且环N利用真/假邏輯來探測數(shù)據(jù)庫漏洞的方法,攻擊者通過構(gòu)造boolean查詢,并觀察Web應(yīng)用程序的響應(yīng),來推斷數(shù)據(jù)庫是否存在漏洞?;跁r間的盲注是一種能夠讓攻擊者掌握被攻擊系統(tǒng)后端查詢所需要的時間的攻擊方式。
三、防范策略
為了有效防范數(shù)據(jù)庫注入攻擊,我們可以采取以下措施:
1. 對輸入數(shù)據(jù)進(jìn)行過濾和驗證,以防止攻擊者提交惡意數(shù)據(jù)??梢酝ㄟ^限制輸入框的字符長度或限制字符類型、只接受預(yù)設(shè)的數(shù)據(jù)格式等方式,讓攻擊者難以提交非法字符,從而有效地減少注入漏洞的發(fā)生。
2. 使用參數(shù)化查詢或預(yù)編譯語句,以防止攻擊者的惡意注入。這種技術(shù)將把用戶輸入的值作為參數(shù)(而非字符串)來進(jìn)行處理,并通過驗證確保它們是適當(dāng)?shù)念愋秃透袷?。這種做法可以有效避免SQL注入的風(fēng)險。
3. 對數(shù)據(jù)庫進(jìn)行限制和保護(hù),并通過其他安全機(jī)制如防火墻、安全審計工具等措施,增強(qiáng)數(shù)據(jù)庫防御能力。
四、
數(shù)據(jù)庫注入攻擊已經(jīng)成為黑客攻擊的主要手段之一,對其原理的了解和防范策略的掌握,對于企業(yè)的IT安全至關(guān)重要。在實際工作中,我們不能盲目信任Web應(yīng)用程序的安全性,應(yīng)該通過定期檢測漏洞等方式來及時發(fā)現(xiàn)和修復(fù)注入漏洞,保護(hù)企業(yè)數(shù)據(jù)和用戶信息的安全。
成都網(wǎng)站建設(shè)公司-創(chuàng)新互聯(lián),建站經(jīng)驗豐富以策略為先導(dǎo)10多年以來專注數(shù)字化網(wǎng)站建設(shè),提供企業(yè)網(wǎng)站建設(shè),高端網(wǎng)站設(shè)計,響應(yīng)式網(wǎng)站制作,設(shè)計師量身打造品牌風(fēng)格,熱線:028-86922220如何通過注入SQL語句獲取網(wǎng)站管理權(quán)限及安全措施
一 網(wǎng)站是否存在SQL注入漏洞
網(wǎng)站一般包含一張用戶表(用戶名和密碼)和一張管理員信息表(管理員名稱和密碼), 輸入用戶名和密碼之后, 一般做法是后臺都會執(zhí)行一條SQL語句,
查詢有沒有對應(yīng)的用戶和密碼, 比如SELECT * FROM SomeTable WHERE UserName = $UserName AND pwd =
$pwd, 如果這條語句返回真, 那么登錄操作就完成了.
試想一下如果在學(xué)號和密碼文本旅閉清框中輸入or=or, 并提交的話, 上面提到的SQL語句就變成了SELECT * FROM SomeTable WHERE
UserName = or=or AND pwd = or=or, 這個語語句變成了一個邏輯表達(dá)式, 表達(dá)式包含幾段, 分別為:
1. SELECT * FROM SomeTable WHERE UserName = (假)
or
2. = (真)
or
3. (假)
and
4. pwd = (假)
or
5. = (真)
or
6. (假)
最后整個邏輯表達(dá)式為0|1|0&0|1|0, 這個結(jié)果為真(在執(zhí)行到”0|1|…”的時候整個表達(dá)式省略號中的就不計算了,
因為”或”前面已經(jīng)是真), 因此可以登錄成功, 事實上也登錄成功了.
二 破解后臺數(shù)據(jù)庫的原理
在用戶名和密碼的文本框中輸入or=or, 截至上面所示的第2步, 表達(dá)式值為真, 因為后面緊接了一個”或”, 所以無論在這后面的表達(dá)式是什么,
“真或者假””真或者真”都是為真的. 關(guān)鍵就是or=or中間的那個=, =表示一個字符, 永遠(yuǎn)為真. 如果我們將這個=改成某個SQL表達(dá)式,
如果這個表達(dá)式為真, 那么整個表達(dá)式就為真.
后面的幾個步驟要求用戶名和密碼文本框中都輸入同樣的文本, 原因是: 后臺的語句格式可能是SELECT * FROM SomeTable WHERE
UserName = $UserName AND pwd = $pwd, 也有可能是SELECT * FROM SomeTable WHERE pwd =
$pwd AND UserName = $UserName, 無論哪一種情況, 只要用戶名和密碼都輸入的文本是一樣的, 只要文本中包含的SQL表達(dá)式為真,
那么整個表達(dá)式就為真. 這樣寫帶來的另一個好處拆前是復(fù)制粘貼很方便.
通過寫一些SQL表達(dá)式來一次一次的測試出數(shù)據(jù)庫里的內(nèi)容.
三 獲取后臺數(shù)據(jù)庫的表名
如果將表達(dá)式替換為(SELECT COUNT(*) FROM 表名)0, 這個表達(dá)式用來獲取一個表中有多少條記錄,
需要做的就是猜這個表名是什么, 猜中了的話, 那么這個表中的記錄條數(shù)肯定就不會等于0, 那么這個表達(dá)式的值就是真的. 常用的表名也就是那么一些,
一個個的代進(jìn)去試, 最后發(fā)現(xiàn)有個叫做admin的表, 它的字段不為空. 很顯然, 這個表是用來存放管理員信息的.
四 獲取后臺數(shù)據(jù)庫表的字段名
現(xiàn)在已經(jīng)知道這個表叫做admin了, 接下來想辦法得到這個表中的字段.
把表達(dá)式替換成(SELECT COUNT(*) FROM admin WHERE LEN(字段名)>0)0,
這個表達(dá)式用來測試admin這個表中是否包含這個字段. LEN(字段名)>0表示這個字段的長度大于0, 在這個字段存在的情況下,
LEN(字段名)>0是始終為真的. 如果包含的話這個字段的話, 整條SELECT語句返態(tài)判回的數(shù)字肯定不為0, 也就是說整個表達(dá)式為真,
從而得到字段名.
按照這樣的方法, 靠猜共得出了三個很關(guān)鍵的字段:id, admin, pass.
五 獲取字段的長度
目前已得到的信息是有個admin表, 表中有id, admin, pass字段. 后臺中存儲用戶名和密碼,
常規(guī)做法是存儲它們進(jìn)行MD5加密后的值(32位), 現(xiàn)在測試一下是不是這樣.
把表達(dá)式替換為(SELECT COUNT(*) FROM admin WHERE LEN(字段名)=32)0,
將admin和pass代進(jìn)去結(jié)果是真, 說明后臺存儲管理員帳號和密碼用的是加密后32位的字段.
六 獲取管理員帳號和密碼
MD5加密后的字符串包含32位, 且只可能是由0-9和A-F這些字符組成.
1. 獲取管理員帳號
將表達(dá)式改成(SELECT COUNT(*) FROM admin WHERE LEFT(admin,1)=A)>0,
意思是我猜測某個adimin帳號的之一個字符是A, 如果成功則表達(dá)式成立. 失敗的話, 把A換成0-9和B-F中的任意字符繼續(xù)試, 知道成功. 如果成功了,
我再繼續(xù)猜這個帳號的第二個字符, 假如之一個字符是5, 我猜測第二個字符是A, 那將表達(dá)式改成(SELECT COUNT(*) FROM admin WHERE
LEFT(admin,2)=5A)>0. 可以發(fā)現(xiàn)字符串中LEFT()函數(shù)中的1變成了2, 另外5A代碼左邊兩個字符是5A, 其中5已經(jīng)確定下來了.
就這樣重復(fù)不斷的猜, 直到得到整個32位的MD5加密后的字符串.
2. 獲取該帳號對應(yīng)的的id
為什么需要獲取該帳號對應(yīng)的id? 原因如下: 按照上一條是可以得到帳號和密碼的, 但一張表中可以有若干個管理員帳號和密碼, 怎么對應(yīng)起來呢?
需要通過id. 一個id對應(yīng)一條記錄, 一條記錄只有一對匹配的帳號和密碼.
將表達(dá)式改成(SELECT COUNT(*) FROM admin WHERE LEFT(admin,1)=5 AND id=1)>0,
上一條假設(shè)了某帳號之一個字符是5, 只要這個表達(dá)式中的”AND id = 1″正確, 那么就可以得知該帳號的id是1. 如果不是1,
換成其它的數(shù)字一個個的試一試.
3. 獲取帳號對應(yīng)的密碼
現(xiàn)在已經(jīng)猜出了某管理員的帳號, 并且知道對應(yīng)的id是多少(假設(shè)得出來是4), 現(xiàn)在只要得到該條記錄中記錄的密碼是什么. 同理,
將表達(dá)式改成(SELECT COUNT(*) FROM admin WHERE LEFT(pass,1)=A AND id=4)>0,
注意id已經(jīng)是知道了的4, 現(xiàn)在要一個個的猜pass中從第1個到第32個字符是什么, 方法同”獲取管理員帳號”方法.
最后可以得到一個32位的MD5加密后的字符串(密碼).
*注: 如果嫌手工得到每個字符是什么太麻煩, 可以自己用C#寫一個程序, 模擬一下登錄, 通過控制一個循環(huán), 可以很快得到結(jié)果.
七 將MD5加密后的帳號和密碼轉(zhuǎn)成明文
網(wǎng)上有一些網(wǎng)站數(shù)據(jù)庫里存儲了海量(幾萬億條)的MD5加密后的暗文對應(yīng)的明文, 只需輸入你需要查找的MD5加密后的字符串就可以查看到明文是什么.
數(shù)據(jù)庫注入原理的介紹就聊到這里吧,感謝你花時間閱讀本站內(nèi)容,更多關(guān)于數(shù)據(jù)庫注入原理,掌握數(shù)據(jù)庫注入的原理,防范安全風(fēng)險!,如何通過注入SQL語句獲取網(wǎng)站管理權(quán)限及安全措施的信息別忘了在本站進(jìn)行查找喔。
成都創(chuàng)新互聯(lián)科技公司主營:網(wǎng)站設(shè)計、網(wǎng)站建設(shè)、小程序制作、成都軟件開發(fā)、網(wǎng)頁設(shè)計、微信開發(fā)、成都小程序開發(fā)、網(wǎng)站制作、網(wǎng)站開發(fā)等業(yè)務(wù),是專業(yè)的成都做小程序公司、成都網(wǎng)站建設(shè)公司、成都做網(wǎng)站的公司。創(chuàng)新互聯(lián)公司集小程序制作創(chuàng)意,網(wǎng)站制作策劃,畫冊、網(wǎng)頁、VI設(shè)計,網(wǎng)站、軟件、微信、小程序開發(fā)于一體。
文章標(biāo)題:掌握數(shù)據(jù)庫注入的原理,防范安全風(fēng)險!(數(shù)據(jù)庫注入原理)
標(biāo)題鏈接:http://www.dlmjj.cn/article/djscgpi.html


咨詢
建站咨詢
