内网横向基础总结
内网横向基础总结
获取域内单机密码和Hash
在windows 2000以后 windows都采用NTLM对用户的密码进行加密 通常保存在%SystemRoot%\System32\config\SAM文件中(如果是域环境中通常保存在NTDS.dit文件中),除了NTLM还有LM加密方式,SAM和NTDS.dit里面存放的内容如下:
1 |
|
在windows 2000以后 LM hash它的值通常是aad3b435b51404eeaad3b435b51404ee(空密码)
NTLM也分为NTLM1和NTLM2 NTLM2采用的是HMAC-MD5 而1采用的是MD4。
实际利用:
1 |
|
Mimikatz抓取密码
通过从lsass.exe进程中读取当前登录系统用户的密码,需要管理员权限。
当系统安装了kb2871997补丁或者系统版本大于win10和win2012时,默认禁止在内存中保存明文密码,这时候可以通过修改注册表的方式来进行绕过(打开Wdigest)。
1 |
|
Procdump
这是微软官方发布的工具(不易被检测到,杀软不会进行拦截),能够将目标lsass文件导出,然后再次利用mimikatz导出里面的hash.
https://docs.microsoft.com/zh-cn/sysinternals/downloads/procdump
1 |
|
然是使用mimikatz进行导出里面的hash(这里不需要管理员权限运行mimikatz)
1 |
|
利用sam和system文件
1 |
|
通过管理员权限获取sam和system文件,然后通过mimikatz获取账户的哈希值。
1 |
|
powershell脚本
使用powershell加载mimikatz模块来获取密码。
1 |
|
windows密码哈希的破解方法:
ophcrack工具
ophcrack下载地址:https://ophcrack.sourceforge.io/
ophcrack提供的彩虹表下载地址:https://ophcrack.sourceforge.io/tables.php
hashcat
常用的:
- -m 1000:NTLM
- -m 5600:Net-NTLMv2
- -m 5500:NetNTLMv1 / NetNTLMv1+ESS
- -m 0:MD5
- -m 2500:WPA/PSK
高权限下 在注册表中打开wdigest
1 |
|
利用windows远程连接命令
当我们拿到明文密码或者hash值时,我们可以通过windows自带的远程连接命令如IPC连接到目标的主机上,或者通过hash打一个PTH横向。
建立IPC连接
为了让进程之间通信而建立的命名管道,通过提供用户名和密码可以和目标主机建立连接,通过这个加密通道能够进行文件上传,访问特定目录下的文件信息,下载文件等操作。
1 |
|
1 |
|
除了上面的 我们还可以上传一个文件到目标主机上 然后可以配置写一个计划任务触发那个exe文件。
1 |
|
通过tasklist列出目标主机运行的进程。
1 |
|
开启IPC的前提条件:
1 |
|
删除ipc连接的命令如下:
1 |
|
利用计划任务进行横向
这里有at和schtasks两种命令,at的话再windows7之前(包括win7)使用,往后就不适用了,而schtasks都适用。
利用at创建计划任务
攻击思路如下:
1 |
|
下面就是通过at增加一条执行shell.exe的命令:
1 |
|
最后删除对应的计划任务:
1 |
|
还可以通过直接执行命令,然后由于是无回显的,将输出结果输出到目标系统的特定目录下。
1 |
|
利用schtasks创建计划任务
schtasks比起at更加的复杂,能够设定再一定的周期内运行,通常情况下是先创建一个计划任务,然后这个计划任务交由ask Scheduler 调用。
思路的话跟上面at的思路是一样的,只不过再计划任务创建这里会更加的复杂。
1 |
|
同样的 schtasks除了计划任务执行木马文件,还能进行系统执行,将结果输出到特定的文件目录下。
1 |
|
使用shctasks会留下日志,存放再C:\Windows\Tasks\SchedLgU.txt文件中(老系统Windows XP / Windows Server 2003 及更早版本是这样的),但是新的系统(Windows Vista 及更新版本)不再使用,计划任务的日志转移到了Event Viewer(事件查看器)。
创建Windows服务来进行横向
需要的前提条件:
1 |
|
利用sc进行内网横向,它的思路跟创建计划任务的思路差不多,只不过这个是通过sc创建一个恶意的服务,然后我们通过重启这个恶意的服务来运行我们的exe文件。
利用手法如下:
1 |
|
前面连接ipc的就不演示了,这里直接演示通过sc创建一个服务。
1 |
|
删除创建的服务:
1 |
|
同时我们还可以通过创建一个服务,来讲防火墙给关闭掉:
1 |
|
利用PsExec进行横向渗透
什么是psexec:
psexec是windows下的一个远程命令工具(远程运行进程),是windows提供的工具,加在白名单中(不会被杀毒软件查杀),不需要对方开启3389端口,需要目标开启admin$共享,一般情况下是开启的,如果对方开启防火墙的话一般是用不了的(445端口被防火墙给拦了)。
psexec的原理:
跟上面的sc横向思路差不多,首先和目标主机建立ipc连接,然后向目标主机释放psexecsvc.exe文件,通过sc再目标主机上创建psexec服务并启动,然后再客户端这边执行命令,服务端通过相应的服务回显执行的命令结果,最后再删除相应的服务。
psexec的使用前提:
1 |
|
关于PSexec的下载地址如下:
https://download.sysinternals.com/files/PSTools.zip
1 |
|
除了这个exec msf中也有很多可以利用的模块,这里就不演示了。
利用WMI进行横向
WMI全称:Windows Management Instrumentation 是windows的一个管理工具,自windows98以来,都支持此工具,通过135端口(RPC->远程过程调用协议),简单来说就是我们发送一个指令到目标服务器上,然后目标服务器进行一个执行,wmi比起psexec更加的隐蔽,不会记录日志信息,同时也不会将攻击脚本添加到磁盘中。wmic默认使用135端口,wmicexec使用445端口。
这里我的理解是:
建立ipc相当于是走正门,需要进行登记,然后再去找相关人员办理业务,而wmi是直接通过rpc(客服人员),向后面进行一个通知,然后进行办理业务,不需要进行登记,相当于是走的后门。
远程桌面连接:
1 |
|
表示打开成功。
查看远程进程信息:
1 |
|
远程创建进程:
1 |
|
这个是没回显的,一般需要利用ipc连接,然后type看一下。
下面是几个工具:
Impacket中的wmiexec.py
1 |
|
使用powershell执行命令
1 |
|
都是再powershell环境下运行。
使用DCOM进行横向
COM是微软为了使不同程序之间能够进行调用,从而规定的一个二进制调用标准,通过实例化一个COM组件,找到对应的接口,然后再次调用接口里面的功能函数,从而达到不同功能的实现,而DCOM(分布式组件调用),能够调用外部网络的COM组件,通过RPC进行通信。
使用DCOM进行横向的前提条件:
1 |
|
获取本地DCOM程序列表:
1 |
|
其他能进行命令执行的DCOM:
1.MMC20.Application
2.ShellWindows
3.Excel.Application
4.ShellBrowserWindow
5.Visio.Application
6.Outlook.Application
具体的使用参考:https://www.freebuf.com/articles/network/261454.html
PTH横向
通常是在只抓取到了密文的情况下的利用。
在内网环境中,多台计算机进行安装时,通常使用脚本进行统一安装,导致不同机器的本地管理员的账户密码都一致,这样就造成了一个风险,当我们拿到一台机器时,通过抓取密码,可以尝试进行密码的复用。
下面是在mimikatz Wmiexec crackmapexec下的利用:
Mimikatz
1 |
|
利用mimikatz将其加到lsass内存中
1 |
|
Wmiexec
1 |
|
前面的32个0代表的是空密码的LM Hash的值。
crackmapexec
利用这个对C段主机进行批量的PTH攻击。
1 |
|
票据传递攻击(PTT)
主要利用的还是ms14-068 在了解这个之前我们还需要重点去理解kerberos协议 这个在域中具有重要的作用,不仅仅是后面的黄金票据,白银票据,还有一些委派攻击也需要理解kerberos协议。
这里就不讲解kerberos协议了,先讲讲它的用法,后面会再分析一下。
MS14-068主要还是伪造的PAC,当AS_REQ发送完由Client hash加密的时间戳时,KDC会进行一个检查,如果检查结果合格,就向Client发送一个TGT,TGT里面包含着PAC,PAC不是kerberos自带的,而是微软后续加上的,主要是检查Client是否有相应的权限访问服务。在第一个AS_REQ阶段,攻击者可以对PAC进行一个伪造,然后发送到KDC中,KDC没有对内容进行验证,直接使用kertgt的hash对它进行签名,然后封装在TGT中,从而能进行一个未授权的访问任意服务。
至于为什么KDC不会覆盖掉用户的PAC,那是因为微软再设计的时候的一个缺陷。
1 |
|
此时会生成一个ccache文件。
先清空票据,然后导入里面。
1 |
|
注入票据之后,我们可以通过psexec或者wmi来获取权限,或者是直接通过sc创建一个服务,然后上传一个恶意的exe文件,然后运行服务即可。
注意这里的话\\
后面只有跟主机名才能生效。
Net-NTLM-Relay攻击
ntlm中间人攻击,当用户的密码不好爆破时,可以试试这个中间人攻击。
1.利用LLMNR&NetBIOS
这个主要是利用了windows系统名称的解析顺序:
1 |
|
当我们输入一个1和2都解析不到的域名时,这时它会进行一个广播,广泛的进行询问,你是不是我要访问的域名,攻击者可以伪造成客户端要请求的域名,欺骗客户端,骗出它的net-NTLM哈希的值。
利用的经典工具:Responder
1 |
|
2.利用WPAD
WPAD是一种网络代理自动发现协议,攻击者可以伪造成代理服务器,让客服端通过WPAD下载PAC文件(代理配置文件),这时攻击者会要求客户端进行一个验证,然后攻击者就会收到Net-NTLM哈希。