HackTheBox-Oopsie
实验环境
信息收集
端口扫描:
1 | nmap -sT -Pn 10.10.10.28 |
发现80端口开放,在浏览器打开,啥也没有,尝试找登录界面
目录扫描:
成功找到登录界面
在bp中也可以看到登录页的js加载记录
在浏览器打开
实验过程
账号为admin
,密码是上一题中出现过的MEGACORP_4dm1n!!
,直接登录,登录后看到有一个上传功能,点击提示需要super admin权限
先看一下我们现在账号信息,在url中还可以看到目前的用户id=1
再抓包看一下:
id和user、role对应,可以尝试遍历用户
发送到interlude模块,标记id参数,设置好payload开始爆破
看到id=30的响应包的长度比较大,看一下他的响应包的内容,确认为super admin用户
修改目前用户的user和role值,成功越权到super admin用户
然后尝试上传shell,同样修改当前用户的user和role值,就可以进行文件上传
直接用kali自带的反弹shell文件,修改好ip和port
注意上传的过程中也要修改当前用户的user和role,改成super admin的值,就可以成功上传
接下来开启一个监听端口来接收反弹的shell
然后就是要找到我们上传的shell,扫目录的时候有一个uploads的路径,我们上传的文件应该就在这里
访问上传的shell来执行
回到netcat中就可以看到反弹的shell了
拿到shell先看看有没有有用的文件,我们拿到了数据库的账号密码
但是现在的shell是非交互式的,我们接下来要升级到交互的shell,两者的区别如下:
1 | 交互式模式就是shell等待你的输入,并且立即执行你提交的命令,退出后才终止 |
1 | 用netcat获得的shell是非交互式的,不能传递tab来进行补全,不能使用su、nano,也不能执行ctrl+c等命令,所以我们需要升级为交互式的shell |
逐条键入命令:
1 | # 将在环境变量下将shell设置为/bin/bash且参数为-q和/dev/null的情况下运行脚本,-q参数为静默运行,输出到/dev/null里,如果不加script -q /dev/null不会新启一个bash,shell=/bin/bash只是设置shell为bash,加了以后会给你挂起一个新的shell,并帮你记录所有内容 |
拿到交互的shell我们就可以切换到Robert用户了
获取普通用户权限的flag
权限提升
下面我们就要想办法提权,我们先看看这个组里面有没有特殊权限
1 | # -type f 为查找普通文档,-group bugtracker 限定查找的组为bugtracker,2>/dev/null 将错误输出到黑洞(不显示) |
拥有者有s
(setuid
)特殊权限,可执行的文件搭配这个权限,可以得到特权,任意存取该文件的所有者能使用的全部系统资源,我们尝试运行它,发现这个文件根据提供的ID
值输出以该数字为编号的bug
报告
接下来我们可以使用strings
命令来看看对象文件或二进制文件中查找可打印的字符串
可以看到bugtracker
调用了cat
命令,输出了/root/reports/
目录下的bug
报告,其实本来我们当前用户是没有权限访问/root
目录的,但是我们有了setuid
后就拥有了/root
目录的访问有权限,也就拥有了root
权限,当前用户执行bugtracker
程序是会优先使用当前的path
变量,这时候我们就可以在当前用户环境变量指定的路径
中搜索cat
命令,然后创建一个恶意的cat
命令,修改当前用户环境变量,完成提权操作
1 | export PATH=/tmp:$PATH //将/tmp目录设置为环境变量 |
这样bugtracker
再次调用cat
命令时实际上调用的是/tmp
目录下的恶意的cat
命令,我们运行一下bugtracker
可以看出,此时robert
用户临时具有了root
权限,执行id
命令发现只是robert
用户的uid
变为了root
,不是真正的root
用户
这样我们就可以获取system的flag了
在/root/.config/filezilla/filezilla.xml文件中有下一题的ftp账号密码
参考: