SQL注入

2021-10-25 18:41:54 字數 4420 閱讀 9719

(學習筆記,求大佬輕噴。)

惡意使用者在提交查詢請求的過程中將sql語句插入到請求內容中,由於程式本身對使用者輸入的內容過分信任而沒有進行過濾,導致插入的sql語句直接被服務端執行。

sql注入漏洞是乙個web安全漏洞:

它使攻擊者可以檢視他們通常無法檢索的資料。

攻擊者可以修改或刪除此資料,從而導致應用程式內容或行為的永久更改。

攻擊者可以公升級sql注入攻擊以破壞基礎伺服器或其他後端基礎結構,或者執行拒絕服務攻擊。

一階sql注入發生在乙個http請求和響應中,對系統的攻擊時立即執行的。

攻擊者在http請求中提交非法輸入;應用程式處理非法輸入,使用非法輸入構造sql語句;在攻擊過程中向攻擊者返回結果。

手工識別: 』 ; and 1=1 / and 1=2; and 『1』 = '1 / and 『1』 = '2; and 1 like 1 / and 1 like 2;

高階識別:擴充套件識別的廣度和深度(sqlmap --level 「增加測試級別,對head中相關引數也進行了測試」)(sqlmap -r filename 「filename中為**請求資料」); 利用工具提高識別效率: burpsuit + sqlmap;

數字型別

select user,password from users where id=$id; 數字型別直接將後台接收到使用者輸入的內容帶入到資料庫中執行;

字元型別

select user.password from users where id=』$id』; 字元型將接收到的內容新增到引號內然後進行執行,字元型注入需要考慮語句閉合的問題,而數字型別則不存在。

1. get 方式注入

注入引數以get方式進行提交

2. post方式注入

注入引數以post方式進行提交

3. 基於cookie的注入

後台會接受cookie內的引數,在http的cookie欄位中存在注入漏洞

4. 基於http頭部的注入

後台會接受referer 或user-agent欄位中的引數,http頭部中的referer ,user-agent欄位中存在注入漏洞。

5. 盲注

基於布林的盲注:

布林盲注:**存在sql注入漏洞,然而頁面不會回顯資料,也不會回顯錯誤資訊。只返回right與wrong。

**頁面在輸入條件為true和false的情況下會顯示不用,但頁面中沒有輸出。此時需要在sql語句之後新增條件判斷。

基於時間的盲注

**頁面在輸入條件為真和為假返回的頁面相同,但通過延時函式構造語句,可通過頁面響應時間的不同判斷是否存在注入。

常用函式

if(condition,a,b): 若condition返回真則執行a,假則執行b

substr(str,a,b): 字串擷取函式,擷取str字串從a位置開始,擷取b個字元

left(str,a): 類似字串擷取函式,返回str字串從左往右數的a個字元

count(a): 計算a的數目,常用與查詢資料表、資料列、資料內容的條數

len(a): 計算a的長度,常用於返回資料庫名、資料表名、資料列名的長度

ascii(a): 返回a的ascii碼,當逐字猜解限制單引號的輸入時,可以通過查詢ascii碼來繞過

6. 基於union的注入

首先通過order by 進行判斷查詢引數的數目,然後構造union查詢,檢視回顯。有時需要將前面引數名修改為假的引數。如id=10』 union select 1,2,查詢頁面中1和2的位置,在頁面中顯示的數字的地方構造查詢的內容。

7. 基於報錯的注入

updatexml(1,concat(』』,sql語句,』』),1)

extractvalue(1,concat(』~』,(sql語句)))

8. 寬位元組注入

寬位元組注入的原理即為資料庫的編碼與後台程式的編碼不一致,資料庫中乙個字元佔兩個位元組,而後台程式為乙個字元佔乙個位元組,當後台程式對輸入的單引號的字元進行轉義時,通過在這些轉義的字元前輸入%bf然後將%bf』帶入後台程式時會轉義為%bf』,此時帶入資料庫中,資料庫將%bf\看作是乙個中文字元從而使用單引號將sql語句進行閉合。

9. 基於base64加解密注入

後台程式在接收使用者輸入的引數後先進行base64解碼然後帶入到sql語句中執行。所以這種型別的注入首先需要將payload進行base64加密

10. 搜尋型注入

當搜尋關鍵字時,後台sql語句可能為:select username from users where id=』%$id%』,此時構造閉合語句時需要考慮%的閉合

資訊收集

資料庫型別:根據報錯判斷

資料庫版本:@@version

資料庫使用者: user()

資料庫許可權:super-priv

獲取資料

【通過語句查詢;通過暴力破解】

獲取資料庫資訊

獲取表資訊

獲取列資訊

獲取資料

提權執行命令 --os -shell sql server sa許可權

