CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutSign UpSign In
rapid7

Real-time collaboration for Jupyter Notebooks, Linux Terminals, LaTeX, VS Code, R IDE, and more,
all in one place. Commercial Alternative to JupyterHub.

GitHub Repository: rapid7/metasploit-framework
Path: blob/master/spec/lib/rex/proto/x11.rb
Views: 15996
1
# -*- coding: binary -*-
2
3
require 'spec_helper'
4
5
RSpec.describe Rex::Proto::X11 do
6
subject do
7
mod = ::Msf::Exploit.new
8
mod.extend described_class
9
10
mod.send(:initialize)
11
mod
12
end
13
14
let(:get_property_resp) do
15
"\x01\x08\x04\x00\x1f\x00\x00\x00\x1f\x00\x00\x00\x00\x00\x00\x00" \
16
"\x79\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" \
17
"\x58\x66\x74\x2e\x64\x70\x69\x3a\x09\x39\x36\x0a\x58\x66\x74\x2e" \
18
"\x61\x6e\x74\x69\x61\x6c\x69\x61\x73\x3a\x09\x31\x0a\x58\x66\x74" \
19
"\x2e\x68\x69\x6e\x74\x69\x6e\x67\x3a\x09\x31\x0a\x58\x66\x74\x2e" \
20
"\x68\x69\x6e\x74\x73\x74\x79\x6c\x65\x3a\x09\x68\x69\x6e\x74\x73" \
21
"\x6c\x69\x67\x68\x74\x0a\x58\x66\x74\x2e\x72\x67\x62\x61\x3a\x09" \
22
"\x72\x67\x62\x0a\x58\x63\x75\x72\x73\x6f\x72\x2e\x73\x69\x7a\x65" \
23
"\x3a\x09\x32\x34\x0a\x58\x63\x75\x72\x73\x6f\x72\x2e\x74\x68\x65" \
24
"\x6d\x65\x3a\x09\x59\x61\x72\x75\x0a\x00\x00\x00"
25
end
26
27
let(:get_property) do
28
"\x14\x00\x06\x00\x28\x05\x00\x00\x17\x00\x00\x00\x1f\x00\x00\x00" \
29
"\x00\x00\x00\x00\x00\xe1\xf5\x05"
30
end
31
32
let(:creategc) do
33
"\x37\x00\x05\x00\x00\x00\x00\x01\x28\x05\x00\x00\x08\x00\x00\x00\xff\xff\xff\x00"
34
end
35
36
let(:get_input_focus) do
37
"\x2b\x00\x01\x00"
38
end
39
40
let(:free_gc) do
41
"\x3c\x01\x02\x00\x00\x00\x00\x02"
42
end
43
44
let(:intern_atom_wait) do
45
"\x10\x00\x03\x00\x04\x00\x00\x00\x57\x61\x69\x74"
46
end
47
48
let(:intern_atom_server_overlay_visuals) do
49
"\x10\x01\x08\x00\x16\x00\x00\x00\x53\x45\x52\x56\x45\x52\x5f\x4f" \
50
"\x56\x45\x52\x4c\x41\x59\x5f\x56\x49\x53\x55\x41\x4c\x53\x00\x00"
51
end
52
53
describe 'X11GetPropertyResponseHeader' do
54
context '#read' do
55
it do
56
response = Rex::Proto::X11::X11GetPropertyResponseHeader.read(get_property_resp)
57
expect(response.get_property_type).to eq(31) # \x1f\x00\x00\x00
58
expect(response.sequence_number).to eq(4) # \x04\x00
59
expect(response.value_length).to eq(121)
60
end
61
end
62
end
63
64
describe 'X11GetPropertyRequest' do
65
context '#initialize' do
66
it do
67
header = Rex::Proto::X11::X11RequestHeader.new(opcode: 20)
68
body = Rex::Proto::X11::X11GetPropertyRequestBody.new(window: 1320)
69
expect(header.to_binary_s + body.to_binary_s).to eq(get_property)
70
end
71
end
72
73
context '#read' do
74
it do
75
request = Rex::Proto::X11::X11Request.read(get_property)
76
expect(request.header.opcode).to eq(20)
77
expect(request.body.content_length).to eq(100_000_000)
78
expect(request.body.window).to eq(1320)
79
end
80
end
81
end
82
83
describe 'X11CreateGraphicalContextRequest' do
84
context '#initialize' do
85
it do
86
header = Rex::Proto::X11::X11RequestHeader.new(opcode: 55)
87
body = Rex::Proto::X11::X11CreateGraphicalContextRequestBody.new(
88
cid: 16777216,
89
drawable: 1320,
90
gc_value_mask_background: 1
91
)
92
expect(header.to_binary_s + body.to_binary_s).to eq(creategc)
93
end
94
end
95
96
context '#read' do
97
it do
98
request = Rex::Proto::X11::X11Request.read(creategc)
99
expect(request.header.opcode).to eq(55)
100
expect(request.body.request_length).to eq(5)
101
expect(request.body.cid).to eq(16777216)
102
expect(request.body.drawable).to eq(1320)
103
expect(request.body.gc_value_mask_background).to eq(1)
104
expect(request.body.background).to eq(16777215)
105
end
106
end
107
end
108
109
describe 'X11GetInputFocusRequest' do
110
context '#initialize' do
111
it do
112
header = Rex::Proto::X11::X11RequestHeader.new(opcode: 43)
113
body = Rex::Proto::X11::X11GetInputFocusRequestBody.new
114
expect(header.to_binary_s + body.to_binary_s).to eq(get_input_focus)
115
end
116
end
117
context '#read' do
118
it do
119
request = Rex::Proto::X11::X11Request.read(get_input_focus)
120
expect(request.header.opcode).to eq(43)
121
end
122
end
123
end
124
125
describe 'X11FreeGraphicalContextRequest' do
126
context '#initialize' do
127
it do
128
header = Rex::Proto::X11::X11RequestHeader.new(opcode: 60)
129
body = Rex::Proto::X11::X11FreeGraphicalContextRequestBody.new(
130
gc: 33554432
131
)
132
expect(header.to_binary_s + body.to_binary_s).to eq(free_gc)
133
end
134
end
135
context '#read' do
136
it do
137
request = Rex::Proto::X11::X11Request.read(free_gc)
138
expect(request.header.opcode).to eq(60)
139
expect(request.body.gc).to eq(33554432)
140
end
141
end
142
end
143
144
describe 'X11InternAtomRequest' do
145
context '#initialize' do
146
it do
147
header = Rex::Proto::X11::X11RequestHeader.new(opcode: 16)
148
body = Rex::Proto::X11::X11InternAtomRequestBody.new(
149
name: 'Wait'
150
)
151
expect(header.to_binary_s + body.to_binary_s).to eq(intern_atom_wait)
152
expect(header.opcode).to eq(16)
153
expect(body.request_length).to eq(3)
154
expect(body.name).to eq('Wait')
155
expect(body.only_if_exists).to eq(0)
156
157
header = Rex::Proto::X11::X11RequestHeader.new(opcode: 16)
158
body = Rex::Proto::X11::X11InternAtomRequestBody.new(
159
name: "SERVER_OVERLAY_VISUALS\x00\x00", only_if_exists: 1
160
)
161
expect(header.to_binary_s + body.to_binary_s).to eq(intern_atom_server_overlay_visuals)
162
expect(header.opcode).to eq(16)
163
expect(body.request_length).to eq(8)
164
expect(body.name).to eq('SERVER_OVERLAY_VISUALS')
165
expect(body.only_if_exists).to eq(1)
166
end
167
end
168
end
169
end
170
171