0X00 前言
團隊A師傅發來個站,問我有沒有得搞
正好在搞其他的站,卡住了,開干換個思路。
0x01 信息收集
開burp抓了下包,目標設置了url重寫,開了報錯,我們隨意輸入一個控制器就直接報錯。
獲取到web絕對路徑。
抓包發現這樣的請求
隨手試了一下burpsuite的dnslog,發現請求過去並回顯了,猜測后端使用file_get_contens來獲取。
一個可回顯ssrf,有什么用呢?
打內網?
嘗試file協議,嘗試讀取文件,發現可以讀。
但發現返回的內容不完整,猜測有截斷,用php://filter協議base64編碼一下繞過讀取。
解碼
有一個任意文件讀取有什么用呢?
在這之前,其實是有用nmap掃了一下其他端口
開了挺多端口的,一個個測了一下發現999端口開着phpmyadmin。
結合任意文件讀取,那么只要我們讀取出mysql的賬號密碼即可進入phpmyadmin,之后的getshell方法就很多了。
thinkphp的目錄結構根據官方文檔一般都長這樣。
而數據庫文件一般是放在common/conf下面的。
簡單猜了會,嘗試讀取index控制器。
之前的報錯其實已經放出了index控制器在那個模塊下面了,就是默認的home模塊。
讀取
沒有返回,猜測是application目錄改名了,結合之前的審計經驗,一般會改為app。
再讀取,成功。
接下來就是猜數據庫文件存放的位置
一般會存放在common模塊下面的config.php或者db.php,嘗試了一下config.php,命中。
Base64解碼得出源文件。
拿到賬號密碼,直奔phpmyadmin。
輸入賬號密碼,回車,登陸成功。
后面拿shell就給A師傅去弄了。
0x02 URL Rewrite的一些疑惑
題外話:因為之前幫朋友搞了一些站也是這樣的,有文件上傳直接拿shell,但是沒有辦法訪問,訪問提示:
有拿到源碼,.htaccess里面有對url重寫,比如長這樣的。
之前上傳沒法訪問一直以為是重寫的問題。
但其實也可能不是,有可能是馬兒被殺了緣故,當文件不存在的時候才會提示這樣。
在本地測試,拉了個thinkphp 3.2.3的項目,htaccess一樣配置。
在根目錄下寫入個test.php,內容為phpinfo。可以直接訪問。
刪掉test.php,報錯
換到二級目錄下繼續測試:
不存在文件的時候同樣提示:
后面深入研究了一下那份源碼發現也不是馬兒被殺了的原因,應該由於它的分割符問題。
不是傳統的/,而是點號,傳統的文件路徑訪問與路由沖突了,最終也就沒辦法訪問到uploads目錄下的shell。
沒想出對於這種路由有啥辦法可以解決的,如果有知道的師傅歡迎評論交流。
更新:那個有問題的站也拿下了,原因確實是沒有文件導致的,至於為什么沒有寫入成功又是另外一回事了。
更新2:感謝love17師傅的評論,關於htaccess的理解之前確實不對,刪掉了,不誤人子弟。
0x03 拿shell
由於上面的疑惑,生成了我錯誤的認知,導致我以為拿shell會比較麻煩,我的思路是phpmyadmin 日志方式導出一個符合thinkphp路由的shell到相應的控制器下,以繞過路由的檢測。
但A師傅說直接into outfile 到images目錄就可以了,那就是mysql版本不高也沒有secure_file_priv的問題,直接導出shell了。
我:emmmmm
0x04 總結
對於rewrite語法,路由不熟悉導致了后續一系列問題,錯誤的認知還把自己帶坑里面去了。
多開腦子容易秀逗。。