最近隔離閒的無聊,實在沒什麼事情就開始想練習審計
想了想因為一直都非常好奇 h 站的運行模式,於是目標就鎖定在了 h 站的程式上。
這種視頻站的原始碼能教出名字的其實一共也沒幾個,之前還有蘋果和海洋,現在好像這兩個已經因為國內打擊盜版而死亡(轉入地下)了。所以我其實也就只知道剩下的久草了。
說實話以前我以為久草也是視頻站程式,只不過被巧妙的利用罷了。然而當我第一次打開他的官網論壇的時候就被震驚了。
光明正大的 ghs
(本圖為官方提供模板)
不管了,把原始碼下下來開始審計
這裡下了最新的版本
│─adminx //後台目錄
│─assets //後台樣式表
│─class //後台欄目
│─Jccms_json //存儲數據
│─JCSQL //視頻數據
│─lib //數據模塊
│─static //播放器文件
│─template //模板
│─index.php //入庫文件
(官方提供的結構說明)
拿到原始碼,放到 phpstudy 裡,首先去安裝,然而沒有找到常見的 install 目錄。看了看說明發現根本就不用安裝,這個時候就疑惑了。不用安裝,那它的數據是存在哪裡的呢?
直接訪問首頁,發現視頻什麼的都有了,猜測是直接向遠程獲取的(這也解決了視頻存儲問題,我就說那些小電影站不可能把文件全放本地)
開始幹
首先用 Seay 審計打開
先自動審計一下,按照預置規則來,應該不會漏下什麼
首先要找漏洞,我們就要找 “大” 的。所以理所當然的找前台漏洞,想了想這網站的性質來說也不會有什麼交互,直接找注入吧。找了一會發現整個程式根本就是無 SQL 化。SQL 注入扑街~~
不過在找到時候發現了它用戶認證的方式
/JCSQL/Admin/Security/AdminUser.php
這個文件裡存放了用戶帳號密碼,充當了數據庫的作用。以文本形式保存不會出現 SQL 注入的風險,以 PHP 的形式存在,又能避免被下載。妙啊~
然後看看你第三行,顧名思義是 IP 過濾。
後台裡還真就有這個功能
那麼問題來了,當我們修改信息的時候其實就是讀寫了文本。而文本又是以 php 存在的。那麼,如果我們插入適當的 payload,其實就可以直接形成任意文件讀寫。好了,我們再來看一看。IPPASS 的傳值
好的,直接字符串寫入了。並沒有其他的安全函數進行過濾。這個程式本身存在一個過濾函數。
經典防護
(好像還有一個什麼函數,結果寫文章時找不到了)
那麼我們來利用這個任意文件讀寫漏洞。我們的目標是 AdminUser.php 文件,首先通過瀏覽器訪問,看看是否 403 之類的。訪問後出現空白,說明可以任意用戶訪問,但是無顯示內容(代碼就三行,也真沒顯示的東西)
回到後台,在白名單處填寫我們的 payload
結合代碼原來的樣子,我們應該閉合第一個單引號,然後插入我們的代碼,再閉合後面的單引號和括號之類的。
大致來說就是這麼個格式');payload; //'127.0.0.1
加入我們想寫入一個文件:
');$myfile = fopen ("1.txt", "w") ;$txt = "奧裡給";fwrite ($myfile, $txt); //'127.0.0.1
寫入完成後再訪問一下 AdminUser.php,讓代碼執行。然後訪問同目錄下的 1.txt 即可看到奧力給
到這裡基本就完了,因為這個 cms 太小了,結構簡單並且巧妙,沒什麼好玩的了。
最後再來一個反射 xss
自動審計搜索出三個 XSS 可疑點
我們點進去第一個看一看
可以看到再 script 的 src 裡直接輸出了 GET 參數 Play
那麼同樣的直接構造即可,姿勢太多了
訪問這個文件的時候只要加上參數 XXXX.PHP?Paly=payload
即可