Less 13 POST - Double Injection - Single quotes- String - with twist
從題目來看,這一關是變型的單引號字符型雙查詢注入,而且參數傳遞方式是post。
這裏分別用四種報錯方法一一注入嘗試。首先填寫用戶名和密碼看看頁面的顯示效果
這是隨便用一個用戶名和密碼測試登錄的顯示
這是用正確的用戶名和密碼登錄顯示的頁面
從頁面響應的對比來看,都是沒有什麼顯示位的,只不過是畫面效果不一樣而已。這樣的話前面根據顯示位來注入顯示數據的方法肯定是行不通了,那就只剩下用報錯注入或者盲注來達到效果了。這一關只考慮報錯注入。
在注入之前先判斷出查詢語句的結構
在uname參數後面添加單引號測試
返回錯誤是Dumb') LIMIT 0,1
說明多了一個單引號而且參數還有()包裹,再繼續用Dumb') #測試
這裏響應頁面中的圖片是flag.jpg,這是登錄成功才返回的圖片。說明sql查詢語句已經閉合成功了。接下來就是報錯注入了。
1、floor()函數和rand()函數
先查詢當前的用戶名
再查詢當前數據庫
省略中間的步驟,最後列出用戶名和密碼數據
2、extractvalue()函數
先獲取當前數據庫用戶名
再獲取當前數據庫名
直接列出用戶名和密碼數據
3、updatexml()函數
首先獲取當前數據庫用戶名
然後獲取當前數據庫名
直接列出用戶名和密碼數據
4、exp()函數
首先獲取當前數據庫用戶名
然後獲取當前數據庫名
直接列出用戶名和密碼數據
Less 14 POST - Double Injection - Single quotes- String - with twist
從題目來看,這一關同上一關似乎是一樣的。
先判斷sql語句的結構,添加單引號測試
發現沒有登錄成功,也沒有任何報錯。猜測參數使用雙引號包裹的,添加雙引號測試
根據頁面報錯信息來看,就是多了一個雙引號。所以可以判斷sql查詢語句中參數就是用雙引號包裹的,這一點跟上一關不太一樣。閉合語句再次測試觀察響應
可以看到成功登陸了,說明語句閉合有效。接下來的注入流程就跟上面是一樣的了。
當然這裏不僅僅可以用報錯注入,基於時間的盲注以及其他類型的注入也是可以進行嘗試的,比如: