monkey/chaos_monkey/exploit/rdpgrinder.py

78 lines
2.1 KiB
Python

import socket
from rdpy.protocol.rdp import rdp
from twisted.internet import reactor
__author__ = 'itamar'
class RDPClient(rdp.RDPClientObserver):
def __init__(self, controller, width, height):
super(RDPClient, self).__init__(controller)
self._width = width
self._height = height
def onUpdate(self, destLeft, destTop, destRight, destBottom, width, height, bitsPerPixel, isCompress, data):
print "onUpdate", destLeft, destTop, destRight, destBottom, width, height, bitsPerPixel, isCompress, len(data)
def onReady(self):
"""
@summary: Call when stack is ready
"""
print "onReady"
def onClose(self):
"""
@summary: Call when stack is close
"""
print "onClose"
def closeEvent(self, e):
print "closeEvent", e
class RDPClientFactory(rdp.ClientFactory):
def __init__(self):
self._username = "Administrator"
self._password = "Password1!"
self._domain = ""
self._keyboard_layout = "en"
self._optimized = False
self._security = "rdp" # "ssl"
self._width = 200
self._height = 200
def __repr__(self):
return "<RDPClientFactory %dx%d>" % (self._width, self._height)
def buildObserver(self, controller, addr):
"""
@summary: Build RFB observer
We use a RDPClient as RDP observer
@param controller: build factory and needed by observer
@param addr: destination address
@return: RDPClientQt
"""
#create client observer
self._client = RDPClient(controller, self._width, self._height)
controller.setUsername(self._username)
controller.setPassword(self._password)
controller.setDomain(self._domain)
controller.setKeyboardLayout(self._keyboard_layout)
controller.setHostname(socket.gethostname())
if self._optimized:
controller.setPerformanceSession()
controller.setSecurityLevel(self._security)
return self._client
reactor.connectTCP("10.0.0.1", 3389, RDPClientFactory())
reactor.run()