Пример #1
0
 def test_create_message_with_object(self):
     message = RequestPDU()
     message['pfx_flags'].set_flag(PFlags.PFC_OBJECT_UUID)
     message['packed_drep'] = DataRepresentationFormat()
     message['call_id'] = 4
     message['cont_id'] = 1
     message['opnum'] = 10
     message['object'] = b"\xff" * 16
     message['stub_data'] = b"\x01\x02\x03\x04"
     expected = b"\x05" \
                b"\x00" \
                b"\x00" \
                b"\x80" \
                b"\x10\x00\x00\x00" \
                b"\x2c\x00" \
                b"\x00\x00" \
                b"\x04\x00\x00\x00" \
                b"\x00\x00\x00\x00" \
                b"\x01\x00" \
                b"\x0a\x00" \
                b"\xff\xff\xff\xff\xff\xff\xff\xff" \
                b"\xff\xff\xff\xff\xff\xff\xff\xff" \
                b"\x01\x02\x03\x04"
     actual = message.pack()
     assert len(message) == 44
     assert actual == expected
Пример #2
0
 def test_parse_message_with_object(self):
     actual = RequestPDU()
     data = b"\x05" \
            b"\x00" \
            b"\x00" \
            b"\x80" \
            b"\x10\x00\x00\x00" \
            b"\x2c\x00" \
            b"\x00\x00" \
            b"\x04\x00\x00\x00" \
            b"\x00\x00\x00\x00" \
            b"\x01\x00" \
            b"\x0a\x00" \
            b"\xff\xff\xff\xff\xff\xff\xff\xff" \
            b"\xff\xff\xff\xff\xff\xff\xff\xff" \
            b"\x01\x02\x03\x04"
     data = actual.unpack(data)
     assert len(actual) == 44
     assert data == b""
     assert actual['rpc_vers'].get_value() == 5
     assert actual['rpc_vers_minor'].get_value() == 0
     assert actual['ptype'].get_value() == PType.REQUEST
     assert actual['pfx_flags'].get_value() == 128
     assert actual['packed_drep'].pack() == b"\x10\x00\x00\x00"
     assert actual['frag_length'].get_value() == 44
     assert actual['auth_length'].get_value() == 0
     assert actual['call_id'].get_value() == 4
     assert actual['alloc_hint'].get_value() == 0
     assert actual['cont_id'].get_value() == 1
     assert actual['opnum'].get_value() == 10
     assert actual['object'].get_value() == b"\xff" * 16
     assert actual['stub_data'].get_value() == b"\x01\x02\x03\x04"
     assert actual['auth_verifier'].get_value() == b""
Пример #3
0
    def _invoke(self, function_name, opnum, data):
        req = RequestPDU()
        req['pfx_flags'].set_flag(PFlags.PFC_FIRST_FRAG)
        req['pfx_flags'].set_flag(PFlags.PFC_LAST_FRAG)
        req['packed_drep'] = DataRepresentationFormat()
        req['call_id'] = self.call_id
        self.call_id += 1

        req['opnum'] = opnum
        req['stub_data'] = data

        ioctl_request = SMB2IOCTLRequest()
        ioctl_request['ctl_code'] = CtlCode.FSCTL_PIPE_TRANSCEIVE
        ioctl_request['file_id'] = self.handle.file_id
        ioctl_request['max_output_response'] = 1024
        ioctl_request['flags'] = IOCTLFlags.SMB2_0_IOCTL_IS_FSCTL
        ioctl_request['buffer'] = req

        session_id = self.tree.session.session_id
        tree_id = self.tree.tree_connect_id
        log.info("Sending svcctl RPC request for %s" % function_name)
        log.debug(str(req))
        request = self.tree.session.connection.send(ioctl_request,
                                                    sid=session_id,
                                                    tid=tree_id)
        log.info("Receiving svcctl RPC response for %s" % function_name)
        resp = self.tree.session.connection.receive(request)
        ioctl_resp = SMB2IOCTLResponse()
        ioctl_resp.unpack(resp['data'].get_value())
        log.debug(str(ioctl_resp))

        pdu_resp = self._parse_pdu(ioctl_resp['buffer'].get_value(), opnum)
        return pdu_resp
Пример #4
0
 def test_create_message(self):
     message = RequestPDU()
     message['packed_drep'] = DataRepresentationFormat()
     message['call_id'] = 4
     message['cont_id'] = 1
     message['opnum'] = 10
     message['stub_data'] = b"\x01\x02\x03\x04"
     expected = b"\x05" \
                b"\x00" \
                b"\x00" \
                b"\x00" \
                b"\x10\x00\x00\x00" \
                b"\x1c\x00" \
                b"\x00\x00" \
                b"\x04\x00\x00\x00" \
                b"\x00\x00\x00\x00" \
                b"\x01\x00" \
                b"\x0a\x00" \
                b"\x01\x02\x03\x04"
     actual = message.pack()
     assert len(message) == 28
     assert actual == expected