电脑疯子技术论坛|电脑极客社区

微信扫一扫 分享朋友圈

已有 3127 人浏览分享

内网横移RCE(中)

[复制链接]
3127 0
内网横移RCE(中)

在内网渗透过程中当获得一台Windows主机的账号密码,并希望在目标主机不开启3389端口下实现远程执行命令可使用
telnet,但telnet默认状态为被禁用。此时 远程执行命令 最常用的有Pec式工具,它有多种语言编写的版本,如Metasploit
中的Pec和Pec_psh Impacket中的Pec Empire中的Invoke-Pec等当然还有Windows Sysinternals公司 pstools工具包
中的Pec模块。这些Pec式工具都极其出色 但因为释放服务 添加服务 这些操作在各种防御软件的保护下易被管理员发现
除Pec式工具外 我们探讨一些较隐蔽的远程执行命令方式 本篇讲第二种SMB (ServerMessage Block)通信协议。

一、SMB

SMBServerMessage Block通信协议是微软 Microsoft和英特尔(Intel)在1987年制定的协议 主要是作为Microsoft网络的通
讯协议 SMB 是在会话层 session layer 和表示层presentation layer 以及小部分应用层application layer 的协议 其是一个
很重要的协议 目前绝大多数的PC上都在运行这一协议 windows系统都可充当SMB协议的客户端和服务器 可见SMB是一个
遵循客户机服务器模式的协议。

SMB服务器负责通过网络提供可用的共享资源给SMB客户机 服务器和客户机之间通过TCP/IP协议 或者IPX协议或者
是NetBEUI进行连接。SMB是应用层和表示层 协议 使用C/S架构,其使用了NetBIOS的应用程序接口 ApplicationP
rogram Interface简称API一般端口使用为139 445。

当远程连接计算机访问共享资源时有两种方式:

计算机地址\共IP享资源路径
计算机名\共享资源路径

其中 使用计算机名访问时 SMB服务工作在NetBIOS协议之上用的是TCP的139端口
使用IP地址访问时用的是TCP的445端口。

​SMBExec与Pec非常相似 但相比Pec在隐蔽上有些许优势 具体地 SMBExec并不会将二进制文件保存到磁盘上
相反 SMBExec会利用一个批处理文件 以及一个临时文件 来执行和转发消息。正如P**ec SMBExec也是通过
SMB协议445/TCP来发送输入信息并接收输出结果的。

二、SMB协商过程

​因近期挖矿病毒较为流行 挖矿病毒常伴有一个特征:SMB爆破横移 因此掌握smb协议通信过程熟悉
内网SMB流量情况 有助于快速定位挖矿病毒主机。在开始实验前 先简单介绍实验环境:

客户端: 192.168.195.130,Windows Server 2008操作系统
服务端:192.168.195.129,Windows Server 2008操作系统
开启wireshrk后 在客户端192.168.195.130资源管理器URI中访问\\192.168.195.129\ 可触发SMB协商
经过简单语法过滤 在下图Request包可以看到 存在TCP三次协商握手 并建立连接。
SMB协商Requst请求 wireshark截图如下:

174237u9a9h2ilgqshaqtp.png

具体地 SMB协商过程为 客户端192.168.195.130发送一个SMB negotiate protocol request
请求数据报并列出它所支持的所有SMB协议版本
0x0202   SMB 2.002
0x0210   SMB 2.10

当服务端192.168.195.129第二次回应后 通过wireshark下图Response包可以看到协商结果。
协商结果为:使用SMB 2.10进行通信。

wireshark截图如下:

1000099.png

通过TCP三次握手 SMB协议已确定为SMB 2.10 。
​客户端与服务器下一步将进行NTLM身份认证。因为NTLM是一种在不直接提供密码的情况下间接
证明客户端知道用户密码的方法。故我们在抓包中无法捕获明文密码。
下面简单提及NTLM认证过程 NTLM认证共需要三个消息完成:

​           (1). Type1 消息。 Negotiate 协商消息。
​           客户端在发起认证时,首先向服务器发送协商消息。 协商需要认证的主体,用户,机器等内容。
​           (2). Type2 消息。 Challenge 挑战消息。
​           服务器在收到客户端的协商消息之后 会读取其中的内容 并生成一个随机数challenge返回给客户端。
​           (3). Type3 消息。 Authenticate认证消息。

