Ejemplo n.º 1
0
    def test(self):
        from librairies.keys_wrapper import PublicKey
        import base64

        key1_data = """-----BEGIN PUBLIC KEY-----
        MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCtbdQAzdaO7GHXxUsVZ+FmcddA
        Hrugq+azkVdfgnHu6teK3hDQlk0BdNz9LlQT3BoHXg5/g9FDv3bBwaulpQEQPlGM
        UXEUnQAJ69KSVaLxHb5Wmb0vqX/qySKc8Hseqt5wbXklOrnZeHJ3Hm3mUeIplpWP
        f19C6goN3bUGrrniwwIDAQAB
        -----END PUBLIC KEY-----"""
        key2_data = """-----BEGIN PUBLIC KEY-----
        MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCtbdQAzdaO7GHXxUsVZ+FmcddA
        Hrugq+azkVdfgnHu6teK3hDQlk0BdNz9LlQT3BoHXg5/g9FDv3bBwaulpQEQPlGM
        UXEUnQAJ69KSVaLxHb5Wmb0vqX/qySKc8Hseqt5wbXklOrnZeHJ3Hm3mUeIplpWP
        f19C6goN3bUGrrniwwIDBTy3
        -----END PUBLIC KEY-----"""

        cipher1 = base64.b64_decode(
            "BzFd4riBUZdFuPCkB3LOh+5iyMImeQ/saFLVD+ca2L8VKSz0+wtTaL55RRpHBAQdl24Fb3XyVg2N9UDcx3slT+vZs7tr03W7oJZxVp3M0ihoCwer3xZNieem8WZQvQvyNP5s5gMT+K6pjB9hDFWWmHzsn7eOYxRJZTIDgxA4k2w="
        )
        cipher2 = base64.b64_decode(
            "jmVRiKyVPy1CHiYLl8fvpsDAhz8rDa/Ug87ZUXZ//rMBKfcJ5MqZnQbyTJZwSNASnQfgel3J/xJsjlnf8LoChzhgT28qSppjMfWtQvR6mar1GA0Ya1VRHkhggX1RUFA4uzL56X5voi0wZEpJITUXubbujDXHjlAfdLC7BvL/5+w="
        )

        result = self.attack(
            [PublicKey(key1_data), PublicKey(key2_data)],
            [
                cipher1,
                cipher2,
            ],
        )
        print(result)
        return result != (None, None)
Ejemplo n.º 2
0
def main():
  if len(sys.argv) != 4:
    usage()

  master_key = open(sys.argv[1], 'rb').read()
  hudson_secret_key = open(sys.argv[2], 'rb').read()
  hashed_master_key = sha256(master_key).digest()[:16]
  o = AES.new(hashed_master_key, AES.MODE_ECB)
  secret = o.decrypt(hudson_secret_key)

  secret = secret[:-16]
  secret = secret[:16]

  credentials = open(sys.argv[3]).read()
  passwords = re.findall(r'<p(?:assword|rivateKey)>\{?(.*?)\}?</p(?:assword|rivateKey)>', credentials)

  # You can find the password format at https://github.com/jenkinsci/jenkins/blob/master/core/src/main/java/hudson/util/Secret.java#L167-L216

  for password in passwords:
    p = b64_decode(bytes(password, 'utf-8'))

    # Get payload version
    payload_version = p[0]
    if payload_version == 1:
      print(decryptNewPassword(secret, p))
    else: # Assuming we don't have a V2 payload, seeing as current crypto isn't horrible that's a fair assumption
      print(decryptOldPassword(secret,p))
Ejemplo n.º 3
0
def decode(data):
    """
    base64 decode helper for jinja

    :param data: base64 encodeable bytes-object
    :type model: byte
    :returns: decodeed bytes-object
    :rtype: byte
    """
    return b64_decode(data)
Ejemplo n.º 4
0
def decodes(data, code="ascii"):
    """
    base64 decode helper for jinja taking string and returning string

    :param data: base64-encoded string which should be decoded
    :type model: string
    :param code: code to use for bytes en-/decoding (default: ascii)
    :type model: string
    :returns: decoded string
    :rtype: string
    """
    return b64_decode(data.encode(code)).decode(code)
Ejemplo n.º 5
0
def decode(message_file):
    with open(message_file, 'r') as file_message:
        full_message = file_message.read()

    _, message_sig = full_message.split("&message=")
    message, _ = message_sig.split("&sig")

    url_parsed = unquote(message)

    if url_parsed[-2:] != "==":
        url_parsed += '='

    decoded = b64_decode(url_parsed)

    decompressed = decompress(decoded)

    return json.loads(decompressed.decode('utf-8'))
Ejemplo n.º 6
0
def process_ser_log_parser(port):
    node_id = 0
    role = ''
    with Serial(port, BAUDRATE) as ser:
        # discover node_id
        while True:
            _, module, content = LogParser.parse_log_line(
                ser.readline().decode())
            if module is LogModule.MAIN:
                node_id = LogParser.parse_node_id(content)
                if node_id:
                    break

        # discover role
        while True:
            _, module, _ = LogParser.parse_log_line(ser.readline().decode())
            if module is LogModule.MASTER or module is LogModule.SLAVE:
                role = module
                print('node_id: {}, role: {}'.format(node_id, role.value))
                break

        # collect reports
        csv_file = '{}.csv'.format('master' if role is LogModule.MASTER else
                                   'slave-{}'.format(node_id))
        b64_file = '{}.b64'.format('master' if role is LogModule.MASTER else
                                   'slave-{}'.format(node_id))
        with open('{}-{}'.format('rss', csv_file), 'w') as rss_csv, \
             open('{}-{}'.format('acc', csv_file), 'w') as acc_csv, \
             open('{}-{}'.format('rss', b64_file), 'w') as rss_b64, \
             open('{}-{}'.format('acc', b64_file), 'w') as acc_b64:
            rss_writer = DictWriter(rss_csv,
                                    fieldnames=[
                                        'source_id', 'seq_num', 'time_stamp',
                                        'rss_local', 'rss_remote'
                                    ])
            acc_writer = DictWriter(
                acc_csv, fieldnames=[a.name.lower() for a in AccAxis])
            rss_writer.writeheader()
            acc_writer.writeheader()
            # write field names
            while True:
                level, module, content = LogParser.parse_log_line(
                    ser.readline().decode())
                if level is LogLevel.REP:
                    report_type, report_data = LogParser.parse_report(content)
                    assert (isinstance(report_type, ReportType))
                    if report_type is ReportType.RSS:
                        rss_b64.write('{}\n'.format(report_data))
                        rss_writer.writerow(
                            LogParser.parse_rss(b64_decode(report_data)))
                    else:
                        acc_b64.write('{}\n'.format(report_data))
                        acc_writer.writerows(
                            LogParser.parse_acc_xyz(b64_decode(report_data)))
                elif (module is LogModule.MASTER or module is LogModule.SLAVE
                      ) and content == 'Process started':
                    # restart detected, flush and terminate
                    rss_csv.flush()
                    acc_csv.flush()
                    rss_b64.flush()
                    acc_b64.flush()
                    break