红队笔记7--Web机器为Linuxdocker逃逸

2024-03-13 11:12

本文主要是介绍红队笔记7--Web机器为Linuxdocker逃逸,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

其实,不知道大家有没有想过,我们之前练习的都是web机器是windows的版本,但是其实,在现实生活中,服务器一般都是Linux的版本,根本不可能用到windows的版本

                

那么如果是Linux的话,我们就有很多的困难,比如说Linux的木马,cs没有插件能上线Linux? 

IPC横向移动?? 有一些代理工具不支持Linux ??? 这时候困难就出现了,但是没事!!

道高一尺魔高一丈!!!!我们一起来看看怎么打!!!


声明:本次的靶场来自于红日的vulstack靶场,课件内容来自于万里老师!!!


目录

1.拿下Linux服务器

1.Struts2-045

2.Tomcat 8.5.19 _CVE-2017-12615

3.CVE-2018-12613

4.Docker逃逸

1.Dirty Cow逃逸

2.特权模式逃逸

3.通过写入技术写入特权账号

5.通过木马上线Ubuntu

2.拿下内网的Win7

1.内网信息收集

2.用EW搭建隧道

3.拿下DC域控

MS14-068

总结


以下是本次实验拓扑!!! 

1.拿下Linux服务器

首先,它的Linux服务器开了三个docker服务,wanli老师分别用御剑扫出来了三个端口

2001 struts2  2002tomcat   2003phpmyadmin 

1.Struts2-045

首先它是访问了2001端口

通过f12在代码种找到了 Sruts2的框架

然后就是用struts2的漏扫工具去扫了,然后就能发现是存在对应的漏洞

而且whoami的返回值是一个root!!!说明很有可能是一个Linux的服务器,但是不管怎么样,rce文件上传都是可以了的,这样就已经算是把第一个靶机拿下了~~

2.Tomcat 8.5.19 _CVE-2017-12615

然后他就是能访问到了tomcat的页面

而对于这个版本,是存在文件上传的!!! 

甚至只用做两步

  1. 将POST格式改成PUT格式 ,并且添加一个  /wanli.jsp/的目录
  2. 然后将jsp木马内容粘贴到post包内

这个应该是一个解析漏洞吧,之前没见过,不管咋地,反正就是getshell了

3.CVE-2018-12613

这个就有点逆天了,直接访问,可以免密码登录(现实生活中怎么可能)

然后这个靶场,是存在文件包含的漏洞的,通过构造poc,可以看见它的用户信息

于是就可以写shell进去了!!!

至此,三个靶场都被拿下了

4.Docker逃逸

上面也说到了,他是一个Linux的服务器,那么既然能够RCE那么我们就可以尝试一下信息收集

正常来说,ifconfig是可以看见网卡信息的,但是!!

  可能是受限于docker的环境,所以没有ifconfig的命令

 ip addr  //可以换成这个命令

所以我们在看见ifconfig用不了的时候,我们就可以去想一下是不是docker环境

ls -a 

用这个命令看一下能否看见 .docker.env这个隐藏文件,或者

cat /proc/1/cgroup

如果是docker环境,那么就要docker逃逸

1.Dirty Cow逃逸

dirty cow漏洞可以让我们获取只读内存的写的权限,我们首先利用dirty cow漏洞写入一段shellcode到VDSO映射的一段闲置内存中,然后改变函数的执行顺序,使得调用正常的任意函数之前都要执行这段shellcode。这段shellcode初始化的时候会检查是否是被root调用,如果是则继续执行,如果不是,则接着执行clock_gettime函数,接下来它会检测/tmp/.X文件的存在,如果存在,则这时已经是root权限了,然后它会打开一个反向的TCP链接,为Shellcode中填写的ip返回一个Shell。\n\n这种利用方法利用成功的前提是,宿主机的内核有dirty cow漏洞。

但是,在操作的过程中,就发现了一下问题

  1. git命令使用不了(虽然可以上传脚本)
  2. make命令用不了(这基本上就说明了这个漏洞是不存在的)
  3. ping 百度 8.8.8.8也ping不通,(apt install || update肯定是不行的)

所以不管存不存在这个漏洞,肯定是利用不了的

2.特权模式逃逸

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

所以我们可以先用这个命令判断一下

fdisk -l

