一. 实验环境
二. 实验流程
三. 实验步骤
(1)信息收集——主机发现
1. 查看Kali的IP信息;(IP:192.168.37.131)
2. 扫描主机(netdiscover)
(2)信息收集——端口扫描
1. 扫描端口(masscan)
2. 详细扫描端口信息(nmap)
(3)渗透测试
3000端口(http服务)
1. 访问目标靶机的3000端口
2. 网站目录扫描(dirb)
3. 查看前端页面代码
4. 解密数据;
22端口(ssh服务)
1. 尝试ssh远程连接
2. 提权
3. 留后门清痕迹;
四. 实验总结
- 靶机:Node,IP地址暂时未知;
- 测试机:Kali,IP地址:192.168.37.131;
- 测试机:物理机win7;
- 信息收集——主机发现
- 信息收集——端口扫描
- 渗透测试
netdiscover -i eth0 -r 192.168.37.0/24
Netdiscover: -i 指定网卡 -r 指定网段
masscan --rate=10000 --ports 0-65535 192.168.37.144
扫描发现目标只开放了3000,22端口;
nmap 192.168.37.144 -sV -T4 -O -p 22,3000
- 22端口对应的服务为ssh;
- 3000端口(node.js的默认端口)对应的服务为http;
1.1> 查看http服务首页信息;
http://192.168.37.144:3000/
1.2> 查看可以点击的页面,寻找有价值的信息;
http://192.168.37.144:3000/profiles/tom
http://192.168.37.144:3000/profiles/mark
http://192.168.37.144:3000/profiles/rastating
http://192.168.37.144:3000/login
- Login页面是一个登录页面,尝试用弱口令不能成功;
- 并且给出提示:登录失败!指定了不正确的凭据(没有明确说明用户名错误还是密码错误),可以有效防止用户名枚举;
- 没有找到可用的网站目录,就可以尝试对网站进行目录扫描;
dirb http://192.168.37.144:3000
尝试用大字典进行目录扫描;
dpkg -L dirb;
dirb http://192.168.37.144:3000 /usr/share/dirb/wordlists/big.txt
- 没有扫描到网站的其他目录;
- 一般情况下,如果没有发现什么可利用的目录,就可以尝试查看js页面,一般会有突破口;
3.1> 查看前端页面代码,发现了很多js页面,尝试进行访问;发现了一些可疑的路径,查看该路径;
3.2> admin.js;
http://192.168.37.144:3000/api/admin/backup
- 猜想:这个页面内容原本就是这样;
- 或者是因为没有登录才会这样显示;
http://192.168.37.144:3000/api/session
猜想如上;
3.3> Home.js
http://192.168.37.144:3000/api/users/latest
- Users在目录中是个敏感词,账户信息可能会存在该目录下;
- 神奇的发现了三个用户名和密码,只不过密码是经过加密的,一般密码是经过MD5进行加密的;
- 参数is_admin:false,根据字面意思猜想可能这几个账户不是管理员账户;
- 一般情况下,针对于多级目录,可以尝试逐级进行访问;
3.4> 尝试用MD5进行解密;
- 成功破解出两个账户的密码,分别为:
用户名:tom 密码:spongebob
用户名:mark 密码:snowflake
3.5> 尝试用得到的账户和密码进行登录;
- 根据页面显示:目前只有管理员用户可以访问控制面板,但请尽快检查以测试标准用户功能!
- 如上两个账户都是普通用户;
3.6> 尝试访问http://192.168.37.144:3000/api/users;
发现了一个疑似管理员的账户;is_admin:true
3.7> 解密该账户密码进行查看;
成功破解出该账户的密码:
用户名:myP14ceAdm1nAcc0uNT 密码:manchester
3.8> 尝试进行登录;
3.9> 进行页面内容下载;
打开下载的内容,看到一堆密文,通过最后的“=”可以猜测是经过base64加密的;
4.1> 将myplace.backup文件拷贝到Kali上;并进行解密;
- 可以看到已经解密出了一些目录,但是很多信息还是不能显示;
- 此时,我们可以尝试将base64解密的内容以压缩包zip的形式打开;
4.2> 尝试以压缩包形式打开;
- 尝试以base64解码后压缩包打开 提示需要密码;
- 用Kali自带的工具fcrackzip进行密码的破解;
4.3> 使用工具fcrackzip进行密码的破解
fcrackzip -v -b -u -c a -p magicaaaa myplace
fcrackzip命令:-v(详细信息)、-b(爆破)、-u(使用解压缩来清除密码错误)、-c(使用字符串)、-p(密码)
成功获取unzip myplace的密码:magicword
4.4> 尝试进行登录;
可以发现很多的目录;
4.5> 查看目录
对于node.js而言我们首先要基本熟悉他的构架,其中 app.js:项目入口及程序启动文件。先查看app.js文件;
- 我们发现了一个Node.js 连接 MongoDB 的操作;用户名为mark,密码为5AYRft73VtFpc84k;
- 得到的用户名和密码很可能适用于ssh,可以进行尝试;
2.1> 查看操作系统的版本;
2.2> 通过searchsploit命令查找漏洞
searchsploit Ubuntu 16.04
选择倒数第三个对目标系统进行提权;
2.3> 将该漏洞对应的44298.c文件拷贝到目标系统;
scp /usr/share/exploitdb/exploits/linux/local/44298.c [email protected]:/tmp/
由于 /tmp文件的限制小,所以将文件上传到靶机的tmp文件下。
2.4> 利用该漏洞进行本地提权
gcc -pthread 44298.c -o exp -lcrypt
已经提升成为root权限;
- 前端页面中的js页面很重要,尤其是类似目录的信息;
- 密文最后如果是“=”或者“==”,可能该密文是经过base64加密的;
- 如果经过base64解密后不能查看信息,可以尝试将解密后的信息输出到文件,并以解压zip压缩包的形式打开;
- 了解搭建网站的框架,目录结构;对于node.js而言我们首先要基本熟悉他的构架,其中 app.js:项目入口及程序启动文件。一般先查看app.js文件;