HackTheBox - Machines - GoodGames
HacktheBox - Machines - GoodGame
靶机ip:10.10.11.130 攻击机IP:10.10.14.28
1.信息搜集
Nmap scan report for 10.10.11.130 |
只有一个tcp 80 端口开放,并且有域名,那么在 c:\windows\system32\drivers\etc\hosts 文件中添加ip对应的域名即可成功访问。
来到web页面,发现是一个游戏相关的网站,其中图片链接打开后去除图片名并不存在目录遍历
页面其他链接都指向页面本身,除了有一个 Blog
和 Store
以及右上角的小人图标
在 Blog
页面只发现这一个有用的链接,尝试了sql注入发现并不存在。
此时扫描目录和子域名爆破同时进行:
子域名无结果
目录扫描结果如下:
Target: http://goodgames.htb/ |
直接访问login、profile 分别提示405、500,web框架使用的 Flask
点击首页的右上角小人图标,弹出一个表单,登录、密码找回、注册用户。
这里不知道邮箱和密码,先看看注册功能,点击注册 跳转到一个可以注册可以登录的页面 signup
这里我注册admin@goodgames.htb显示账户已存在,这时候肯定爆破一下弱口令。
但是结果可想而知,并不理想,因为网络有点不稳定,所以跑了500就没跑了。
自己注册一个 kam1 用户,登录之后再看看profile里面有些什么东西。
此时得到信息:该靶机只有一个80端口开放,没有发现子域名,没有敏感信息泄露,无SSTI(模板注入),弱口令夭折,得到可访问页面若干
2.漏洞利用
0x01. SQL注入
来到profile界面之后,发现页面只有一个重置密码的功能,并无其他资料修改的功能
抓包 修改密码 看看有没有越权
好!没有越权操作。
抠了一下脑壳,突然想到,blog页面的get传参sql注入测试过没有,但是表单这里还有没有测试sql注入呀。
既然说出来了那么就要有行动,RUSH!
Login Success!
刚刚页面有欢迎语句,搜索一下Welcome看看现在是什么身份。
这里有三个用户,admin、kami、kam1 后面两个都是我注册的。
现在去登录页面,因为前端js校验邮箱正确与否,输入正确邮箱格式抓包修改参数即可。
虽然成功进入了后台,但是并没有啥卵用啊,啥功能也没有。
还是回到sql注入找找信息吧。
逐字猜解,有四个字段,回显点在第四个字段
因为之前爆用户的时候可以看到将三个用户名紧凑在一起,所以上面用分号隔开来了。
当前得到信息:当前用户并非dba权限,数据库中只有main
、information_schema
两个库,user
表中有四个字段,分别是id
,email
,password
,name
查询一下这个表里面的所有东西
password值是md5加密的,去撞库看看能不能得到明文
得到密码:superadministrator
0x02. SSTI(模板注入)
通过管理员登录之后可以看到原先右上角的两个图标变成了三个,多出来一个小齿轮,鼠标指针移动到这发现是跳转到一个子域名,在hosts文件中添加后,跳转访问。
直接就是一个flask登录表单页面,没有其他的花里胡哨的东西,同样admin
,pass:superadministraotr
登录成功
登陆之后发现文件上传、添加用户、搜索等功能,但是经过测试,这些都是指向页面本身,并没有其他作用
好在这里还有一个设置页面,可以修改用户名,插入一条xss语句
页面编程语言依旧是python,同样使用的flask
flask存在一个SSTI,那么现在来测试一下便知:poc:{{9\*9}}
如果得到结果81,则存在SSTI
测试结果为81,当前存在SSTI
既然存在SSTI,接下来就是执行系统命令的阶段了,原理方面就是通过python调用本身的类中的函数去执行一些自己想要执行的操作,比如执行命令,文件读取等。
payload: |
执行id命令成功,现在反弹一个shell过来。
exploit: |
3. 权限提升
来到根目录,ls -la一下发现有一个 .dockerenv 看来这是在docker中了。
通过ifconfig可以看到这里还有另外一个ip:172.19.0.2,循环ping一下这个网段有几台主机
只发现了还有一个 172.19.0.1,多半是docker的主机了。
循环ping一下这台机器的所有端口,只有22和80端口开放。
尝试ssh,刚刚在/home/augustus中找到了user.txt,这里直接用这个用户吧
登录成功,账号augustus,密码superadministrator
hostname -i 确定现在这台机器就是靶机,查看一下进程果然有docker进程
这边用户ls -la 列出来的文件 .bash_logout .bashrc .profile和docker中的文件大小一模一样,但是时间差了一个小时
那么我试试是否是在主机中创建文件,同样docker中也会有
可以看到,我在主机中创建了一个1.txt这时候再去docker中查看文件,docker中也生成了一个1.txt
那我再在docker中创建一个文件,看看是否主机会有反应呢。
可以看到我在docker中创建的txt跟上面一样,同时在宿主机中创建了,并且是root的权限
既然现在文件可以同步,可以尝试将宿主机的bash cp到augustus的目录,然后再在docker中将其权限设置为root去宿主机运行是否能得到一个root的shell呢
如此一来再运行bash这时候就会返回一个root的权限