如果能看见如下的情况,基本上就可以逃逸了

 然后就是要挂载了:原理就是将Linux的根目录挂载到我们自己的目录下,然后我们呢在自己的目录下操作,就等于直接在Linux的bash下操作!!!

mkdir wanli

 创建成功

然后就是挂载了

mount  /dev/sda1   wanli    //将Linux的根目录挂载到wanli目录下

然后就是去查看一下是否挂载成功了

okay 那么我们现在能查看系统文件了,但是我们还想远程上去捏!!

3.通过写入技术写入特权账号

我们的想法就是创建一个特权用户!!在此之前,先来普及一些知识

cat /etc/passwd

 username : password : UserID : GroupID : comment : home directory : shell 
用户名 : 密码 : 用户表示符 : 组标识符 : 注释性描述 :主目录 : 登陆的shell 

然后就是下一个命令了

cat  /etc/shadow   //影子文件

用户名:加密密码:最后一次修改时间:最小修改时间间隔:密码有效期:密码需要变更前的警告天数:密码过期后的宽限时间:账号失效时间:保留字段

那么了解完以上的知识之后,我们就可以开始操作了

我们可以先写入以下两条命令,顺便来解释一下

  1. 第一行命令就是追加一个wanli账号,并且具有root的权利
  2. 第二行就是创建wanli的密码,并且写入 /etc/shadow 文件其中的密码,其他直接照搬root的就好了,对于密码我们可以自己先去创建一个账号,然后再去看影子文件,然后照搬那个密码就好了!!!!

至此,我们就得到了一个root的账户,但是我们会发现这样的一个问题,虽然有这个账号,但是是ssh不上的!!!! 这里可能是禁止了root账户的远程登录

咋办呢???汗流浃背了      

但是还是那句话,道高一尺魔高一丈!!!

我们可以先创建一个普通用户,然后以普通用户的身份ssh连接,然后再 su wanli就好了!!

可以看见成功完成dokcer逃逸,拿下Ubuntu的bash!!!

5.通过木马上线Ubuntu

那既然都能get实体shell了,那我们肯定是要上线cs或者msf啦!!!

但是又遇到问题了,cs上线Linux??? 这又要去某hub上下载插件了呀!!!

那我肯定不想啊!!但是msf能上线Linux!!!

msf也集成了一键生成木马,不过记得它的后缀名字是elf哦!!

生成之后,我们就可以部署一个http服务(同一网段)!!然后让Ubuntu去下载

然后去Ubuntu中的shell去执行下载木马的命令

然后就是去Msfconsole监听就好 

记得该权限,然后运行就好 

至此,我们就拿下了第一台Web_Linux机器了!!!!

2.拿下内网的Win7

虽然这里它最后是失败了,但是还是对我们来说能产生一定的思考和收获的!!!

1.内网信息收集

进到内网,肯定是先进行信息收集,能发现还有一个网卡!!!

那么就可以去扫描,,可以写shell脚本实现域内探测主机,不过麻烦了!!我们直接上传fscan!!一键探测!

其中130 是DC ,128是域内主机(而且都存在ms17-010!!!)

2.用EW搭建隧道

那么就算发现内网存在漏洞,那也没有用捏!!流量出不来!!

所以我们就要搭建隧道了!!!

这里用的EW,我在以前讲过,确实挺强大的,确实挺不错的!!主要是比frp简单

然后这里它用的是正向连接,上传EW到Linux服务器,然后用启用socks5代理,让kali正向连接1080端口,这样就通过Ubuntu的1080端口,我们就打通了一条进入内网的隧道!!!!

其实这里用正向连接还是反向连接主要要看目标出不出网以及防火墙对流量的过滤情况,

还是那句话!!!视情况而定!!!!

  

这样就开启了Ubuntu上的8765端口,等待我们kali去连接

修改以下 /etc/proxychains4.conf 这个文件,让我们以后的流量直接走socks5 Ubuntu代理!!

至此,我们可以利用kali来渗透内网啦!!!!msf直接走起

一套流程下来,竟然是如此熟悉!!!

但是网安的魅力,总在与其多变性,在这里,就算是能扫描出来这个漏洞但是也是攻击不上!!

这是我之前的,也是发现会出现此类情况,即使能检测出漏洞,但是也是攻击不成功

当然了,wanli老师在这里也是使用了其他的解决方法

