node(源码泄露+密码学相关)
学习资料
https://rastating.github.io/hackthebox-node-walkthrough/
扫描
1 |
|
web
找到了用户名密码,还蛮顺利的==
1 |
|
通过admin登陆
面板上,可以下载一个backup文件。
打开一看,base64解码一下。
解码后,发现很多乱码,然后夹杂着路径。因为有明文路径,说明base64解码是成功的。
备份文件分析
写个脚本,提取出路径,并分析。路径共有1726行
分析的时候发现不对,然后再把路径去重一下。路径变为863行。
1 |
|
提取数据库文件
curl -o a.html http://192.168.1.129:3000/node_modules/mongodb-core/conf.json
貌似要登陆
curl -o a.html -u myP14ceAdm1nAcc0uNT:manchester http://192.168.1.129:3000/node_modules/mongodb-core/conf.json
任何请求都会跳转到主页面,尝试禁用js,无效;带admin的cookie,无效;应该是服务器设置了参数。
误区
本来想要提取提取用户名密码,从数据库里,然后ssh登陆的。
但是一直跳转回主页面,纠结了有半小时多吧。
然后突然想起来,前面访问http://192.168.1.129:3000/api/users
是顺利的,并没有跳转到主页。所以。。。
发现是从var/www/myplace/static/
从static作为网站根目录,而不是var/www
目录,ORZ …
所以,例如目录:var/www/myplace/static/uploads/mark.jpg
应该访问:http://192.168.1.129:3000/uploads/mark.jpg
如果访问错误的链接,会跳转到主页。
没线索了
看看wp
1 |
|
base64加密之后,要用zip再解压一下。。。
我竟然用python提取出路径!!!虽然最近是在学编程,但这里真的不是在考编程啊!!!woc
zip有密码保护,破解zip密码详细请看另一篇
总之,破解密码之后,解压zip得到了源代码。························································
info2:SSH服务 mark:5AYRft73VtFpc84k
准备提权
通过源码泄露的口令,ssh登陆ssh mark@192.168.1.129
文件上传
将shell脚本传到目标机,检查下有无可利用的信息。
linEnum.sh提权脚本
在生成的扫描报告中,发现本地开放27017端口。稍微搜索一下,就知道是mongodb服务。
在进程里发现tom用户运行了一个app.js,于是我们查看一下
代码分析
/var/scheduler/app.js 在这个js文件中,有一行
1 |
|
我们知道了,mongo数据库:
- 用户名:mark
- 密码:5AYRft73VtFpc84k
- 数据库端口:27017
- 数据库名:scheduler
通过数据库命令执行
mongo -p -u mark scheduler
输入info2的口令5AYRft73VtFpc84k
。
以下命令,使得mark(普通用户)得到了tom(特权用户)的shell。
1
db.tasks.insert( { "cmd": "/bin/cp /bin/bash /tmp/tombash; chmod u+s /tmp/tombash;" } );
运行tombash,就得到了tom的shell
1
db.tasks.insert( { cmd: "/bin/chown tom:admin /tmp/tombash; chmod g+s /tmp/tombash;" } );
exit 退出数据库
稍等一会儿,插入js文件被执行,tom这用户,被添加了admin组。
解释
mongo -p -u mark scheduler
以用户名mark连接scheduler数据库db.tasks.insert(xx)
将数据xx插入到scheduler这个数据库的tasks集合中。
在图片中,可以看到exec(doc.cmd);
于是我们插入的命令,就会被这个js脚本所执行。于是mark这个用户就加入了最高权限组admin。
root.txt
关于root的flag在这个文件/usr/local/bin/backup
中,用file命令查看一下。backup: setuid ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), dynamically linked, interpreter /lib/ld-linux.so.2, for GNU/Linux 2.6.32, BuildID[sha1]=343cf2d93fb2905848a42007439494a2b4984369, not stripped
貌似是一个可执行文件,执行一下,没有任何反应。
用vi命令查看一下
info3
得到了编码的信息。和之前一样,base64解码再zip解压。
1 |
|
解压:unzip backup.zip
1 |
|
并没有解压出来,于是:
发现需要密码,用之前的口令尝试一下啊,发现magicword可以解压成功。
然后就得到了root的flag……个P呀。
writeup看都看不懂为什么要这么做。总之加密解密这块,我的知识还很欠缺。总之,运行下面命令,就得到了root的flag。
/usr/local/bin/backup -q 45fac180e9eee72f4fd2d9386ea7033e52b7c740afc3d98a8d0230167104d474 /r**t/r**t.txt | base64 -d > root.zip