目录
写在开头
第一步:主机发现与端口扫描
第二步:NFS渗透
第三步:7z压缩包的密码破解
第四步:ssh私钥登录
第五步:less+vi提权
总结与思考
写在开头
本篇博客根据大佬红队笔记的视频进行打靶,详述了打靶的每一步思路,并非复现writeup,读者耐心看完,定会有所收获。本靶机并非常规的web渗透类型的靶机,难度不高,但涉及了像许多先前暂未触及的知识,考验了密码暴力破解的工具与操作。同时该靶机是一台openBSD操作系统的靶机,该操作系统通常用于防火墙或网络设备,与常规的ubuntu/debian/centOS等Linux有着明显的命令差异。本文涉及到的知识点包括nfs文件挂载、join破解.7z加密文件、私钥哈希、7z2john/ssh2john工具的使用、less+vim组合利用提权等。完整打靶思路详见:
「红队笔记」靶机精讲:FourandSix2.01 - 小巧精悍,干净利落的靶机,暴力破解x2,更有less+vi提权。_哔哩哔哩_bilibili
本文针对的靶机源于vulnhub,详情见:
FourAndSix: 2.01 ~ VulnHub
下载链接见:
https://download.vulnhub.com/fourandsix/FourAndSix2.ova
本靶机的目标是拿到root权限,并查看/root目录下的flag。下载成功后用vmware打开,将网络链接设置为NAT模式。靶机打开之后如下:
第一步:主机发现与端口扫描
依旧常规思路,命令不细讲了,详情可见:
渗透测试:主机发现和端口扫描的思路方法总结(nmap+ping命令+nc.traditional+伪设备连接)
使用的命令如下:
nmap -sn 10.10.10.0/24
nmap --min-rate 10000 -p- 10.10.10.143
nmap -sT -sV -O -sC -p22,111,2049 10.10.10.143
nmap -sU --min-rate 10000 -p- 10.10.10.143
nmap --script=vuln -p22,111,2049 10.10.10.143
发现靶机的ip是10.10.10.143,开放了3个端口,分别是22的ssh端口,111的rpc端口,2049的nfs共享文件端口:
具体扫描这几个端口的服务、操作系统信息如下:
可发现操作系统是OpenBSD,这并不是很常见的linux操作系统,主要用于网络和防火墙设备中。其他漏洞扫描没发现有用信息,同时UDP扫描显示2049的UDP端口也开放。
第二步:NFS渗透
nfs全称为Network File Share网络共享文件模式,开启这个服务的系统可以指定某个目录作为nfs的服务地址,作为共享文件夹。我们可以首先使用showmount工具查看靶机是否有共享文件夹:
showmount -e 10.10.10.143
-e表示exports,即靶机向外共享的到处列表,可以看到共享目录是/home/user/storage(这样也表明靶机很可能有一个名为user的用户),同时(everyone)表明任何人都可使用此共享目录。因此我们可以创建一个目录tmp,尝试能否将这个共享的目录/home/user/storage映射到我们创建的目录:
mkdir tmp
mount -t nfs 10.10.10.143:/home/user/storage tmp
mount用于挂载目录,-t是type的意思,指定为nfs共享文件模式,由上图可见该映射成功了,我们只要进入tmp目录应该就能看到靶机/home/user/storage目录的内容,如下:
果然,我们看到了/home/user/storage目录下的文件backup.7z,拿到backup.7z后,把这个文件复制到上级目录(避免在挂载目录处理留下痕迹),看起来是个7z的压缩包,我们先用file查看具体的文件类型,并用binwalk看看有啥捆绑:
第三步:7z压缩包的密码破解
由上图可知,就是个单纯的7z压缩文件,也没有捆绑文件,因此尝试直接用7z工具解压,-x参数表示解压缩:
7z -x backup.7z
直接运行解压命令提示要输入密码,咱也不知道密码是啥,随便输一个,报错信息如下:
说明内容有8张图片和两个文件,两个文件看名称像是ssh登录的私钥和公钥。此时说实话有点思路卡住了,理论上我们是需要解压这个7z压缩包的,但密码咱有不知道在哪里找。干脆就用john爆破吧。由于john爆破只能针对hash文件,因此我们先用7z2john生成7z压缩包的哈希,名称为backup7z_hash(随便起名):
7z2john backup.7z > backup7z_hash
如上图所示,backup7z_hash文件生成成功。
查询一下,如果读者像我一样倒霉,运行7z2john的命令后出现如下报错:
提示表明在运行7z2john
脚本时,缺少了Compress::Raw::Lzma
Perl模块。要解决这个问题,需要安装该模块。只要运行以下两个命令安装即可:
sudo apt update
sudo apt install libcompress-raw-lzma-perl
然后删掉错误生成的backup7z_hash,再次运行7z2john backup.7z > backup7z_hash应该就不会有报错了。查询结束。
生成7z的hash后,使用字典rockyou.txt进行压缩包的密码暴力破解,指定形式为7z格式:
john --format=7z --wordlist=/usr/share/wordlists/rockyou.txt backup7z_hash
得到压缩包的密码是chocolate,看来作者应该很爱吃巧克力呀。然后我们用这个密码成功解压了所有文件:
包括八张hello kitty的图片:
以及两个疑似ssh公钥和私钥的文件:
看到hello kitty的文件,首先先用file查看是否是真的单纯的图片文件:
好像就是单纯的图片文件,我们再试试用binwalk看看有没有捆绑,发现也没有
那有没有可能是图片隐写啥的,说不定图片里面有备注,我们尝试用exiftool查看图片:
查看了8张图片,也没发现有啥备注信息。那么就查看id_rsa的公钥和私钥吧。
第四步:ssh私钥登录
查看不带.pub的文件id_rsa,这可能是私钥:
看起来确实是openssh的私钥,再看看公钥:
那我们就直接尝试用私钥登录user用户吧:
ssh -i id_rsa user@10.10.10.143
-i表示用私钥登录,结果显示私钥id_rsa本身还有passphrase,也就是说私钥被加密了,还要用密码对私钥进行解密,输错或者直接回车的话,会转变为密码登录ssh,咱也不知道密码。看来此处应该又要破解id_rsa私钥的密码了。与破解压缩包的思路类似,先将私钥生成john对应的hash文件,这里命名为id_rsa_hash:
ssh2john id_rsa > id_rsa_hash
成功生成了id_rsa_hash,然后用john破解,密码字典指定为rockyou.txt,这里不太了解ssh私钥hash的格式是啥,就干脆不用--format指定,让john自己识别:
john id_rsa_hash --wordlist=/usr/share/wordlists/rockyou.txt
拿到了私钥的passphrase是12345678,然后我们重新用私钥登录,输入passphrase即可成功登录user的shell:
可以看到操作系统是OpenBSD6.4,同时当前用户属于两个组:user和wheel。
第五步:less+vi提权
在常规的linux系统中,我们拿到初始shell后往往会运行sudo -l查看有什么特殊的信息,但OpenBSD的语法与之不同,无法直接sudo -l。我们先尝试寻找有什么s位的文件,尝试能否采用suid的方法提权,具有s位的文件表明该文件在运行时能够以其属主权限运行,我们可以借此进行提取,首先在根目录/按照权限-perm搜索具有s权限的文件f:
find / -perm -u=s -type f 2>/dev/null
这里要重点关注doas这个指令,该指令类似于sudo,即以高权限运行指令需要添加的命令。由于doas指令是具有s位的,因此使用doas可以以高权限运行指令。我们要查找的就是有哪些指令可以免密doas运行(即类似于ubuntu/debian的Linux运行sudo -l 后有哪些免密sudo的指令),这就需要查找doas的配置信息了。我们直接用find搜索doas的相关文件:
find / -name doas* -type f 2>/dev/null
查找结果如下:
看起来doas.conf就是doas的配置文件,我们查看:
非常关键的信息!这个文件告诉我们,less和authlog指令是可以用doas免密以root权限运行的!那我们就运行试试:
doas /usr/bin/less /var/log/authlog
运行发现再用less读取authlog:
那么要如何提权呢?此处我们是使用less命令对authlog进行查看,且此时less命令是具有root权限的。但less只能读文件,不能执行系统命令。我们知道在less中按字母v是可以启动vi编辑器的,而vi编辑器中输入冒号:后即可输入交互的指令,又由于less具有root权限,在less中启动的vi编辑器应该也具有root权限,那么我们按v进入vi编辑器后,输入:!sh应该就能够以root身份启动shell了。
按v之后进入vi编辑模式:
再输入:!/sh即可提权,感叹号!用于表示执行系统命令:
可看到提示符已经变为了井号#,提权成功!
进入/root目录读取flag:
至此打靶完成!
总结与思考
这个靶机不同于常规的web渗透类型靶机,且操作系统类型也不太常规,是一个值得练习的靶机。靶机考察了NFS网络共享文件相关的内容,同时也考察了暴力破解密码的知识,使用john进行密码暴力破解之前先要用对应的工具生成hash。最后的提权操作也很有代表性,提权的思路和原理相当于常规linux靶机的sudo提权。最后总结以下渗透打靶过程:
1.主机发现和端口扫描:常规思路,发现ssh,rpc,nfs,考虑从nfs入手。
2.NFS渗透,发现文件backup.7z,看起来像备份文件,解压发现需要密码。
3.压缩包的密码破解:先用7z2john生成哈希,再用字典rockyou.txt爆破,成功得到密码。解压后发现八张hello kitty的图片和疑似ssh登录的公钥和私钥。
4.ssh私钥登录:尝试使用私钥登录,发现私钥被加密,需要passphrase,用ssh2john生成hash,再用字典rockyou.txt爆破,成功得到passphrase,ssh登录了user账户。
5.less+vi提权:进入user账户后一番搜索无果,尝试寻找s位的文件,发现doas,相当于sudo指令,查找doas指令的配置,发现可以用less免密操作authlog文件,在less中启动vi输入系统命令即可提权。
读者一定要理解提权的原理与逻辑。核心就是借用了less可以免密以root运行的权限,在less中启动了编辑器vi,使得vi也具有root权限,而vi可以执行系统命令,启动shell,实现提权。
这里再来个插叙(来自红队笔记大佬的描述),难道压缩包中的8张HelloKitty图片就完全没用吗?
回到最开始直接解压backup.7z的报错:
如果你单纯看这个报错,猜测一个密码,你会猜什么呢?8张图片,每张图片都是依次是hello(n),那么这是不是提示存在一个密码,就是12345678呢?如果早一点想到这里,或许就免了对passphrase的破解过程。不过这个脑洞还是略大了一些,我感觉哪怕存在应该也是仅限靶机~。
插叙结束!
到此这个靶机就讲解完毕了。打完这个靶机感觉还是挺有收获的。靶机不难,总结不易,也有很多自己的思考,希望读者能够点赞关注多多支持!学渗透还是要实操呀。如果读者有什么打靶的问题也欢迎评论区留言指出,我一定知无不言!