Report abuse

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
from twisted.internet import reactor
from twisted.internet import protocol
import pickle
import base64
import traceback
import logging

logger = logging.getLogger('fickle')
logging.basicConfig(filename="/tmp/haderp.log",filemode="a+")
logger.setLevel(logging.INFO)

class Haderper(protocol.Protocol):
    def dataReceived(self, data):
        logger.info("[*] Rcvd (%s:%s): %s" % (self.transport.getPeer().host, sel
f.transport.getPeer().port, data))
        print "[*] Rcvd (%s:%s): %s" % (self.transport.getPeer().host, self.tran
sport.getPeer().port, data)
        result = checkCommand(data.strip())
        if result == "exit":
            self.closed()
        else:
            self.transport.write(result + "\n> ")
            logger.info("[*] Sent (%s:%s): %s" % (self.transport.getPeer().host,
 self.transport.getPeer().port, result))
            print "[*] Sent (%s:%s): %s" % (self.transport.getPeer().host, self.
transport.getPeer().port, result)

    def connectionMade(self):
        logger.info("[*] Connection from: %s:%s" % (self.transport.getPeer().hos
t, self.transport.getPeer().port))
        print "[*] Connection from: %s:%s" % (self.transport.getPeer().host, sel
f.transport.getPeer().port)
        self.transport.write("""
-----------------------------
| Welcome to Haderper!      |
| Please enter your command |
-----------------------------
> """)

    def closed(self):
        self.transport.write("Exiting...\n")
        self.transport.loseConnection()

def checkCommand(command):
    if command == 'help':
        result = """
Haderper v0.1-alpha

Command help:

help        - this screen
exec        - execute a command
derp        - derp a string
underp      - underp a string
logout/exit - disconnect
"""
        return result
    elif command.split(" ")[0] == "exec":
        result = "Insufficient permissions"
        return result
    elif command.split(" ")[0] == "derp":
        try:
            derped = derper(command.split(" ")[1])
            return derped
        except:
            result = "Error: plaintext string not supplied"
            return result
    elif command.split(" ")[0] == "underp":
        try:
            underped = underper(command.split(" ")[1])
            return underped
        except IndexError:
            result = "Error: derped string not supplied"
            return result
        except:
            tb = traceback.format_exc()
            return tb
    elif command.split(" ")[0] == "logout" or command.split(" ")[0] == "exit":
            result = "exit"
            return result
    else:
        result = "Unknown command."
        return result

def derper(string):
    derped = pickle.dumps(string)
    print base64.b64encode(derped)
    return base64.b64encode(derped)

def underper(stream):
    underped = pickle.loads(base64.b64decode(stream))
    return underped

def main():
    factory = protocol.ServerFactory()
    factory.protocol = Haderper
    reactor.listenTCP(8000,factory)
    print "[*] Listening on 8000/tcp"
    logger.info("[*] Listening on 8000/tcp")
    reactor.run()

if __name__ == '__main__':
    main()