实战 | 手把手教你如何进行内网渗透

在线wifi跑包 金刚包跑包 cap跑包 hccapx ewsa在线 就来 握手包跑包

各位好 又见面了 我是曹操 今天给大家带来一篇新的教程

希望各位细心学习 低调用网

systeminfo

0x00 前言
内网渗透主要是通过获取webserver的shell来进行,然后收集webserver上的信息,对其他内网主机进行口令攻击或利用漏洞进行攻击。关于内网的相关概念不再赘述,大家可以自行搜索了解。在实际环境中进行操作可以更好地理解这些概念。下面是一个内网靶场的详细教程:Vulnstack(一)。在内网渗透过程中,经常需要进行内网穿透,了解内网穿透、端口转发和端口映射等相关知识可以参考:如何理解内网穿透。本文的实操部分比较简略,主要是为了加深理解、拓宽思路和扩充知识面。实际上,有很多集成化工具,很少会单独使用这些方法。在考虑免杀的情况下,可能会将某些操作拆分出来,单独进行免杀和利用。由于篇幅有限,只展示部分资料,需要点击链接获取更多信息。【点击领取】CSDN大礼包:《对标阿里黑客&网络安全入门&进阶学习资源包》免费分享。

0x01 信息收集
查看系统详细信息,如操作系统版本、补丁情况,可以根据这些信息筛选可利用的漏洞。查看启动进程可以判断主机在域中的角色。以下是一些常用的命令:

  • 查看进程列表
  • 查看开放端口情况
  • 判断是否存在域
  • 查看主机名、域DNS和IP
  • 查看域内主机
  • 查看IP
  • 查看登录信息
  • 查看用户信息
  • 查看域内用户

这些命令可以在域控制器上直接执行,对于其他域主机,需要打开域控制器的RPC服务。还可以使用nmap、masscan等第三方工具,或者empire、nishang等第三方脚本进行探测。需要注意的是,在考虑免杀的情况下,可能需要拆分操作以进行免杀和利用。在域内还有一台机器STU1,但由于防火墙开启,禁止ping,所以在前面的net view命令中没有显示STU1。关闭防火墙后再次尝试:[图片]可以使用计算机用户Hash和明文密码获取信息,例如使用mimikatz获取Windows密码,mimipenguin获取Linux密码。还可以获取计算机各种协议和服务口令,例如使用LaZagne获取Windows、Linux和Mac的口令。探测域内存活主机及地址信息可以使用内部命令(.bat)、nmap、masscan和powershell第三方脚本(如empire、nishang)。需要注意的是,Mimikatz是第三方软件,直接上传到目标主机可能会被杀毒软件查杀。可以配合官方软件Procdump,将Procdump上传到目标主机获取用户信息(该文件不可读),然后使用本地的Mimikatz打开Procdump获取用户信息。Mimikatz下载链接:[链接],Procdump下载链接:[链接]。

0x02 IPC&SMB&WMI
内网渗透主要基于口令攻击。在同一域内有许多主机和用户,为了方便记忆和管理,域成员的密码很多时候会有重复。当我们获取到某个域成员的密码后,就可以利用它来扩大攻击面,对域内的其他主机进行口令爆破,直到获取域控制器的权限。Windows提供了许多协议和功能,我们可以利用这些功能和协议来传递用户凭证进行验证。

一、SMB协议
SMB(Server Message Block)是一种客户端/服务器、请求/响应协议。通过SMB协议,客户端应用程序可以在各种网络环境下读取、写入服务器上的文件,以及向服务器程序发送服务请求。通过SMB协议,应用程序可以访问远程服务器上的文件、打印机、邮件槽(mailslot)和命名管道(named pipe)等资源。在TCP/IP环境下,客户端通过NetBIOS over TCP/IP(或NetBEUI/TCP或SPX/IPX)连接服务器。连接成功后,客户端可以向服务器发送SMB命令,从而可以访问共享目录、打开文件、读写文件,以及进行其他文件系统操作。