1. 更换payload,毕竟我们连进去用的也是正向连接,但是永恒之蓝是用的反向连接

set payload  windows/meterpreter/bind_tcp

但是还是打不通!!!

2.更换永恒之蓝的利用版本 

但是非常可惜,就算是尝试了所有的版本的永恒之蓝也是打不进去

 也许这就是红队的魅力吧,不断遇到问题,不断解决问题

这里他就没有展示别的攻击方法了,手动上线了一波

这样,也算是勉勉强强地拿下来域内地一台Windows7了吧!!

3.拿下DC域控

既然我们都拿下了域内的机器了,那就横向移动咯!!!

这里,我们不用IPC ,不用psexec ,不用wmic 这些。来尝试一下漏洞利用

MS14-068

当然了这个漏洞和黄金票据,白银票据那些有些像,都算是一种PTT的攻击,(域内攻击老多了,像什么  PTH  PTT PTC 等等等等,不列举了)但是他不需要去知道krbtgt的hash!!

这个漏洞不需要拿到 Krbtgt 或者 服务账号的ntlm hash ,但是需要DC没有打补丁!!!

以下是它的原理:

该漏洞最本质的地方在于Microsoft Windows Kerberos KDC无法正确检查Kerberos票证请求随附的特权属性证书(PAC)中的有效签名,这里面的签名就是上面提到的服务检验和以及KDC校验和。导致用户可以自己构造一张PAC。 签名原本的设计是要用到HMAC系列的checksum算法,也就是必须要有key的参与,我们没有krbtgt的hash以及服务的hash,就没有办法生成有效的签名,但是问题就出在,实现的时候允许所有的checksum算法都可以,包括MD5。那我们只需要把PAC 进行md5,就生成新的校验和。这也就意味着我们可以随意更改PAC的内容,完了之后再用md5 给他生成一个服务检验和以及KDC校验和。

不知道大家还记不记得以前我讲的白银票据

为了防止白银票据,Microsoft引进了PAC

PAC:Privilege Access Certificate 在TGT里面包含PAC,PAC包含用户的sid,用户所在的组

在白银票据中,有些服务并没有验证PAC这一步,这也是白银票据能成功的前提,但是如果加入了验证服务的这一步呢??? 那么白银票据是不是就失败了!!!而且!只有KDC能制作PAC!!

难道就要束手无策了吗??? 那肯定不是捏    

于是这里就是MS14-068 的魅力了!!!

首先检测有没有打补丁(如果打了基本上就没有机会了)(在域控上检查哦)

systeminfo | find "KB3011780"

 如果没有打补丁的话

那么就可以进行攻击啦!!!

whoami /user    //这个可以查看它的sid值

然后就是用工具伪造一张TGT

伪造完TGT之后就是要将他写入内存里了,首先确保当前是无法访问到DC上的!

首先将本机的票据清除 

mimikatz.exe  kerberos::list  //查看当前票据信息
mimikatz.exe  kerberos::purge

 可以看见是成功清除票据信息的

然后将刚才生成的TGT写入内存中

然后此时,我们就可以看见我们能够访问到域控的C盘了

接下来就是利用Psexec这样的工具拿下它的shell了(这里我还没学)

                  

总结

对于这一次的vulstack靶场环境,还是比较真实的还原了企业内部的环境的(就web机器来说)

其中遇到的问题也是比较贴切生活的,像用的Linux服务器,cs存在对应的限制,msf上线不成功,proxychains的摇曳等等等等,都是现实生活中会遇到的众多的问题,总之还是那句话

学海无涯,学无止境,cease to live ,cease to struggle !!!

   

这篇关于红队笔记7--Web机器为Linuxdocker逃逸的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/804674

相关文章

Tolua使用笔记(上)

目录   1.准备工作 2.运行例子 01.HelloWorld:在C#中,创建和销毁Lua虚拟机 和 简单调用。 02.ScriptsFromFile:在C#中,对一个lua文件的执行调用 03.CallLuaFunction:在C#中,对lua函数的操作 04.AccessingLuaVariables:在C#中,对lua变量的操作 05.LuaCoroutine:在Lua中,

AssetBundle学习笔记

