github.com/n00py/Slackor@v0.0.0-20200610224921-d007fcea1740/impacket/tests/SMB_RPC/test_mgmt.py (about)

     1  ###############################################################################
     2  #  Tested so far: 
     3  #
     4  #  Not yet:
     5  #
     6  # Shouldn't dump errors against a win7
     7  #  
     8  ################################################################################
     9  
    10  from __future__ import division
    11  from __future__ import print_function
    12  import unittest
    13  try:
    14      import ConfigParser
    15  except ImportError:
    16      import configparser as ConfigParser
    17  
    18  from impacket.dcerpc.v5 import transport
    19  from impacket.dcerpc.v5 import mgmt
    20  
    21  
    22  class MGMTTests(unittest.TestCase):
    23      def connect(self):
    24          rpctransport = transport.DCERPCTransportFactory(self.stringBinding)
    25          if len(self.hashes) > 0:
    26              lmhash, nthash = self.hashes.split(':')
    27          else:
    28              lmhash = ''
    29              nthash = ''
    30          if hasattr(rpctransport, 'set_credentials'):
    31              # This method exists only for selected protocol sequences.
    32              rpctransport.set_credentials(self.username,self.password, self.domain, lmhash, nthash)
    33          dce = rpctransport.get_dce_rpc()
    34          dce.connect()
    35          dce.bind(mgmt.MSRPC_UUID_MGMT, transfer_syntax = self.ts)
    36  
    37          return dce, rpctransport
    38  
    39      def test_inq_if_ids(self):
    40          dce, transport = self.connect()
    41  
    42          request = mgmt.inq_if_ids()
    43          resp = dce.request(request)
    44          resp.dump()
    45          #for i in range(resp['if_id_vector']['count']):
    46          #    print bin_to_uuidtup(resp['if_id_vector']['if_id'][i]['Data'].getData())
    47          #    print
    48  
    49      def test_hinq_if_ids(self):
    50          dce, transport = self.connect()
    51  
    52          resp = mgmt.hinq_if_ids(dce)
    53          resp.dump()
    54  
    55      def test_inq_stats(self):
    56          dce, transport = self.connect()
    57  
    58          request = mgmt.inq_stats()
    59          request['count'] = 40
    60          resp = dce.request(request)
    61          resp.dump()
    62  
    63      def test_hinq_stats(self):
    64          dce, transport = self.connect()
    65  
    66          resp = mgmt.hinq_stats(dce)
    67          resp.dump()
    68  
    69      def test_is_server_listening(self):
    70          dce, transport = self.connect()
    71  
    72          request = mgmt.is_server_listening()
    73          resp = dce.request(request, checkError=False)
    74          resp.dump()
    75  
    76      def test_his_server_listening(self):
    77          dce, transport = self.connect()
    78  
    79          resp = mgmt.his_server_listening(dce)
    80          resp.dump()
    81  
    82      def test_stop_server_listening(self):
    83          dce, transport = self.connect()
    84  
    85          request = mgmt.stop_server_listening()
    86          try:
    87              resp = dce.request(request)
    88              resp.dump()
    89          except Exception as e:
    90              if str(e).find('rpc_s_access_denied') < 0:
    91                  raise
    92  
    93      def test_hstop_server_listening(self):
    94          dce, transport = self.connect()
    95  
    96          try:
    97              resp = mgmt.hstop_server_listening(dce)
    98              resp.dump()
    99          except Exception as e:
   100              if str(e).find('rpc_s_access_denied') < 0:
   101                  raise
   102  
   103      def test_inq_princ_name(self):
   104          dce, transport = self.connect()
   105  
   106          request = mgmt.inq_princ_name()
   107          request['authn_proto'] = 0
   108          request['princ_name_size'] = 32
   109          resp = dce.request(request, checkError=False)
   110          resp.dump()
   111  
   112      def test_his_server_listening(self):
   113          dce, transport = self.connect()
   114  
   115          resp = mgmt.hinq_princ_name(dce)
   116          resp.dump()
   117  
   118  
   119  class SMBTransport(MGMTTests):
   120      def setUp(self):
   121          MGMTTests.setUp(self)
   122          configFile = ConfigParser.ConfigParser()
   123          configFile.read('dcetests.cfg')
   124          self.username = configFile.get('SMBTransport', 'username')
   125          self.domain   = configFile.get('SMBTransport', 'domain')
   126          self.serverName = configFile.get('SMBTransport', 'servername')
   127          self.password = configFile.get('SMBTransport', 'password')
   128          self.machine  = configFile.get('SMBTransport', 'machine')
   129          self.hashes   = configFile.get('SMBTransport', 'hashes')
   130          self.stringBinding = r'ncacn_np:%s[\pipe\epmapper]' % self.machine
   131          self.ts = ('8a885d04-1ceb-11c9-9fe8-08002b104860', '2.0')
   132  
   133  class TCPTransport(MGMTTests):
   134      def setUp(self):
   135          MGMTTests.setUp(self)
   136          configFile = ConfigParser.ConfigParser()
   137          configFile.read('dcetests.cfg')
   138          self.username = configFile.get('TCPTransport', 'username')
   139          self.domain   = configFile.get('TCPTransport', 'domain')
   140          self.serverName = configFile.get('TCPTransport', 'servername')
   141          self.password = configFile.get('TCPTransport', 'password')
   142          self.machine  = configFile.get('TCPTransport', 'machine')
   143          self.hashes   = configFile.get('TCPTransport', 'hashes')
   144          self.stringBinding = r'ncacn_ip_tcp:%s[135]' % self.machine
   145          self.ts = ('8a885d04-1ceb-11c9-9fe8-08002b104860', '2.0')
   146  
   147  class SMBTransport64(MGMTTests):
   148      def setUp(self):
   149          MGMTTests.setUp(self)
   150          configFile = ConfigParser.ConfigParser()
   151          configFile.read('dcetests.cfg')
   152          self.username = configFile.get('SMBTransport', 'username')
   153          self.domain   = configFile.get('SMBTransport', 'domain')
   154          self.serverName = configFile.get('SMBTransport', 'servername')
   155          self.password = configFile.get('SMBTransport', 'password')
   156          self.machine  = configFile.get('SMBTransport', 'machine')
   157          self.hashes   = configFile.get('SMBTransport', 'hashes')
   158          self.stringBinding = r'ncacn_np:%s[\pipe\epmapper]' % self.machine
   159          self.ts = ('71710533-BEBA-4937-8319-B5DBEF9CCC36', '1.0')
   160  
   161  class TCPTransport64(MGMTTests):
   162      def setUp(self):
   163          MGMTTests.setUp(self)
   164          configFile = ConfigParser.ConfigParser()
   165          configFile.read('dcetests.cfg')
   166          self.username = configFile.get('TCPTransport', 'username')
   167          self.domain   = configFile.get('TCPTransport', 'domain')
   168          self.serverName = configFile.get('TCPTransport', 'servername')
   169          self.password = configFile.get('TCPTransport', 'password')
   170          self.machine  = configFile.get('TCPTransport', 'machine')
   171          self.hashes   = configFile.get('TCPTransport', 'hashes')
   172          self.stringBinding = r'ncacn_ip_tcp:%s[135]' % self.machine
   173          self.ts = ('71710533-BEBA-4937-8319-B5DBEF9CCC36', '1.0')
   174  
   175  
   176  # Process command-line arguments.
   177  if __name__ == '__main__':
   178      import sys
   179      if len(sys.argv) > 1:
   180          testcase = sys.argv[1]
   181          suite = unittest.TestLoader().loadTestsFromTestCase(globals()[testcase])
   182      else:
   183          #suite = unittest.TestLoader().loadTestsFromTestCase(SMBTransport64)
   184          suite = unittest.TestLoader().loadTestsFromTestCase(SMBTransport)
   185          suite.addTests(unittest.TestLoader().loadTestsFromTestCase(TCPTransport))
   186          suite.addTests(unittest.TestLoader().loadTestsFromTestCase(SMBTransport64))
   187          suite.addTests(unittest.TestLoader().loadTestsFromTestCase(TCPTransport64))
   188      unittest.TextTestRunner(verbosity=1).run(suite)