客户端在收到服务端发回的随机数challenge。使用对应的密码以及服务器的随机数challenge生成一个认证消息。并发回给服务器。
(4). 服务器在收到 Type3的消息之后,经过相同的运算,比较计算出的认证消息和客户端发回来的认证消息是否匹配。匹配则认证成功。
回到实验中 客户端192.168.195.130接收到Session Setup response  里面为Type2 消息 含NTLM 挑战码 3896b7822c69f56a。
wireshark抓包,获得Type2 消息含Challenge 挑战消息。
查看Challenge 挑战消息 效果如下图:

9999.png

客户端192.168.195.130在本地将密码与挑战码综合运算后得到散列值NTLM Response并Authentic
ate认证消息(含用户名 密码散列)到服务器192.168.195.129。
wireshark抓包 发送NTLM response认证身份 效果如下图:

9998.jpg

假如一切顺利 可在响应包看到NTLM认证成功标志。

wireshark抓包 NTLM认证成功效果如下图:

9996.png

三、工具选择

1.smbexec.py

smbexec.py出自 Impacket 开发者为SecureAuthCorp 是一款Python类的集合项目。除wmiexec.py 较著名地还有Pec
WmiExec goldenPac.py其利用MS14-068实施攻击。SMBExec与Pec非常相似 然而 SMBExec并不会将二进制文件保存
到磁盘上。相反 SMBExec会利用一个批处理文件 以及一个临时文件 来执行和转发消息。正如P**ec SMBExec也是通过
SMB协议445/TCP来发送输入信息并接收输出结果的 通过文件共享 admin$ c$ ipc$ d$在远程系统中执行命令。

其属于快速Pec类工具 Pec的执行原理是:先通过ipc$进行连接 再将pecvc.exe释放到目标主机中 通过服务管理SCManager
远程创建pecsvc服务并启动服务 客户端连接负责 执行命令 服务端负责启动相应的程序并回显数据。因为它的原理是创建服
务运行 即sc,权限为最高权限system。
python smbexec.py -h
Impacket v0.9.23.dev1+20210416.153120.efbe78bb - Copyright 2020 SecureAuth Corporation
usage: smbexec.py [-h] [-share SHARE] [-mode {SHARE,SERVER}] [-ts] [-debug]
                  [-codec CODEC] [-shell-type {cmd,powershell}]
                  [-dc-ip ip address] [-target-ip ip address]
                  [-port [destination port]] [-service-name service_name]
                  [-hashes LMHASH:NTHASH] [-no-pass] [-k] [-aesKey hex key]
                  [-keytab KEYTAB]
                  target

此时需要执行的命令如下:
python wmiexec.py administrator:1qaz@WSX@192.168.195.129

效果如图3-79所示。

174238jv0npncv4vvgp7hw.png

2.smbexec工具包

​smbexec工具包开发者是brav0hax 项目基于ruby语言开发而成 支持多版本Linux平台 该套件基于smb服务编写了一系列渗透
工具其可以用于扫描目标网络 IP 地址段中存活的主机 主机系统中的重要信息;列举目标系统中的管理员用户 已登录目标系统
的用户 列举远程登录目标主机的用户;列举目标系统 UAC 的状态 关闭远程主机的 UAC;对目标系统中的网络目录进行列举
在目标系统中搜索敏感文件 例如配置文件 密码信息 缓存文件;生成meterpreter Payload并在目标系统中直接运行它。

按要求在Kali安装完毕后输入smbexec进入工具主界面 效果如图3-79所示。

9992.png

探测C段内的SMB存活主机 效果如图3-79所示。

999.png

在网段中搜索敏感文件 例如配置文件 密码信息 缓存文件等 效果如图3-79所示。

998.jpg

3.SMBMap

​Kali内置SMBMap 其可以满足SMB枚举需求 其允许用户枚举整个域中的samba共享驱动器。用户可以使用该工具列
出共享驱动器 驱动器权限 共享内容 上传/下载功能、文件名自动下载模式匹配 甚至远程执行命令该工具原本的设计
初衷为简化在大型网络中搜索潜在敏感数据的过程。
smbmap -h
usage: smbmap [-h] (-H HOST | --host-file FILE) [-u USERNAME] [-p PASSWORD]
              [-s SHARE] [-d DOMAIN] [-P PORT] [-v] [--admin] [-x COMMAND]
              [--mode CMDMODE] [-L | -R [PATH] | -r [PATH]] [-A PATTERN | -g]
              [--dir-only] [--no-write-check] [-q] [--depth DEPTH]
              [--exclude SHARE [SHARE ...]] [-F PATTERN] [--search-path PATH]
              [--search-timeout TIMEOUT] [--download PATH] [--upload SRC DST]
              [--delete PATH TO FILE] [--skip]                        