AssetBundle是unity自定义的资源格式,通过调用引擎的资源打包接口对资源进行打包成.assetbundle格式的资源包。本文介绍了AssetBundle的生成,使用,加载,卸载以及Unity资源更新的一个基本步骤。 目录 1.定义: 2.AssetBundle的生成: 1)设置AssetBundle包的属性——通过编辑器界面 补充:分组策略 2)调用引擎接口API

《offer来了》第二章学习笔记

1.集合 Java四种集合:List、Queue、Set和Map 1.1.List:可重复 有序的Collection ArrayList: 基于数组实现,增删慢,查询快,线程不安全 Vector: 基于数组实现,增删慢,查询快,线程安全 LinkedList: 基于双向链实现,增删快,查询慢,线程不安全 1.2.Queue:队列 ArrayBlockingQueue:

人工智能机器学习算法总结神经网络算法(前向及反向传播)

1.定义,意义和优缺点 定义: 神经网络算法是一种模仿人类大脑神经元之间连接方式的机器学习算法。通过多层神经元的组合和激活函数的非线性转换,神经网络能够学习数据的特征和模式,实现对复杂数据的建模和预测。(我们可以借助人类的神经元模型来更好的帮助我们理解该算法的本质,不过这里需要说明的是,虽然名字是神经网络,并且结构等等也是借鉴了神经网络,但其原型以及算法本质上还和生物层面的神经网络运行原理存在

操作系统实训复习笔记(1)

目录 Linux vi/vim编辑器(简单) (1)vi/vim基本用法。 (2)vi/vim基础操作。 进程基础操作(简单) (1)fork()函数。 写文件系统函数(中等) ​编辑 (1)C语言读取文件。 (2)C语言写入文件。 1、write()函数。  读文件系统函数(简单) (1)read()函数。 作者本人的操作系统实训复习笔记 Linux

JavaWeb系列二十: jQuery的DOM操作 下

jQuery的DOM操作 CSS-DOM操作多选框案例页面加载完毕触发方法作业布置jQuery获取选中复选框的值jQuery控制checkbox被选中jQuery控制(全选/全不选/反选)jQuery动态添加删除用户 CSS-DOM操作 获取和设置元素的样式属性: css()获取和设置元素透明度: opacity属性获取和设置元素高度, 宽度: height(), widt

LVGL快速入门笔记

目录 一、基础知识 1. 基础对象(lv_obj) 2. 基础对象的大小(size) 3. 基础对象的位置(position) 3.1 直接设置方式 3.2 参照父对象对齐 3.3 获取位置 4. 基础对象的盒子模型(border-box) 5. 基础对象的样式(styles) 5.1 样式的状态和部分 5.1.1 对象可以处于以下状态States的组合: 5.1.2 对象

DDS信号的发生器(验证篇)——FPGA学习笔记8

前言:第一部分详细讲解DDS核心框图,还请读者深入阅读第一部分,以便理解DDS核心思想 三刷小梅哥视频总结! 小梅哥https://www.corecourse.com/lander 一、DDS简介         DDS(Direct Digital Synthesizer)即数字合成器,是一种新型的频率合成技术,具有低成本、低功耗、高分辨率、频率转换时间短、相位连续性好等优点,对数字信

数据库原理与安全复习笔记(未完待续)

1 概念 产生与发展:人工管理阶段 → \to → 文件系统阶段 → \to → 数据库系统阶段。 数据库系统特点:数据的管理者(DBMS);数据结构化;数据共享性高,冗余度低,易于扩充;数据独立性高。DBMS 对数据的控制功能:数据的安全性保护;数据的完整性检查;并发控制;数据库恢复。 数据库技术研究领域:数据库管理系统软件的研发;数据库设计;数据库理论。数据模型要素 数据结构:描述数据库

AI学习指南机器学习篇-朴素贝叶斯处理连续特征和离散特征

AI学习指南机器学习篇-朴素贝叶斯处理连续特征和离散特征 在机器学习领域,朴素贝叶斯是一种常用的分类算法,它的简单性和高效性使得它在实际应用中得到了广泛的应用。然而,在使用朴素贝叶斯算法进行分类时,我们通常会面临一个重要的问题,就是如何处理连续特征和离散特征。因为朴素贝叶斯算法基于特征的条件独立性假设,所以对于不同类型的特征,我们需要采取不同的处理方式。 在本篇博客中,我们将探讨如何有效地处理