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 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206
|
# Impacket - Collection of Python classes for working with network protocols.
#
# Copyright Fortra, LLC and its affiliated companies
#
# All rights reserved.
#
# This software is provided under a slightly modified version
# of the Apache Software License. See the accompanying LICENSE file
# for more information.
#
# Tested so far:
# (h)ElfrOpenBELW
# (h)ElfrOpenELW
# (h)ElfrRegisterEventSourceW
# (h)ElfrReadELW
# (h)ElfrClearELFW
# (h)ElfrBackupELFW
# ElfrReportEventW
# hElfrNumberOfRecords
# hElfrOldestRecordNumber
# Not yet:
# ElfrCloseEL
#
from __future__ import division
from __future__ import print_function
import pytest
import unittest
from six import assertRaisesRegex
from tests.dcerpc import DCERPCTests
from impacket.dcerpc.v5 import even
from impacket.dcerpc.v5.dtypes import NULL
from impacket.dcerpc.v5.rpcrt import DCERPCException, RPC_C_AUTHN_LEVEL_PKT_PRIVACY
class RRPTests(DCERPCTests):
iface_uuid = even.MSRPC_UUID_EVEN
string_binding = r"ncacn_np:{0.machine}[\PIPE\eventlog]"
authn = True
authn_level = RPC_C_AUTHN_LEVEL_PKT_PRIVACY
def test_ElfrOpenBELW(self):
dce, rpctransport = self.connect()
request = even.ElfrOpenBELW()
request['UNCServerName'] = NULL
request['BackupFileName'] = '\\??\\BETO'
request['MajorVersion'] = 1
request['MinorVersion'] = 1
with assertRaisesRegex(self, DCERPCException, "STATUS_OBJECT_NAME_NOT_FOUND"):
dce.request(request)
def test_hElfrOpenBELW(self):
dce, rpctransport = self.connect()
with assertRaisesRegex(self, DCERPCException, "STATUS_OBJECT_NAME_NOT_FOUND"):
even.hElfrOpenBELW(dce, '\\??\\BETO')
def test_ElfrOpenELW(self):
dce, rpctransport = self.connect()
request = even.ElfrOpenELW()
request['UNCServerName'] = NULL
request['ModuleName'] = 'Security'
request['RegModuleName'] = ''
request['MajorVersion'] = 1
request['MinorVersion'] = 1
resp = dce.request(request)
resp.dump()
def test_hElfrOpenELW(self):
dce, rpctransport = self.connect()
resp = even.hElfrOpenELW(dce, 'Security', '')
resp.dump()
def test_ElfrRegisterEventSourceW(self):
dce, rpctransport = self.connect()
request = even.ElfrRegisterEventSourceW()
request['UNCServerName'] = NULL
request['ModuleName'] = 'Security'
request['RegModuleName'] = ''
request['MajorVersion'] = 1
request['MinorVersion'] = 1
with assertRaisesRegex(self, DCERPCException, "STATUS_ACCESS_DENIED"):
dce.request(request)
def test_hElfrRegisterEventSourceW(self):
dce, rpctransport = self.connect()
with assertRaisesRegex(self, DCERPCException, "STATUS_ACCESS_DENIED"):
even.hElfrRegisterEventSourceW(dce, 'Security', '')
def test_ElfrReadELW(self):
dce, rpctransport = self.connect()
resp = even.hElfrOpenELW(dce, 'Security', '')
resp.dump()
request = even.ElfrReadELW()
request['LogHandle'] = resp['LogHandle']
request['ReadFlags'] = even.EVENTLOG_SEQUENTIAL_READ | even.EVENTLOG_FORWARDS_READ
request['RecordOffset'] = 0
request['NumberOfBytesToRead'] = even.MAX_BATCH_BUFF
resp = dce.request(request)
resp.dump()
def test_hElfrReadELW(self):
dce, rpctransport = self.connect()
resp = even.hElfrOpenELW(dce, 'Security', '')
resp.dump()
resp = even.hElfrReadELW(dce, resp['LogHandle'],
even.EVENTLOG_SEQUENTIAL_READ | even.EVENTLOG_FORWARDS_READ,
0, even.MAX_BATCH_BUFF)
resp.dump()
def test_ElfrClearELFW(self):
dce, rpctransport = self.connect()
resp = even.hElfrOpenELW(dce, 'Security', '')
resp.dump()
request = even.ElfrClearELFW()
request['LogHandle'] = resp['LogHandle']
request['BackupFileName'] = '\\??\\c:\\beto2'
with assertRaisesRegex(self, DCERPCException, "STATUS_OBJECT_NAME_INVALID"):
dce.request(request)
def test_hElfrClearELFW(self):
dce, rpctransport = self.connect()
resp = even.hElfrOpenELW(dce, 'Security', '')
resp.dump()
with assertRaisesRegex(self, DCERPCException, "STATUS_OBJECT_NAME_INVALID"):
even.hElfrClearELFW(dce, resp['LogHandle'], '\\??\\c:\\beto2')
def test_ElfrBackupELFW(self):
dce, rpctransport = self.connect()
resp = even.hElfrOpenELW(dce, 'Security', '')
resp.dump()
request = even.ElfrBackupELFW()
request['LogHandle'] = resp['LogHandle']
request['BackupFileName'] = '\\??\\c:\\beto2'
with assertRaisesRegex(self, DCERPCException, "STATUS_OBJECT_NAME_INVALID"):
dce.request(request)
def test_hElfrBackupELFW(self):
dce, rpctransport = self.connect()
resp = even.hElfrOpenELW(dce, 'Security', '')
resp.dump()
with assertRaisesRegex(self, DCERPCException, "STATUS_OBJECT_NAME_INVALID"):
even.hElfrBackupELFW(dce, resp['LogHandle'], '\\??\\c:\\beto2')
def test_ElfrReportEventW(self):
dce, rpctransport = self.connect()
resp = even.hElfrOpenELW(dce, 'Security', '')
resp.dump()
request = even.ElfrReportEventW()
request['LogHandle'] = resp['LogHandle']
request['Time'] = 5000000
request['EventType'] = even.EVENTLOG_ERROR_TYPE
request['EventCategory'] = 0
request['EventID'] = 7037
request['ComputerName'] = 'MYCOMPUTER!'
request['NumStrings'] = 1
request['DataSize'] = 0
request['UserSID'].fromCanonical('S-1-2-5-21')
nn = even.PRPC_UNICODE_STRING()
nn['Data'] = 'HOLA BETUSSS'
request['Strings'].append(nn)
request['Data'] = NULL
request['Flags'] = 0
request['RecordNumber'] = NULL
request['TimeWritten'] = NULL
with assertRaisesRegex(self, DCERPCException, "STATUS_ACCESS_DENIED"):
dce.request(request)
def test_hElfrNumberOfRecords(self):
dce, rpctransport = self.connect()
resp = even.hElfrOpenELW(dce, 'Security', '')
resp.dump()
resp = even.hElfrNumberOfRecords(dce, resp['LogHandle'])
resp.dump()
def test_hElfrOldestRecordNumber(self):
dce, rpctransport = self.connect()
resp = even.hElfrOpenELW(dce, 'Security', '')
resp.dump()
resp = even.hElfrOldestRecordNumber(dce, resp['LogHandle'])
resp.dump()
@pytest.mark.remote
class RRPTestsSMBTransport(RRPTests, unittest.TestCase):
transfer_syntax = DCERPCTests.TRANSFER_SYNTAX_NDR
@pytest.mark.remote
class RRPTestsSMBTransport64(RRPTests, unittest.TestCase):
transfer_syntax = DCERPCTests.TRANSFER_SYNTAX_NDR64
# Process command-line arguments.
if __name__ == "__main__":
unittest.main(verbosity=1)
|