一、環境搭建
- 熊海cms v1.0源碼
- windows 7
- phpstudy2016(php 5.4.45)
- seay源代碼審計系統
注意搭建環境時將路徑中的中文改成英文
二、漏洞列表
seay 報出 34 個可能的漏洞,不是很多可以再結合容易出漏洞的功能點逐一看一下
2.1文件包含
先檢查第一個可疑漏洞,打開 /index.php 文件,明顯的文件包含漏洞,$_GET['r'] 未經過濾直接被 include 包含,但是添加了 php 后綴
一般文件包含漏洞都會結合圖片馬一起利用,登錄到后台發現資料設置處可以上傳頭像,看一下處理上傳圖片的代碼 /admin/files/manageinfo.php 沒有什么過濾,但是包含了 /inc/up.class.php,上傳功能僅對文件后綴進行了判斷,白名單:jpg|jpeg|gif|bmp|png,剛好可以上傳圖片馬
上傳圖片馬,后台直接顯示出路徑,接下來包含圖片馬后還需要截斷 php 后綴,具體操作和限制條件可以參考我這篇 https://www.cnblogs.com/wkzb/p/12732078.html 博客的 2.7 小節
/admin/index.php 也存在同樣的文件包含漏洞,這里就不詳細分析了
2.2報錯注入
審計一下后台登錄的代碼 /admin/files/login.php,首先程序用POST方式接收參數,然后未經任何過濾進行了用戶名校驗,如果用戶名存在繼續進行密碼校驗。這里計算傳遞的 password 變量的 md5,然后拿 md5 值與數據庫里面的密碼進行核對
可以通過報錯注入利用這個漏洞,順便寫一下 updatexml 報錯注入原理。MySQL 5.1.5 版本中添加了對XML文檔進行查詢和修改的兩個函數:extractvalue、updatexml
UPDATEXML (XML_document, XPath_string, new_value);
- 第一個參數:XML_document是String格式,為XML文檔對象的名稱,文中為Doc
- 第二個參數:XPath_string (Xpath格式的字符串)
- 第三個參數:new_value,String格式,替換查找到的符合條件的數據
因此需要在第二個參數中插入不屬於Xpath格式的內容,即可引發報錯
payload 如下
1' and updatexml(1,concat(0x7e,(SELECT database()),0x7e),1)#爆庫 1' and updatexml(1,concat(0x7e,(select table_name from information_schema.tables where table_schema=database() limit 6,1),0x7e),1)#爆表 1' and updatexml(1,concat(0x7e,(select column_name from information_schema.columns where table_name='manage' limit 3,1),0x7e),1)#爆字段 1' or updatexml(1,concat((select concat(0x7e,password,0x7e) from manage)),1) #爆密碼
但是由於 updatexml 最大長度是 32 位,所以要進行兩次報錯注入拼接密碼 md5 值
1' or updatexml(1,concat((select concat(0x7e,password) from manage)),0) # 1' or updatexml(1,concat((select concat(password,0x7e) from manage)),0) #
/admin/files/newlink.php 也有程序用POST方式接收參數,然后未經任何過濾插入數據庫的問題,用剛剛的 payload 可以得到結果,這里不詳細分析了
2.3垂直越權
/inc/checklogin.php 是一個判斷管理員的程序,如果COOKIE中 user 參數為空,那么就跳轉到登陸窗,很容易利用這個漏洞,抓包添加user字段即直接進入后台管理
2.4CSRF
后台管理員存在文件刪除的功能,/inc/checklogin.php 驗證是否是管理員,GET傳遞的 delete 參數直接插入數據庫刪除對應的文件
利用一下這個漏洞,登錄管理員賬號后,點擊如下鏈接,成功刪除文章
http://192.168.25.130/isea_v1.0/admin/?r=wzlist&delete=8
2.5存儲型XSS
留言功能很容易出現存儲型XSS,/files/contact.php 頁面有留言功能,留言后 /files/submit.php 頁面 insert 插入數據表
補充一下 textarea 標簽里的內容在瀏覽器里會自動編碼成實體字符,例如
<textarea><script>alert(1)</script></textarea>
利用時需要先跳出 textarea 標簽(這里不適用,因為在 /files/submit.php 中還會過濾 content 內容)
</textarea><script>alert(1);</script>
利用一下漏洞,由於這里有一些代碼中相對地址的不同,把源代碼直接放在根目錄跳轉時不會發生錯誤(原來源碼是放在 /isea_v1.0/ 下進行測試),雖然這里的 content 進行了嚴格的過濾,但是 name、mail、url 都沒有進行過濾,可以直接提交 js 代碼上去,但是要注意利用時注意閉合標簽,以昵稱為例,構造一個 payload,后台管理員處可以成功彈窗
<script>alert(1);</script>','1','1','1','1','1','1','1','1'),('1','1','1','1
2.6反射型XSS
還是在 /files/contact.php 頁面,顯示頁碼的 page 參數沒有任何過濾,產生反射型XSS漏洞,但是利用起來很雞肋
三、總結
這次 cms 的審計難度較 bluecms 簡單一點,對新手友好,鍛煉思路還是很好的。Seay 誤報還是挺多的,要自己多留意容易出漏洞的功能點。
參考:
http://pines404.online/2019/10/20/%E4%BB%A3%E7%A0%81%E5%AE%A1%E8%AE%A1/%E7%86%8A%E6%B5%B7CMS/
https://www.cnblogs.com/richardlee97/p/10600103.html