讀檔案 讀中間配置檔案,讀資料庫配置檔案

寫檔案 寫webshell到**目錄

攻擊者未經授權可以訪問資料庫中的資料,盜取使用者的隱私以及個人資訊,造成使用者的資訊洩露。

可以對資料庫的資料進行增加或刪除操作,例如私自新增或刪除管理員賬號。

如果**目錄存在寫入許可權,可以寫入網頁木馬。攻擊者進而可以對網頁進行篡改,發布一些違法資訊等。

經過提權等步驟,伺服器最高許可權被攻擊者獲取。攻擊者可以遠端控**務器,安裝後門,得以修改或控制作業系統。

使用burpsuit的web漏洞掃瞄程式可以快速可靠的找到大多數sql注入漏洞

提交單引號字元 『 並查詢錯誤或其他異常

提交一些特定於sql的語法,以評估入口點的基礎(原始)值和其他值,並在所的應用程式相應中尋找系統差異。

提交布林條件(例如or 1 = 1和or 1 = 2),並查詢應用程式響應中的差異

提交旨在在sql查詢中執行時出發時間延遲的有效負載,並尋找響應時間的差異

提交旨在在sql查詢中執行時觸發帶外網路互動的oast有效負載,並監視所有結果互動。

檢索隱藏的資料

你可以在其中修改sql查詢以返回其他結果 eg:『+or+1=1–

顛覆應用程式邏輯

你可以在其中更改查詢以干擾應用程式的邏輯。 eg:administrator『–

union攻擊

你可以在其中不同的資料庫表中檢索資料。 eg:『union select null–

檢查資料庫

你可以在其中提取有關資料庫版本和結構的資訊。eg:select * from v$version ; select * from information_schema.tables

盲sql注入

你控制的查詢結果不會在應用程式的響應中返回。

第一步:插入惡意資料

第一次進行資料庫插入資料的時候,僅僅對其中的特殊字元進行了轉義,在寫入資料庫的時候還是保留了原來的資料,但是資料本身包含惡意內容。

第二步:引用惡意資料

在將資料存入到資料庫中之後,開發者就認為資料是可信的。在下一次需要進行查詢的時候,直接從資料庫中取出了惡意資料,沒有進行進一步的檢查和處理,這樣就會造成二次sql注入

對外部提交的資料,需要更加謹慎的對待。

程式內部資料的呼叫,也要嚴格的進行檢查,一旦不小心,測試者就能將特定的sql語句帶入到查詢中。

分析**: 使用了blacklist函式過濾了』or』和』and』

繞過限制:

​ 大小寫變形: or, or,or

​ 等價替換:and -> &&, or -> ||

一 架構層繞過waf:

尋找源站—>針對雲waf(找到源ip位址)

利用同網斷—> 繞過waf防護區域

利用邊界路東—>繞過waf防護區域

二 資源限制角度繞過waf

構造大的資料報(post大body)

三 協議層面繞過waf的檢查

協議未覆蓋繞過waf

*請求方式變換:get—>post

引數汙染

四, 規則層面的繞過:

主要的繞過方式

sql注釋符繞過: union/**/select

空白符繞過:

mysql空白符: %09,%0a,%0b,%0b,%0d,%20,%0c,%a0,/***/

函式分割符號

concat%2520( ; concat/**/( ;concat%250c( ; concat%25a0(;

浮點數詞發解析

select * from users where id=8e0union select 1,2,3,4,5,6,7,8,9,0

利用error—base進行sql注入

extractvalue(1,concat(0x5c,md5(3)));

mysql特殊語法

select(x table_name)from(x information_schema.tables);

SQL注入(三) sql注入 bugku

原理 mysql 在使用 gbk 編碼的時候,會認為兩個字元為乙個漢字,例如 aa 5c 就是乙個 漢字 前乙個 ascii碼大於 128 才能到漢字的範圍 我們在過濾 的時候,往往利用的思 路是將 轉換為 換的函式或者思路會在每一關遇到的時候介紹 因此我們在此想辦法將 前面新增的 除掉,一般有兩種...

SQL注入 報錯注入

乙個帶get引數的 並且不從資料庫返回資料,但存在報錯資訊 檢視字段情況 報錯注入語句格式 and 1 2 union select1,2,3 from select count concat floor rand 0 2 sql語句 a from information schema.tables...

SQL注入 報錯注入

sql注入基礎 盲注 用於注入結果無回顯但錯誤資訊有輸出的情況 floor函式 返回小於等於某值的整數,例如floor 1 則返回1,floor 1.9 也返回1 rand函式 生成隨機數.可指定seed,指定後每次生成的數都一樣即偽隨機,不指定seed則每次生成的隨機數都不一樣.通過floor和r...