SMBMap - Samba Share Enumerator | Shawn Evans - ShawnDEvans@gmail.com
optional arguments:                                                   
  -h, --help            show this help message and exit                        
Main arguments:
  -H HOST               IP of host
  --host-file FILE      File containing a list of hosts
  -u USERNAME           Username, if omitted null session assumed
  -p PASSWORD           Password or NTLM hash
  -s SHARE              Specify a share (default C$), ex 'C$'
  -d DOMAIN             Domain name (default WORKGROUP)
  -P PORT               SMB port (default 445)
  -v                    Return the OS version of the remote host
  --admin               Just report if the user is an

执行命令效果如图3-79所示。

997.png

4.Crackmapexec

​CrackMapExec又称CME)是一种后渗透工具 帮助自动评估大型活动目录网络的安全性。CME出于隐身考虑而构建
遵循不着陆的概念:滥用内置的Active Directory功能/协议以实现其功能 并使其逃避大多数端点保护/IDS/IPS解
决方案。CrackMapExec可以映射网络主机 生成中继列表 枚举共享和访问 枚举活动会话 枚举磁盘 枚举登录用户
枚举域用户 通过暴力破解RID枚举用户 枚举域组 枚举本地组等。

针对大型Windows活动目录的后渗透工具 提供了域环境活动目录渗透测试中一站式便携工具它具有列举登录用户
通过SMB Server Message Block)网络文件共享协议爬虫列出SMB分享列表。该工具的生存概念是 利用AD内置
功能/协议达成其功能 并规避大多数终端防护/IDS/IPS解决方案。

kali未内置该工具 安装命令:apt-get install crackmapexec
crackmapexec smb -h
usage: crackmapexec smb [-h] [-id CRED_ID [CRED_ID ...]]
                        [-u USERNAME [USERNAME ...]]
                        [-p PASSWORD [PASSWORD ...]] [-k]
                        [--aesKey AESKEY [AESKEY ...]]
                        [--kdcHost KDCHOST]
                        [--gfail-limit LIMIT | --ufail-limit LIMIT | --fail-limit LIMIT]
                        [-M MODULE]
                        [-o MODULE_OPTION [MODULE_OPTION ...]] [-L]
                        [--options] [--server {https,http}]
                        [--server-host HOST] [--server-port PORT]
                        [-H HASH [HASH ...]] [--no-bruteforce]
                        [-d DOMAIN | --local-auth]
                        [--port {139,445}] [--share SHARE]
                        [--smb-server-port SMB_SERVER_PORT]
                        [--gen-relay-list OUTPUT_FILE]
                        [--continue-on-success]
                        [--sam | --lsa | --ntds [{drsuapi,vss}]]
                        [--shares] [--sessions] [--disks]
                        [--loggedon-users] [--users [USER]]
                        [--groups [GROUP]] [--local-groups [GROUP]]
                        [--pass-pol] [--rid-brute [MAX_RID]]
                        [--wmi QUERY] [--wmi-namespace NAMESPACE]
                        [--spider SHARE] [--spider-folder FOLDER]
                        [--content] [--exclude-dirs DIR_LIST]
                        [--pattern PATTERN [PATTERN ...] | --regex
                        REGEX [REGEX ...]] [--depth DEPTH]
                        [--only-files] [--put-file FILE FILE]
                        [--get-file FILE FILE]
                        [--exec-method {wmiexec,smbexec,mmcexec,atexec}]
                        [--force-ps32] [--no-output]
                        [-x COMMAND | -X PS_COMMAND] [--obfs]
                        [--amsi-bypass FILE] [--clear-obfscripts]
                        [target [target ...]]

此时需要执行的命令如下:
crackmapexec smb 192.168.195.129/30 -u administrator -p 1qaz@WSX -x whoami

执行命令效果如图3-79所示。

996.jpg

5.smbclient

