HACKthebox-Cap
HackTheBox-Cap
本机IP:10.10.16.6
目标IP:10.10.10.245
信息收集
nmap
开放了21、22、80端口
常规操作访问一下网站看看干嘛的
这个网站挺有意思,起到了类似服务器仪表盘的作用,能看本地启动的服务、IP等等
在Security Snapshot
里可以看到流量记录
本来下载流量包看了一下全是我自己访问的流量突然就没思路了
然后切到其他页面看了下功能又切回来以后发现URL有变化,.../data/
斜杠后面的数字变了,试试看其他的数字都和上图一样,估计都是我的访问流量,当访问.../data/0
的时候不一样了
下载流量包,用Wireshark
分析一下
找到了nathan用户的用户名密码
1 | USER: nathan PASS Buck3tH4TF0RM3! |
上面提到服务器还开放了21、22端口,尝试用刚得到的用户名密码连接
FTP
成功登录,发现了user.txt,下载下来得到user flag
提权
SSH
1 | ssh james@10.10.10.245 |
成功连接
在提权上遇到了问题,首先Linux提权的姿势太多了,以前做的Linux靶机用的大多是sudo提权滥用,但是靶机中nathan
用户没有使用sudo的权限,所以只能用其他的手段了。
本台靶机的名字叫cap,google上搜的时候也围绕这个点去找,发现在Linux常用命令里有getcap
和setcap
,接着发现了一篇很棒的文章(参考链接二),还有一个碉堡了的网站(参考链接三)
知识点
从2.1版开始,Linux内核有了能力(capability)的概念,即它打破了UNIX/LINUX操作系统中超级用户/普通用户的概念,由普通用户也可以做只有超级用户可以完成的工作.
Capabilities的主要思想在于分割root用户的特权,即将root的特权分割成不同的能力,每种能力代表一定的特权操作。例如:能力CAP_SYS_MODULE表示用户能够加载(或卸载)内核模块的特权操作,而CAP_SETUID表示用户能够修改进程用户身份的特权操作。在Capbilities中系统将根据进程拥有的能力来进行特权操作的访问控制
在Capilities中,只有进程和可执行文件才具有能力,每个进程拥有三组能力集,分别称为cap_effective
, cap_inheritable
, cap_permitted
(分别简记为:pE,pI,pP)
cap_permitted表示进程所拥有的最大能力集;
cap_effective表示进程当前可用的能力集,可以看做是cap_permitted的一个子集;
cap_inheitable则表示进程可以传递给其子进程的能力集。
系统根据进程的cap_effective能力集进行访问控制,cap_effective为cap_permitted的子集,进程可以通过取消cap_effective中的某些能力来放弃进程的一些特权。可执行文件也拥有三组能力集,对应于进程的三组能力集,分别称为cap_effective, cap_allowed 和 cap_forced(分别简记为fE,fI,fP),其中cap_allowed表示程序运行时可从原进程的cap_inheritable中集成的能力集,cap_forced表示运行文件时必须拥有才能完成其服务的能力集;而cap_effective则表示文件开始运行时可以使用的能力。
各种能力就不一一列举了,参考文章中写的很详细,本台靶机的提权用了CAP_SETUID
CAP_SETUID:允许改变进程的用户ID
用getcap
命令查看可执行文件获取的内核权限
getcap [-v] [-r] [-h] [-n]
[ …]
1 | getcap -r / 2>/dev/null #把错误输出到/dev/null |
发现 python3.8 有cap_setuid
,可以拿来利用提权了,提权方法在GTFOBins上找到的
1 | python3 -c 'import os;os.setuid(0);os.system("/bin/sh")' #python3.8或者python3都行 |
拿到root权限
得到root flag
end
写在最后
Linux靶机的提权还是需要更多的学习和积累,虽然本台靶机整个流程很短,也没有什么网站上的漏洞利用直接就连上了,但还是有学到东西的。实际操作得来的经验比起光看博客和书本要印象更加深刻
参考链接
https://cloud.tencent.com/developer/article/1544037?from=article.detail.1180355