0x00 前言
這道題對我來說難度還是有的,綜合性比較強,設計到了ssrf,反序列化,sql注入等多個方面的漏洞,我想通過這道題還是可以學習到許多新姿勢的.
0x01 解題
進入題目環境,是乙個註冊登入頁面,一般來說這種一開始給乙個註冊介面的很少是上來就直接sql注入的,我這裡註冊了乙個test使用者.
先常規掃瞄,發現關鍵檔案
看到了robots.txt和flag.php
flag.php無許可權訪問,那麼檢視robots.txt
function get($url) //沒有對url引數進行過濾,可能存在ssrf漏洞
curl_close($ch);
return $output;
}public function getblogcontents ()
public function isvalidblog ()
(\:[0-9]+)?(\/\s*)?$/i", $blog);}}
get函式非常可疑,存在ssrf的特徵**,對url引數沒有任何過濾,根據類中的屬性"username","age","blog",不難猜想到get函式中傳入的引數就是我們註冊時候的填寫的blog的url位址.
這個url位址我們可控,但是沒法直接在註冊的時候就直接利用,因為下面乙個isvalidblog函式就直接鎖死只有http(s)協議的url位址可以通過註冊,所以這裡按下不表,接著往下看是否有可以利用的地方.
ok,進入到我們註冊的test使用者,整個頁面就是test那裡可以點選,所以點開看看
這裡注意url的關鍵點[?no=1],猜想是否存在sql注入漏洞
提交引數[?no=1 and 1=1],頁面回顯正常,提交[?no=1 and 1=2],頁面異常,同時直接爆出檔案絕對路徑,這個資訊非常重要.
確定sql注入型別為數字型,接下來常規操作,猜解一下字段數看看,這裡就不上圖了,常規order by測試即可
確定欄位數為4,接下看看看哪些地方是可以回顯利用的,但發現有關鍵字被waf檢測到了
嘗試雙寫,大小寫均無法繞過,猜測waf可能是檢測union select整個字串,所以嘗試使用內聯注釋代替空格
繞過成功,接下看就看看資料庫版本和使用者資訊
做到這裡就有兩種解法了,這裡先說一下非預期解
0x02 非預期解
上面可以得到我們通過常規sql注入得到的使用者是root,這個使用者許可權非常高,可以直接讀取檔案.
mysql中有乙個load_file()函式,這個函式可以讀取本地檔案,但是有兩個條件:
1.使用者有很高的許可權
2.知道檔案的絕對路徑
好巧不巧的是這兩個條件我們都具備了,上面說了,在sql注入時直接爆出了檔案的絕對路徑,結合第一步掃瞄時直接掃除了flag.php,所以嘗試是否通過sql注入直接讀取flag.php
直接得到flag
0x03 預期解
上面得到的原始碼我們還沒有利用,所以我想這道題的本意並不是直接sql注入得到flag,需要結合原始碼做進一步分析,所以我們接著常規sql注入,看看欄位的具體值
猜解表名:
猜解欄位名:
no是編號,username和passwd都是註冊資訊,檢視data欄位
發現了data中儲存了乙個序列化之後的物件資訊,仔細一看發現這個正是原始碼中的userinfo類!
之前說了,這個url引數是我們可控的,結合**審計中審計出了可能存在ssrf漏洞,既然知道了flag.php的絕對路徑,所以接下來的思路就是修改blog的url位址,替換成file協議,進行檔案讀取.
但是具體該怎麼利用呢?這裡就需要一點點猜的技巧了(個人認為),如果有師傅可以在**邏輯上進行以下解題操作,還請賜教
再回到一開始的頁面
這裡提交了乙個no的引數,返回了使用者資訊這個頁面,所以不難猜到伺服器端是通過分析no引數,再從資料庫中進行查詢,然後返回我們的資訊
很有意思的是,之前sql注入時得到了伺服器再查詢時是查詢了4個字段,而我們得到的可用的字段有[no,username,passwd,data]四個字段
毋庸置疑的是,我們的註冊資訊是寫入了資料庫的,而no,username,passwd三個欄位均沒有我們註冊時候填寫的blog位址,只有data欄位中有乙個序列化後的blog屬性的值
那麼問題來了,所返回的頁面中的bolg位址是怎麼查詢的? 或者說怎麼得到的?
毫無疑問,就是通過查詢data欄位,得到其中的序列化資訊來渲染整個頁面,從而恰好得到頁面中的username,age,blog值.
猜想到這個邏輯之後,我們就可以通過修改查詢的序列化物件的值來構造ssrf請求,從而讀取到flag檔案
利用flie協議讀取檔案
已知data在第4個字段,所以提交查詢[?no=0 union/**/select 1,2,3,'o:8:"userinfo":3:' %23] (這裡把要查詢的序列化資訊用引號引起來)
再返回的頁面中右鍵檢視源**
看到了iframe標籤(關於這個標籤,具體檢視
點選src中的位址,得到flag
歡迎師傅們前來指正交流
刷題 網鼎盃 2018 Fakebook
首先登陸頁面發現是這樣的 原始碼很正常,也沒有什麼特別的 我用的是dirmap工具掃瞄,掃瞄結果儲存在乙個txt檔案中,結果可知沒什麼後台。發現有 user.php.bak 直接是乙個userinfo類,三個屬性,get函式中存在ssrf,且沒有過濾。curl可用file協議,blog屬性呼叫了ge...
審計練習3 網鼎盃 2018 Fakebook
平台 buuoj.cn 開啟靶機 有個登入和註冊,開啟登入框看看 萬能密碼,sql注入fuzz,弱密碼全跑一遍,沒什麼變化,那就註冊看看。進去之後出現使用者記錄。點進使用者名稱看看,這是注意到url 有可能存在注入,試著讓他報錯。單引號測試 可以看到除了資料庫錯誤外,還直接顯示出了物理路徑。把東西先...
網鼎盃2020朱雀組 web
nmap那題就基本命令然後還有乙個別的方法。用的是nmap,提示 一開始以為是ping命令,後來發現過濾了php。後來試了下nmap的命令組合成功了。payload il flag on flag.txt 存入flag.txt之後直接訪問就行了 php escapeshell 命令執行 因為過濾了p...