二、IPC(Inter-Process Communication)和命名管道
IPC是进程间通信的一种方式,用于实现两个进程之间的数据交互。常见的IPC方式包括共享内存、消息队列和命名管道等。命名管道是一种简单的IPC机制,Windows大多数版本都支持它。命名管道可以在同一台计算机的不同进程之间或跨越网络的不同计算机的不同进程之间进行可靠的单向或双向数据通信。命名管道可以利用Windows内建的安全特性(如ACL)提供安全通信。与TCP/IP协议类似,命名管道是一种通信协议,通常用于局域网中,因为客户端需要具有访问服务器资源的权限。在快速局域网环境中,TCP/IP套接字客户端和命名管道客户端的性能相当。但是在网络速度较慢的情况下,TCP/IP套接字客户端的性能优势更加明显。命名管道的网络通信交互性更强,一个对等项只有在另一个对等项请求数据时才发送数据。在开始读取数据之前,网络读取通常包括一系列窥视命名管道的信息。这可能会在慢速网络中产生大量的开销和网络流量,也会影响其他网络客户端。

三、WMI(Windows Management Instrumentation)
WMI是一组扩展到Windows驱动程序模型的工具。它允许使用脚本语言(如VBScript或Windows PowerShell)本地或远程管理Microsoft Windows个人计算机和服务器。简单来说,我们在cmd或powershell中使用的命令行语言就是WMI支持的,它提供了一个接口(如powershell),方便我们管理计算机。在远程管理方面,涉及到一些重要的端口,如22、23、135、139、445、3389等。139和445端口已经在前面讨论过了,22端口是Linux的SSH,23端口是Telnet,3389端口是远程桌面连接(RDP)。这些都是比较常见的端口。在这里重点介绍一下135端口。

135端口主要用于支持RPC(Remote Procedure Call,远程过程调用)协议和DCOM(Distributed Component Object Model,分布式组件对象模型)服务。通过RPC,可以确保在一台计算机上运行的程序可以顺利执行远程计算机上的代码。而DCOM可以通过网络直接进行通信,支持多种网络传输,包括HTTP协议。进程间通信(IPC)是在多任务操作系统或联网计算机之间运行的程序和进程之间进行通信的技术。有两种类型的IPC:本地过程调用(LPC)和远程过程调用(RPC)。LPC用于多任务操作系统中,使同时运行的任务能够相互通信。远程过程调用(RPC)类似于LPC,但在网络上工作。RPC最早出现在运行UNIX操作系统的Sun Microsystems和HP公司的计算机中。

总结一下,SMB协议用于实现资源共享,IPC用于建立连接。没有连接,如何共享资源?前面已经说过,共享包括命名管道,而命名管道正是建立连接的方式。此外,SMB协议的共享也依赖于IPC连接。但归根结底,对于连接后的计算机的远程管理,还是需要依赖WMI。

0x03 at&schtasks
at和schtasks用于创建定时任务,其中at适用于Windows Server 2012及以下版本。利用场景是已经获取了内网中一台主机的权限(webserver),掌握了该主机的域用户名和密码,并知道域内其他用户名。利用流程如下:

  1. 建立IPC连接到目标主机(明文密码)
  2. 将要执行的命令脚本复制到目标主机
  3. 查看目标时间,创建计划任务(at、schtasks)定时执行复制的脚本
  4. 删除IPC连接

可以使用以下命令查看当前网络连接:

  • netstat -ano

使用明文密码hongrisec@2021与192.168.52.143的godadministrator用户建立远程IPC连接。首先将恶意文件上传到之前获取shell权限的webserver上,然后通过建立的远程IPC连接将恶意文件从webserver复制到目标主机。

一、at命令(适用于Windows Server 2012及以下版本)
在Windows Server 2012及以下版本中,可以使用at命令创建定时任务。

二、schtasks命令(适用于Windows Server 2012及以上版本)
在Windows Server 2012及以上版本中,可以使用schtasks命令创建定时任务。创建计划任务对应的文件如下:

运行adduser任务:

