第17關:
這是一個重置密碼的功能存在sqk注入,嘗試賬號密碼都輸入'",發現只會顯示登陸失敗,沒有報錯信息。
這個時候先推測一下后台的sql形式大概應該是: update users set password = ? where name =?
那么實際上是有兩個處注入,我們可以先嘗試name參數的注入
分別輸入:
uname=1' or 1=1 # &passwd=1&submit=Submit
uname=1') or 1=1 # &passwd=1&submit=Submit
uname=1"or 1=1 # &passwd=1&submit=Submit
uname=1") or 1=1 # &passwd=1&submit=Submit
發現頁面都沒有變化,於是我初步判斷username參數可能沒有注入漏洞
嘗試password參數,這里我踩了一個坑,我開始輸入的是
分別輸入
uname=1 &passwd=1' or 1=1 # &submit=Submit
uname=1 &passwd=1') or 1=1 # &submit=Submit
uname=1 &passwd=1"or 1=1 #&submit=Submit
uname=1 &passwd=1") or 1=1 #&submit=Submit
發現頁面也沒有變化,后來看了源碼才發現
這里會先用uname進行查詢操作,存在該用戶才會進行修改操作,於是我輸入
uname=admin &passwd=1' or 1=1 # &submit=Submit
顯示成功頁面了,說明后台是使用的單引符號進行的拼湊。
輸入uname=admin &passwd=1‘&submit=Submit ,看下程序是否會報錯(如果不報錯,就只能嘗試盲注了)
可以看到有報錯信息,可以先嘗試報錯注入。
后面的就直接將select user()替換成其他的查詢語句即可。
這里還有一個點需要注意的,concat里面不能直接使用~,必須用0x7e。
第十八關:
這關是一個關於http header的注入
使用正確的賬號密碼登陸后發現,會將http header中的User-Agent顯示在頁面上,這關需要利用到burp,輸入正確的賬號密碼后,提交,使用burp攔截。
我在User-Agent后面加單引符號后,發現頁面會爆sql的錯誤,如下圖
從報錯信息可以看到后面還有兩個參數,一個是ip,一個是用戶名。如果對sql語句有一定了解的人,應該知道后台應該是個insert的操作
INSERT INTO 表名稱 VALUES (值1, 值2,....)
INSERT INTO table_name (列1, 列2,...) VALUES (值1, 值2,....)
不管是上面哪一種,我們只需要使用報錯注入后將后面的的參數補全,然后加上注釋,如下圖:
成功查詢出數據
后面的操作就不繼續了。
HTTP 請求頭中除了 User-Agent可能存在sql注入意外,還有referer、X-Forwarded-For可能存在sql注入。
第十九關:
這是一個referer的注入,上一關也提到了,測試方法和上一關完全一樣,只是出現的地方不一樣而已。