其实,不知道大家有没有想过,我们之前练习的都是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的页面
而对于这个版本,是存在文件上传的!!!
甚至只用做两步
- 将POST格式改成PUT格式 ,并且添加一个 /wanli.jsp/的目录
- 然后将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漏洞。
但是,在操作的过程中,就发现了一下问题
- git命令使用不了(虽然可以上传脚本)
- make命令用不了(这基本上就说明了这个漏洞是不存在的)
- 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 : ***ment : home directory : shell
用户名 : 密码 : 用户表示符 : 组标识符 : 注释性描述 :主目录 : 登陆的shell
然后就是下一个命令了
cat /etc/shadow //影子文件
用户名:加密密码:最后一次修改时间:最小修改时间间隔:密码有效期:密码需要变更前的警告天数:密码过期后的宽限时间:账号失效时间:保留字段
那么了解完以上的知识之后,我们就可以开始操作了
我们可以先写入以下两条命令,顺便来解释一下
- 第一行命令就是追加一个wanli账号,并且具有root的权利
- 第二行就是创建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 A***ess 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 !!!