删除adduser任务:

三、impacket工具包
impacket是一个打包好的工具包,其中包含了对各种协议和系统命令的利用工具。对于at和schtasks,可以使用impacket中的atexec.exe工具,它可以方便地进行远程连接并执行系统命令。impacket工具包提供了自带的提权功能,命令简洁且功能强大。但需要注意的是,impacket是非官方工具,容易被杀毒软件检测到。可以使用Python版或exe版的impacket工具包。在实战中,当我们获取了webserver的权限,获取了webserver上的密码和域内其他用户名后,可以使用用户作为字典、IP作为IP字典、密码作为密码字典,进行批量连接和探测哪些主机可以成功连接。一旦成功连接,就意味着我们可以通过计划任务等方式获取连接主机的权限。获取新的主机权限后,可以获取新的主机密码,然后丰富密码字典,再进行批量连接。如此循环,直到获取域控制器的权限。如上图所示,使用bat脚本只能遍历一个变量,如果想同时遍历三个变量,可以使用Python。例如,建立三个列表,使用三个循环进行遍历,生成命令执行语句(字符串),最后使用Python os模块中的os.system()函数执行系统命令。但需要注意的是,域内主机上可能没有Python环境,因此需要使用Python的pyinstaller模块将Python脚本打包成可执行文件,在Windows上直接运行。

0x04 SMB&WMI
利用思路不变,只是命令不同。psexec是微软官方pstools中的工具,因此不需要考虑免杀。上图中提到的psexec第二种方法和smbexec无需建立IPC连接的说法是不合理的。这些方法只是命令不同,提供明文账户密码时仍需要建立IPC连接,因为这些利用都是基于IPC共享的。此外,需要注意的是,官方不支持使用哈希进行连接。如果想要使用哈希进行连接(仅能获取哈希),可以使用impacket工具包,但需要注意免杀。

0x05 PTH&PTK&PTT
PTH(Pass the Hash,传递哈希)、PTK(Pass the Key,传递密钥)和PTT(Pass the Ticket,传递票据)是一些常用的攻击技术。在Windows Server 2012及以上版本中,默认关闭了wdigest,攻击者无法从内存中获取明文密码。在Windows Server 2012以下版本中,如果安装了KB2871997补丁,同样无法获取明文密码。针对这些情况,可以采取以下解决方案:

  1. 使用哈希传递(PTH、PTK等)进行移动
  2. 使用注册表操作开启Wdigest Auth值以获取明文密码
  3. 使用工具或第三方平台(如Hashcat)进行破解获取

Windows认证采用LM Hash和NTLM Hash加密算法。个人系统在Windows Vista及以上版本,服务器系统在Windows Server 2003及以上版本,认证方式均为NTLM Hash。如果只获取到哈希,可以尝试在本地破解,也可以使用前面介绍的impacket工具包。impacket工具包中的工具可以传递哈希并直接执行系统命令,优点是自带提权、命令简洁且功能强大,缺点是它是非官方工具,容易被杀毒软件检测到。PTH和PTK也可以使用mimikatz获取和攻击,这里不再赘述,可以自行搜索了解。对于哈希破解,可以使用hashcat工具。需要注意的是,只有打了补丁(KB2871997)才能使用PTK。PTT攻击不仅仅是简单的NTLM认证,它是利用Kerberos协议进行攻击的。Kerberos协议的工作原理在域中有详细介绍。简单来说,我们需要获取新鲜的票据(未过期,通常在主机登录后约10小时过期),然后将其注入到内存中,通过伪装混过认证。可以使用漏洞POC或工具进行利用,例如MS14-068。工具kekeo下载链接:[链接]。

0x05 参考资料

  • SQL Server中的命名管道(named pipe)及其使用
  • 进程间通信(IPC):共享内存和消息队列原理详解
  • 命名管道、TCP/IP协议、匿名管道
  • Windows系统安全 | IPC共享和其他共享(C共享和其他共享(C共享和其他共享(C、D、Admin、Admin、Admin)
赞(0)