網鼎盃 2018 Fakebook 復現

2022-08-21 15:18:12 字數 3233 閱讀 4424

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...