first packet in RDP basic security layer

This commit is contained in:
speyrefitte
2014-12-09 18:01:47 +01:00
parent 551af0aa7a
commit 92c642ffed
36 changed files with 391 additions and 324 deletions

View File

@@ -21,12 +21,12 @@
Use to manage RDP stack in twisted
"""
from rdpy.network import layer
from rdpy.base.error import CallPureVirtualFuntion, InvalidValue
from rdpy.core import layer
from rdpy.core.error import CallPureVirtualFuntion, InvalidValue
import pdu.layer
import pdu.data
import pdu.caps
import rdpy.base.log as log
import rdpy.core.log as log
import tpkt, x224, mcs, gcc, sec
class RDPClientController(pdu.layer.PDUClientListener):
@@ -39,7 +39,7 @@ class RDPClientController(pdu.layer.PDUClientListener):
#PDU layer
self._pduLayer = pdu.layer.Client(self)
#secure layer
self._secLayer = sec.SecLayer(self._pduLayer)
self._secLayer = sec.Client(self._pduLayer)
#multi channel service
self._mcsLayer = mcs.Client(self._secLayer)
#transport pdu layer
@@ -72,7 +72,7 @@ class RDPClientController(pdu.layer.PDUClientListener):
"""
@summary: Set particular flag in RDP stack to avoid wall-paper, theme, menu animation etc...
"""
self._pduLayer._info.extendedInfo.performanceFlags.value = pdu.data.PerfFlag.PERF_DISABLE_WALLPAPER | pdu.data.PerfFlag.PERF_DISABLE_MENUANIMATIONS | pdu.data.PerfFlag.PERF_DISABLE_CURSOR_SHADOW | pdu.data.PerfFlag.PERF_DISABLE_THEMING | pdu.data.PerfFlag.PERF_DISABLE_FULLWINDOWDRAG
self._secLayer._info.extendedInfo.performanceFlags.value = sec.PerfFlag.PERF_DISABLE_WALLPAPER | sec.PerfFlag.PERF_DISABLE_MENUANIMATIONS | sec.PerfFlag.PERF_DISABLE_CURSOR_SHADOW | sec.PerfFlag.PERF_DISABLE_THEMING | sec.PerfFlag.PERF_DISABLE_FULLWINDOWDRAG
def setScreen(self, width, height):
"""
@@ -90,8 +90,8 @@ class RDPClientController(pdu.layer.PDUClientListener):
@param username: username of session
"""
#username in PDU info packet
self._pduLayer._info.userName.value = username
self._pduLayer._licenceManager._username = username
self._secLayer._info.userName.value = username
self._secLayer._licenceManager._username = username
def setPassword(self, password):
"""
@@ -99,20 +99,20 @@ class RDPClientController(pdu.layer.PDUClientListener):
@param password: password of session
"""
self.setAutologon()
self._pduLayer._info.password.value = password
self._secLayer._info.password.value = password
def setDomain(self, domain):
"""
@summary: Set the windows domain of session
@param domain: domain of session
"""
self._pduLayer._info.domain.value = domain
self._secLayer._info.domain.value = domain
def setAutologon(self):
"""
@summary: enable autologon
"""
self._pduLayer._info.flag |= pdu.data.InfoFlag.INFO_AUTOLOGON
self._secLayer._info.flag |= sec.InfoFlag.INFO_AUTOLOGON
def setKeyboardLayout(self, layout):
"""
@@ -129,7 +129,7 @@ class RDPClientController(pdu.layer.PDUClientListener):
@summary: set hostname of machine
"""
self._mcsLayer._clientSettings.getBlock(gcc.MessageType.CS_CORE).clientName.value = hostname[:15] + "\x00" * (15 - len(hostname))
self._pduLayer._licenceManager._hostname = hostname
self._secLayer._licenceManager._hostname = hostname
def setRDPBasicSecurity(self):
"""
@@ -332,8 +332,10 @@ class RDPServerController(pdu.layer.PDUServerListener):
self._serverObserver = []
#build RDP protocol stack
self._pduLayer = pdu.layer.Server(self)
#secure layer
self._secLayer = sec.Server(self._pduLayer)
#multi channel service
self._mcsLayer = mcs.Server(self._pduLayer)
self._mcsLayer = mcs.Server(self._secLayer)
#transport pdu layer
self._x224Layer = x224.Server(self._mcsLayer, privateKeyFileName, certificateFileName)
#transport packet (protocol layer)
@@ -359,21 +361,21 @@ class RDPServerController(pdu.layer.PDUServerListener):
@summary: Must be call after on ready event else always empty string
@return: username send by client may be an empty string
"""
return self._pduLayer._info.userName.value
return self._secLayer._info.userName.value
def getPassword(self):
"""
@summary: Must be call after on ready event else always empty string
@return: password send by client may be an empty string
"""
return self._pduLayer._info.password.value
return self._secLayer._info.password.value
def getDomain(self):
"""
@summary: Must be call after on ready event else always empty string
@return: domain send by client may be an empty string
"""
return self._pduLayer._info.domain.value
return self._secLayer._info.domain.value
def getCredentials(self):
"""
@@ -492,7 +494,8 @@ class ClientFactory(layer.RawLayerClientFactory):
#retrieve controller
x224Layer = tpktLayer._presentation
mcsLayer = x224Layer._presentation
pduLayer = mcsLayer._channels[mcs.Channel.MCS_GLOBAL_CHANNEL]
secLayer = mcsLayer._channels[mcs.Channel.MCS_GLOBAL_CHANNEL]
pduLayer = secLayer._presentation
controller = pduLayer._listener
controller.onClose()
@@ -534,7 +537,8 @@ class ServerFactory(layer.RawLayerServerFactory):
#retrieve controller
x224Layer = tpktLayer._presentation
mcsLayer = x224Layer._presentation
pduLayer = mcsLayer._channels[mcs.Channel.MCS_GLOBAL_CHANNEL]
secLayer = mcsLayer._channels[mcs.Channel.MCS_GLOBAL_CHANNEL]
pduLayer = secLayer._presentation
controller = pduLayer._listener
controller.onClose()