예제 #1
0
    def test_parsing(self):
        capture    = open("tests/pptp.cap")
        reader     = ChapPacketReader(capture)
        handshakes = MultiChapStateManager()

        for packet in reader:
            handshakes.addHandshakePacket(packet)

        complete = handshakes.getCompletedHandshakes()

        assert len(complete) == 1

        for server in complete:
            for client in complete[server]:
                c1, c2, c3 = complete[server][client].getCiphertext()
                plaintext  = complete[server][client].getPlaintext()
                username   = complete[server][client].getUserName()

                assert username == "moxie"

                hash = nthash.raw_nthash('bPCFyF2uL1p5Lg5yrKmqmY')

                print "NT Hash: %s" % binascii.hexlify(hash)

                key1 = hash[0:7]
                key1 = des.expand_des_key(key1)

                key2 = hash[7:14]
                key2 = des.expand_des_key(key2)

                key3 = hash[14:16]
                key3 += (chr(0x00) * 5)
                key3 = des.expand_des_key(key3)

                result1 = des.des_encrypt_block(key1, plaintext)
                result2 = des.des_encrypt_block(key2, plaintext)
                result3 = des.des_encrypt_block(key3, plaintext)

                print "DES Encryption 1: %s" % binascii.hexlify(result1)
                print "C1: %s" % binascii.hexlify(c1)
                print "C2: %s" % binascii.hexlify(c2)
                print "C3: %s" % binascii.hexlify(c3)

                assert result1 == c1
                assert result2 == c2
                assert result3 == c3
예제 #2
0
    def execute(self):
        inputFile = self._getInputFile()
        handshakes = MultiChapStateManager()
        capture = open(inputFile)
        reader = ChapPacketReader(capture)

        for packet in reader:
            handshakes.addHandshakePacket(packet)

        complete = handshakes.getCompletedHandshakes()

        for server in complete:
            for client in complete[server]:
                print "Got completed handshake [%s --> %s]" % (client, server)

                c1, c2, c3 = complete[server][client].getCiphertext()
                plaintext = complete[server][client].getPlaintext()
                username = complete[server][client].getUserName()
                k3 = self._getK3(plaintext, c3)

                self._printParameters(username, plaintext, c1, c2, c3, k3)