一、实验环境
- 攻击机(Kali):192.168.247.149
- 靶机(Node):192.168.247.152
二、实验步骤
一)主动信息收集
1、主机发现
2、端口扫描
3、端口版本信息
扫描结果发现靶机开启了22 ssh端口和3000端口,且3000端口开放的是http服务。
二)端口探测
-
端口3000(http服务)
1、探测目录
因为http服务使用的是3000端口,不是默认的80端口,所以在进行目录探测时,需使用参数 ' -f ' 进行微调。
分别使用大字典和默认字典进行目录探测,都没有发现可用的目录。接下来访问目标主机的网站进行探测。
2、访问目标主机的http服务
欢迎界面如下:
点击右上角的login,使用弱口令admin,admin等尝试多次登录,登录失败。根据登录失败提示,得出不能使用“用户枚举”的方法进行爆破。
用户枚举:由于错误配置或设计缺陷,当向系统提交有效账户和无效账户时,服务器会有不同的响应。利用响应的不同,攻击者可以获取到系统已经存在的账户,可用于暴力破解,进一步获取账户的登录密码。
使用BurpSuite对登录进行抓包分析,可以看到使用密码明文传输方式,可使用暴力破解的方法进行用户名密码爆破。在这里就不进行暴力破解了。
使用目录猜解和尝试登录都没有找到突破口,那根据个人经验估计突破口肯定在js文件里。
3、查看js文件
对这些js文件进行逐一审计,发现一些可疑路径,挨个进行访问,现对含有有用信息的路径进行研究。
通过这条URL得到用户名和密码,只不过密码是加密的。访问 https://www.somd5.com/,对tom、mark、rastating三个用户的密码进行解密,分别为:spongebob、snowflake(用户rastating的密码破解失败)。
然后分别使用tom、mark用户名进行登录,没有发现什么有用信息,只告诉我们 " 目前只有管理员用户可以访问控制面板,但请尽快检查以测试标准用户功能! "。用户tom登录进去后的页面如下图所示。此时,需另谋出路。
在http://192.168.247.152:3000/api/users/latest这条链接中,单词“latest”表示最新的,去掉“latest”尝试进行访问,说不定会有意想不到的收获。访问192.168.247.152:3000/api/users,发现得到了一个管理员用户。
访问 https://www.somd5.com/,对密码进行解密,得到的密码为 ' manchester '。
使用管理员用户账号 myP14ceAdm1nAcc0uNT,密码 manchester 进行登录,登录后发现可以下载网站备份。点击' Download Backup ',下载网站备份文件。
4、查看网站备份文件
由于输出内容中末尾还有 ' = ',所以该文件为Base64编码。
base64编码特征:
- 标准base64只有64个字符(英文大小写、数字和+、/)以及用作后缀等号;
- 等号一定用作后缀,且数目一定是0个、1个或2个。这是因为如果原文长度不能被3整除,base64要在后面添加\0凑齐3n位。为了正确还原,添加了几个\0就加上几个等号。显然添加等号的数目只能是0、1或2;
base64 -d myplace.backup > myplace.zip //-d 解码数据
在linux中,一切都是文件。mypalce.zip的后缀名只是方便管理员去管理。
可以看到在解压该文件时,需要输入一个密码。但我们不知道密码,此时可以使用Kali自带的工具fcrackzip进行破解,通过字典猜解出密码为 ' magicword '。(为了节省时间,指定了一部分密码)
[-b|--brute-force] use brute force algorithm
[-c|--charset characterset] use characters from charset
[-v|--verbose] be more verbose
[-p|--init-password string] use string as initial password/file
[-u|--use-unzip] use unzip to weed out wrong passwords
file... the zipfiles to crack
解压myplace.zip文件。
解压完成后直接在当前路径下(桌面)生成一个var文件。
5、查看var
这个mongodb实例指向localhost,这些凭证很可能也适合ssh访问,尝试一下。
- ssh [email protected]
- 密码:5AYRft73VtFpc84k
登录成功,查看系统信息。
终极三问
6、本地提权
在Kali攻击机上查找和靶机相关的漏洞,找到一个本地提权漏洞。
将该文件上传到靶机上。由于 /tmp文件的限制小,能够将文件写入,所以将文件上传到靶机的tmp文件下。
编译该文件,并执行,可以看到提权成功。
提权成功后,就是留后门,清理痕迹,走人了,哈哈~~