用户
搜索

[内网攻防] 内网横移RCE(中)

  • TA的每日心情
    开心
    2021-5-2 17:40
  • 签到天数: 17 天

    连续签到: 1 天

    [LV.4]经常看看II

    i春秋作家

    Rank: 7Rank: 7Rank: 7

    11

    主题

    36

    帖子

    693

    魔法币
    收听
    0
    粉丝
    1
    注册时间
    2019-4-17

    i春秋签约作者

    发表于 2021-5-2 17:46:12 78860

    内网横移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

    ​           SMB(ServerMessage 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的应用程序接口 (ApplicationProgram 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截图如下:

    e1.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截图如下:

    e2.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 挑战消息,效果如下图:

    e3.png

    ​           客户端192.168.195.130在本地将密码与挑战码综合运算后得到散列值NTLM Response,并Authenticate认证消息(含用户名、密码散列)到服务器192.168.195.129

    wireshark抓包,发送NTLM response认证身份,效果如下图:
    e4.png

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

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

    e5.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所示。

    e6.png

    ​           

    2.smbexec工具包

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

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

    e7.png

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

    e8.png

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

    e9.png

    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 admin

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

    e10.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所示。

    e11.png

    5.smbclient

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

    ​           此时需要执行的命令如下:

    smbclient //192.168.195.129/c$  -U administrator%1qaz@WSX

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

    四、日志溯源

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

    打开事件查看器,查看日志分栏,效果如下图所示:

    e13.png

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

    筛选事件ID == 7036、7045、7009,效果如下图所示:

    e14.png

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

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

    e15.png

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

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

    效果如下图所示:

    e16.png

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

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

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

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

    e18.png

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

    ​           同时,对溯源有帮助的事件汇总如下:

    ​           3个系统事件ID:7036(服务停止)、7040(配置按需启动)、7045(服务已启动)。

    ​           4个安全事件ID:4624(登录)、4672(特权登录)、4676(试图验证)、4634(注销)。

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

    五、小结

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

    感谢分享,大佬牛逼
    使用道具 举报 回复
    使用道具 举报 回复
    发表于 2021-5-5 19:23:18
    给巨老顶贴
    使用道具 举报 回复
    发表于 2021-5-5 20:35:25
    发消息你不回,原来你又在写贴
    使用道具 举报 回复
    发表于 2021-5-5 22:56:20
    可以,可以,学废了
    使用道具 举报 回复
    发表于 2021-5-6 14:10:41
    good job!      
    使用道具 举报 回复
    感谢分享
    剑未佩妥出门已是江湖
    使用道具 举报 回复
    发新帖
    您需要登录后才可以回帖 登录 | 立即注册