本篇是針對sqli-labs靶場的less1-less4的sql注入練習。
主要涉及報錯型注入、聯合查詢注入。
第1~4關是都是error-based,只不過方式不一樣,可能是通過單引號/雙引號等進行試錯。
以第一關為例:
輸入引數獲取使用者名稱密碼
如何通過sql注入,獲得庫,表,使用者資料等資訊?
首先來試錯,通過試錯猜測sql語句。
通過單引號來試錯:
引數使用:?id=1』,通過一下報錯資訊可以推測出大概的sql:
select *** from db.table where id = 'xx' limit 0, 1;
其中xx是我們輸入的部分
依據上述我們可以嘗試構造以下sql:通過布林型注入來探測資訊
select *** from db.table where id = 'xx' or 1 = 1 -- 'limit 0, 1;
那麼輸入應該是:』 or 1 = 1 –
測試一下:
%20是空格。
得到以下結果,與輸入id=1的結果是一樣的,猜測可能sql獲取到結果後取了第一條資料。
讓我們換一種方式:
通過order by n測試有多少個字段
order by n 可以用來檢測查詢的字段數,n為使用第n個查詢引數進行排序,從1開始先看看sql查詢了多少字段:構造以下sql
select *** from db.table where id = '' order by 5 -- 'limit 0, 1
輸入?id=』 order by 5 --%20
結果:
說明沒有5個字段,逐漸遞減嘗試,測試結果n為3.
聯合查詢注入
通過union後面的查詢,展示自己想要的資訊,所以前面的查詢需要沒有返回結果構造如下sql
可以看到登入名和密碼對應的結果是database()和version(),即第二個和第三個引數。通過這種方式可以推斷出當前資料庫是security,當前登入使用者是root@localhost(調整user()函式位置)
利用group_concat函式庫名,表名等進行巢狀查詢
構造如下sql:
到這裡可以猜測,查詢的是security.users表
檢視表結構:
查詢表中資料:
到這裡想要的資料基本都拿到了。less2~less4的方法基本相同,只不過是更換』為"或使用數值等方式。
less2是數值型注入,不使用單雙引號;
less3是單引號 + ) ,即sql可能是id in ()
的格式
less4是雙引號 + )實現
當錯誤資訊會回顯時,可以利用報錯型注入來通過錯誤資訊推測sql
通過構造布林注入實現特定查詢條件
利用單雙引號等來構造閉合條件
通過order by來測試查詢字段數
通過union構造聯合查詢,獲取有用資訊
利用**user(),database(),group_concat()**等函式
參考:搭建sql注入靶場
安全攻防技能
sqli labs學習sql注入
在sql注入時應該記住的一些東西 information schema庫存放了所有庫的資訊 information schema.columns包含了所有表的字段 table name表名 table schema資料庫名 column name列名 information schema.table...
通過sqli labs學習SQL注入(2)
我的理解是,頁面不給出任何錯誤資訊的都屬於盲注 基於布林的盲注 通過返回的頁面是否正確來判斷,如果後台做了限制,此方法無效 例如less 9,錯誤也會顯示you are in.基於報錯的盲注 構造乙個能回顯錯誤資訊的sql語句,如果後台做了限制,此方法無效 例如less 8以及後面的幾關,錯誤資訊被...
通過sqli labs學習SQL注入(4)
這次用sqlmap來通關一次sqli labs 主要使用的引數 例項演示 目標url 選擇感興趣的資料庫,這裡選擇security 檢視指定表名的列 直接dump出users表的內容 也可以加 c username dump指定列username的內容,dump alldump所有資料庫的內容 sq...