smbclient命令属于samba套件 它提供一种命令行使用交互式方式访问samba服务器的共享资源。
让 linux机器  访问/共享 windows 机器上的 共享文件夹 用法类似ftp文件传输。

此时需要执行的命令如下:
smbclient //192.168.195.129/c$  -U administrator%1qaz@WSX

执行命令效果如下图所示。

992.jpg

四、日志溯源

假设攻击者已使用smbexec.py执行命令 我们对其溯源 使用 eventvwr 打开事件查看器 默认分为三类应用程序
安全系统  windows系统日志文件后缀为evt 存储在%systemroot%/system32/config目录。
打开事件查看器 查看日志分栏 效果如下图所示:

991.jpg

合理使用筛选器往往可以帮助我们更好的排查日志 比如SMB入侵的筛选事件ID == 7045 4624等后续通过对
时间的排查 以及源IP地址 类型与请求的频率进行分析来判断是否来源于内网横移。
筛选事件ID == 7036、7045 7009 效果如下图所示:

990.jpg

登陆事件记录含源IP地址 有助于我们判断是否来源于内网横移。

选择安全栏 事件id == 4624 效果如下图所示:

989.jpg

读取execute.bat文件中的数据后 可以发现 攻击者发送给远程机器的命令输入被追加到了execute.bat文件的开头
处execute.bat把我们的输入发送到远程机器上 执行它们 并把输出重定向到一个名为__output的临时文件中 临时
文件位于\127.0.0.1\C$路径。

可使用Process Explorer分析cmd.exe进程属性 鼠标停留在cmd.exe进程上可快速预览属性信息。

效果如下图所示:

988.jpg

读取execute.bat文件 其内容为攻击者命令行输入 非异常时 smbexec.py 每命令执行成功将删除缓存文件。

查看execute.bat内容 效果如下图所示:

69.jpg

读取__output文件 其内容为命令回显 非异常时 smbexec.py 每命令执行成功将删除缓存文件。

查看__output文件内容 效果如下图所示:

68.jpg

相关文件的修改日期 佐证了上述的猜想 攻击者发送给远程机器的命令输入被追加到了execute.bat文件的开头处。
execute.bat把我们的输入发送到远程机器上 执行它们 并把输出重定向到一个名为__output的临时文件中。
同时 对溯源有帮助的事件汇总如下:

​           3个系统事件ID:7036(服务停止)7040(配置按需启动)7045(服务已启动)。
​           4个安全事件ID:4624(登录) 4672(特权登录) 4676(试图验证)4634(注销)。

选择对应栏 事件对应填入 筛选效果如下图所示:

五、小结

在内网渗透的过程中,当获得一台Windows主机的账号密码并希望在目标主机不开启3389端口下实现远程执行命令可使用
telnet但telnet默认状态为被禁用。此时 远程执行命令 最常用的有Pec式工具。因为其释放服务 添加服务 这些操作在各种
防御软件的保护下易被管理员发现。除Pec式工具外 我们探讨一些较隐蔽的远程执行命令方式 本篇讲了第二种SMB Server
Message Block)通信协议 SMBExec与Pec非常相似 然而 SMBExec并不会将二进制文件保存到磁盘上。相反 SMBExec会利
用一个批处理文件 以及一个临时文件 来执行和转发消息。正如Pec SMBExec也是通过SMB协议445/TCP来发送输入信息并
接收输出结果的。因为SMB入侵一般会留下痕迹 本文结合windows 日志溯源做了讲解。类似的情景 往往出现在应急响应中
客户提出需要为其提供溯源结果 于是安全人员通过耐心挖掘日志信息中的线索 这些线索可能已被部分清理 但人总有犯错的
时候 通过一点点收集攻击路径 猜测攻击手法 综合各设备日志记录,从系统、服务、文件、网络四个部分进行相互关联 做到
积极主动且有预见性 这些将为在取证和溯源提供深入的思路。攻防安全没有止境 如何更快地将捕获的数据形成新的线索 如
何更准确地推断攻击者的攻击手法 如何更全地掌握攻击者背后的 IP &域名资产 仍然是我们今后在工作中需要不断思考的问
题我们安全人员深感责任重大。

您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

关注

0

粉丝

9021

主题
精彩推荐
热门资讯
网友晒图
图文推荐

Powered by Pcgho! X3.4

© 2008-2022 Pcgho Inc.