该靶机的主要知识点有:摩斯密码,fuck脚本,断电文件,一种是tar直接读取root的flag,一种是polkit提权
开始渗透
常规nmap扫描
nmap -sn 10.10.10.0/24 端口比较多,可以处理一下方便复制,用/作分隔符取第一位,并将换行符替换为
cat portscan.nmap | grep 'open' | awk -F '/' {'print $1'} | tr '\n' ','
接着详细扫描
nmap -sT -sV -sC -O -p21,80,111,2049,7822,37381,39995,48903,53453 10.10.10.151
脚本扫描
nmap --script=vuln -p21,80,111,2049,7822 10.10.10.151
这边扫描出一些目录枚举的内容还有一个sql注入
FTP和NFS渗透
有挺多值得尝试渗透的端口,我们先试试ftp和nfs
ftp 10.10.10.151,输入anonymous匿名登入,失败,试试nfs
查看挂载
showmount -e 10.10.10.151
有个目录,试试能不能挂载到本地
mkdir mor
mount -t nfs 10.10.10.151:/home/morris mor
ls -laih
可惜都没有什么有用的信息,接着我们可以去看看80端口
web渗透
进来是一堆文字,也没有什么功能点,查看源码也没有什么提示
试试目录爆破
gobuster dir -w /usr/share/dirbuster/wordlists/directory-list-2.3-medium.txt -u http://10.10.10.151
在/mysite目录下有一些文件
这个cs文件很值得查看一下(因为这种后缀的不常见)
下载下来看看
这是jsfuck(这么一大串,肯定很可疑,不知道的放gpt看一下就好了)
接下来来解密它把
记得把前面的变量和"全删了
或者直接在这个页面的console控制台用console.log将所有的字符串变量拼接即可
console.log(b1+b2+b3+b4+b5+b6+b7+b8+b9+b10)
JSFuck - Write any JavaScript with 6 Characters: []()!+
CoderTab - JSUnFuck - Decode JSFuck Here
解码成功
You're smart enough to understand me. Here's your secret, TryToGuessThisNorris@2k19
TryToGuessThisNorris@2k19应该就是一个凭据,那么账号是什么,前面的挂载目录提示我们morris,试了一下不行,回到网站看看,首页的文字有提示我们
试一下norris
提权norris
ssh norris@10.10.10.151 -p 7822(注意ssh端口修改为7822)
成功
ls一下有个ftp ,进入,枚举有一些.bak文件想把他们下载下来看看
(如果目录下的文件不是文本.txt文件的话,需要先运行binary指令(转换为二进制格式,以保证通过FTP下载的文件不会损坏。运行了prompt指令可疑关闭了交互模式)
mget *.*
都下载到本地了
file查看一下啊
game.jpg.bak下有个类是摩斯密码的
具体看一下
放到线上网站解密一下
HEY#NORRIS,#YOU'VE#MADE#THIS#FAR.#FAR#FAR#FROM#HEAVEN#WANNA#SEE#HELL#NOW?#HAHA#YOU#SURELY#MISSED#ME,#DIDN'T#YOU?#OH#DAMN#MY#BATTERY#IS#ABOUT#TO#DIE#AND#I#AM#UNABLE#TO#FIND#MY#CHARGER#SO#QUICKLY#LEAVING#A#HINT#IN#HERE#BEFORE#THIS#SYSTEM#SHUTS#DOWN#AUTOMATICALLY.#I#AM#SAVING#THE#GATEWAY#TO#MY#DUNGEON#IN#A#'SECRETFILE'#WHICH#IS#PUBLICLY#ACCESSIBLE.
这段话意思说他的电池很快就没电了,他就要ger~了,于是火速给我们留下一个信息,他把关键的信息secretfile放在了公共的区域。那啥是公共的区域呢?最容易想到的就是web的目录/var/www/html
进入web目录/var/www/gtml查找线索:
有个secretfile.swp,优先查看它
有个信息: 意思是:我知道你来到这里是找密码的。电池就要没电啦!
下载下来试试能不能查看
本地查看
科普一下swp文件:是编辑器突然断电或 Ctrl+z 产生的文件
.swap是交互信息,vim非正常退出会有sawp,可以使用vim -r参数读取损坏的swp文件:
好像又得到了一个凭据
试试切换root,不行,试试morris,可疑
提权root
下一步就是进行提权了。两个用户用哪个提权都没有倾向性,因此根据用户组的信息,我们还是选用norris进行提权(起码norris所在用户组有sudo):
还是常规提权枚举,sudo -l,定时任务,history,find
最后是这个/sbin/getcap -r / 2>/dev/null后(用于递归地检查和列出根文件系统(“/”)中的文件和目录的文件功能。),其实可以用linpeas的
现有打包工具tar,具有能力cap_dac_read_search+ep:
cap_dac_read_search+ep:这是指定文件的扩展文件权限标志。它包含两个部分:
cap_dac_read_search:这是一种扩展文件权限标志,表示该文件具有读取和搜索(read/search)访问权限,通常用于文件系统的访问。具体来说,这个标志允许 tar 命令读取文件和搜索目录,而不需要使用者拥有完全的文件访问权限。
+ep:这部分表示该文件是一个具有执行权限(execute permission)的可执行文件。这意味着用户可以运行 /usr/bin/tar 命令,并且它将以正常的用户身份执行,而不需要特权(root权限)。+ep 的意思是执行和提升权限(effective privilege),这允许 tar 在不需要完全的 root 权限的情况下执行一些特定高权限的操作。
说白了,就是tar具有特殊高权限,我们使用tar时哪怕没有拥有文件的访问权限也可以正常读取和搜索。 那我们直接用tar把/root目录打包,然后再解压就可以看到flag即root.txt:
tar -zcvf root.tar.gz /root
然后我们再解压即可读取root.txt:
tar -zxvf root.tar.gz
提权
1.find / -perm -u=s -type f 2>/dev/null
该文件的属主和数组都是root,且具有s位权限,可以以属主的身份运行,应该可以提权:
polkit是linux系统中针对文件权限管理的一套机制,而helper相当于是充当一个介于操作者与被操作文件的一个中介,会通过这个helper去调用执行文件。因此如果我们能够借助helper的高权限,以root的身份调用bash,即可实现提权。可以通过如下的命令实现触发polkit-agent-helper-1,并借用polkit-agent-helper-1的root高权限启动bash进行提权。
可以使用systemd-run -r启动伪终端,此时会通过polkit-agent-helper-1启动,而polkit-agent-helper-1具有高权限,因此就有可能实现提权。
systemd-run -t /bin/bash