Oopsie
解题流程
文件上传
首先开启机器后,我们先使用 nmap -sC -SV
来扫描一下IP地址:
-sC
:使用 Nmap 的默认脚本扫描(通常是 NSE 脚本,Nmap Scripting Engine)。这个选项会自动执行一系列常见的脚本,进行更为详细的探测,比如检查服务版本、漏洞扫描、系统信息等。
-sV
:探测服务版本。这会使 Nmap 在扫描时尝试识别目标主机上运行的服务及其版本信息。
可以看到开放了两个端口:22和80端口,既然开放了80端口,说明我们可以使用web浏览器进行访问。
那么我们此时使用kali自带的火狐浏览器进行访问,访问对应的IP地址,显示页面如下:
页面继续往下划,我们看到了这样的一段话,我们需要登录才能访问这个访问:
那么此时我们就可以猜到这个页面应该应该是存在子目录能够进行登录操作的,那么此时我们就需要找到这个子目录。此时我们我们使用burpsuit自带的抓包功能进行看一下页面的子目录有哪些,由于burpsuit是kali自带的,操作起来也方便。为了方便操作,这里我直接打开burpsuit自带的浏览器:
输入目标IP之后,burpsuit可以不进行拦截操作,因为burpsuit会自动收集打开过程中的数据包,就在旁边的 HTTP history
中,抓到的数据包如下所示:
此时我们看到有个 cdn-cgi/login
的目录,很像我们需要的登录目录,那么此时我们访问一下这个目录,显示页面如下,果真就是我们想要的登录窗口:
尝试了一些弱口令爆破之后,没有成功,发现下方还有一个 Login as Guest
的选项,我们可以当做游客进行登录:
进入之后,我们就可以看到游客界面的导航栏了
查看导航栏,发现有一个 uploads
的栏目,难道可以进行文件上传吗?我们点进去看看,发现需要超级管理员用户才可以访问:
那么我们就需要想办法来提升用户的权限,有一个方法就是右键页面,然后打开检查元素:
然后我们就可以查看用户的cookie信息,我们观察到,有role=guest 和 user=2233。我们可以假设,如果我们以某种方式知道超级用户的数量admin 作为 user 变量,我们也许能够访问上传页面:
然后返回刚才的 Account
栏目信息,根据上面的url信息,发现此时发id=2
,那么我们尝试一下id=1
会发生什么?
修改id=1
,我们成功知道了admin
的id
值,此时我们就可以尝试修改一下cookie值来尝试提高用户的权限:
此时我们修改了cookie的值,然后刷新一下页面,发现我们已经拥有了上传文件的权限:
现在我们已经可以访问上传表单了,我们可以尝试上传 PHP 反向 shell。对于本题,我们将使用 /webshells/php/php-reverse-shell.php,这里提供了下载地址,然后将该PHP文件上传:
好了到了这一步,现在我们需要找到刚刚上传的php文件所在的目录,我们可以自己猜测目录位置,这里我使用gobuster来暴力破解一下目录名:
gobuster一下子就找到了 uploads
目录,然后尝试看一下该目录的内容,发现我们没有查看该目录的权限,但是我们可以尝试访问一下我们上传到该目录的文件:
反弹shell
首先,我们建立一个 netcat
的连接,如下图所示:
然后我们在网页中访问我们上传的文件的地址:
然后就可以发现我们成功监听到了(这里需要注意的是,我们在此过程的每个页面访问到需要修改cookie值,包括上传和重新访问,否则监听不到呜呜呜,所以推荐上传的过程中每次都使用burpsuit修改一下cookie值):
好,现在我们我们成功拿到shell了,现在为了使页面看起来更加美观,我们使用下述命令:
python3 -c 'import pty;pty.spawn("/bin/bash")'
提升权限
接下来,我们查看一下 .php
的文件后缀,看是否有敏感信息泄露,输入命令 find / -type f -name *.php 2>/dev/null
:
作为用户 www-data
,该角色对系统的访问受到限制。由于网站正在使用 PHP 和 SQL,我们可以进一步枚举可能泄露的 Web 目录
或配置错误。经过一番搜索,我们可以在 /var/www/html/cdn-cgi/login
目录下找到一些 php 文件。我们可以手动查看所有页面的源代码,也可以尝试搜索使用 grep 工具可以得到有趣的字符串。输入命令:cat * | grep -i passw*
:
我们确实得到了密码:MEGACORP_4dm1n!!
。我们可以通过以下方式检查系统上的可用用户读取 /etc/passwd
文件,以便我们可以尝试重用此密码,输入 cat /etc/passwd
:
发现一个可用用户robert,此时我们切换到robert用户,结果发现登录不上…:
怎么判断用户是否可用?
格式:用户名:密码:用户ID:组ID:描述信息:家目录:登录Shell
检查 UID 是否大于等于 1000。
检查登录Shell 是否有效(非
/sbin/nologin
或/bin/false
)。检查用户的家目录是否存在。
那我们再找找,发现在db.php中找到了密码:
赶紧使用这个密码试一下,没有问题,这个密码是正确的:
然后我们在该用户的主目录找到了一个user.txt
文件,我们查看一下,发现了第一个flag:
好了现在还有一个flag应该是在root用户中,我们尝试提权来查看一下。
在运行任何权限提升或枚举脚本之前,让我们检查一下用于提升权限的基本命令sudo
和 id
等权限:
我们观察到用户 robert
是 bugtracker
组的一部分。让我们尝试看看里面是否有任何二进制文件,输入命令:find / -group bugtracker 2>/dev/null
:
我们发现一个名为 bugtracker
的文件。我们检查它的权限和文件类型ls -la /usr/bin/bugtracker && file /usr/bin/bugtracker
:
该二进制文件上设置了一个 suid,这是一个很有用的利用路径。
SUID 是一个强大的工具,它允许文件以文件所有者(通常是 root)身份执行,从而使某些需要特权的程序能够由普通用户执行。
当一个文件具有 SUID 权限时,无论哪个用户执行该文件,该文件将以文件所有者的身份运行,而不是以执行文件的用户身份运行。
如果文件的所有者是
root
用户,那么任何人执行该文件时,都会以root
用户的身份来执行。
然后我们运行该应用程序观察其行为:
该工具接受用户输入作为将使用 cat
命令读取的文件名,但是,它没有指定文件 cat
的完整路径,因此我们可以利用它。
我们将导航到 /tmp
目录并创建一个名为 cat
的文件,其中包含以下内容:
/bin/sh
然后我们设置改文件的执行权限:
chmod +x cat
为了利用这一点,我们可以将 /tmp
目录添加到 PATH
环境变量中,/tmp
目录将被添加到 PATH
变量的最前面:
export PATH=/tmp:$PATH
然后我们检查一下环境变量:
echo $PATH
然后我们再次执行一下该二进制文件,提权成功:
然后我们找到 /root
目录下的 root.txt
,由于cat
查看不了,那我们使用more
来查看一下:
最后成功获取root用户的flag。
题目答案
task 1
With what kind of tool can intercept web traffic?(用什么工具可以拦截网络流量?)
答案:proxy
task 2
What is the path to the directory on the webserver that returns a login page?(返回登录页面的网络服务器上的目录路径是什么?)
答案:/cdn-cgi/login
task 3
What can be modified in Firefox to get access to the upload page?(可以在 Firefox 中修改哪些内容才能访问上传页面?)
答案:cookie
task 4
What is the access ID of the admin user?(管理员用户的访问 ID 是什么?)
答案:34322
task 5
On uploading a file, what directory does that file appear in on the server?(上传文件时,该文件出现在服务器上的哪个目录中?)
答案:/uploads
task 6
What is the file that contains the password that is shared with the robert user?(包含与 robert 用户共享的密码的文件是什么?)
答案:db.php
task 7
What executible is run with the option “-group bugtracker” to identify all files owned by the bugtracker group?(使用选项“-group bugtracker”运行什么可执行文件来识别 bugtracker 组拥有的所有文件?)
答案:find
task 8
Regardless of which user starts running the bugtracker executable, what’s user privileges will use to run?(无论哪个用户开始运行 bugtracker 可执行文件,都将使用什么用户权限来运行?)
答案:root
task 9
What SUID stands for?(SUID 代表什么?)
答案:Set owner User ID
task 10
What is the name of the executable being called in an insecure manner?(以不安全方式调用的可执行文件的名称是什么?)
答案:cat
task 11
Submit user flag(提交用户flag)
答案:f2c74ee8db7983851ab2a96a44eb7981
task 12
Submit root flag(提交root的flag)
答案:af13b0bee69f8a877c3faf667f7beacf