sqli-labs(54-65)

凡世俗夢發表於2020-10-27

五十四關

    翻到第四頁了,這一頁的內容算是前面的綜合考核了
    看一下介面,要求,從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條件語句,所以布林盲注和延時注入都不能使用。

相關文章