前言
靶机:hacksudo-2
攻击:kali
都是采用虚拟机,网卡为桥接模式
主机发现
使用arp-scan -l
或者netdiscover -r 192.168.1.1/24
或者nmap
和masscan
等可以扫描网段的扫描工具,不过建议使用前两个即可,因为靶机与攻击机都是在局域网内的
信息收集
使用nmap扫描端口
对全端口再进行扫描一下
rpc、nfs收集
发现有rpc
,使用nmap
脚本进一步收集
nmap --script=rpcinfo 192.168.1.51
再次对nfs
进行收集
nmap --script=nfs-* 192.168.1.51
甚至从这里已经看到flag1.txt
了,不过这里只做信息收集
网站收集
对80端口网站进行收集,访问默认界面,看到一个用户名vishal
查看页面源代码,发现一段话,下面翻译,然后可以发现是目录型网站
翻译上面的话
对网站进行目录扫描
使用gobuster、dirsearch、dirb、dirbuster、ffuf
等工具进行扫描
访问README.md
查看
访问readme.md
查看
访问audio
目录,一堆可能音频文件,可能存在音频隐写
访问呢file.php
并查看页面源代码,这个只是有一个超链接
访问game.html
,查看页面源代码,发现是从google
请求
访问info.php
,发现是phpinfo
访问test.html
,发现大部分代码由js
组成,不过收集到一些字符信息
访问test123.html
,发现内容,查看源代码详细查看
访问tiles
,发现图片
访问web
目录,看到信息
漏洞寻找
反弹shell
根据之前的nfs
寻找,尝试进行挂载
mkdir /tmp/nf
mount -t nfs 192.168.1.51:/mnt/nfs/ /tmp/nf //挂载目标共享目录到kali本地
但是查看后,提示说当前系统是root
测试之前的几个php
文件,测试有无参数接收,然后可以导致路径遍历的,这里先测试file.php
ffuf -c -w /usr/share/wordlists/dirb/big.txt -u http://192.168.1.51/file.php?FUZZ=../../../../../../etc/passwd -fs 238
//这里的-fs 238 是对返回数据大小进行过滤,238是指原界面的大小
在浏览器测试
但是经过测试,这里只能文件包含,且是本地文件包含,限制太多,很多东西看不了,或者使用一个好的字典去遍历,不过这里确定一个用户的存在hacksudo
不过突然想到,可以挂载的话,在其中上传一个php
脚本,然后再通过这个文件包含,能否进行反弹呢
编辑/usr/share/webshells/php/php-reverse-shell.php
脚本,修改地址为kali
的地址
把该文件复制到之前挂载的地址/tmp/nf
中,因为具有同步性,所有靶机上也会有这个脚本。
使用kali
开启监听,然后浏览器访问,确实可以
然后使用python
获得一个交互式界面
python3 -c 'import pty;pty.spawn("/bin/bash")'
提权
因为开启nfs
服务,所有查看其主要的文件,查看
这里这个目录是有读写权限
no_root_squash
: 客户端以 root 用户访问时,不映射为匿名用户。
也就是说,因为这里是挂载的,然后当在kali
中对挂载的目录进行操作时,是可以进行一系列操作的。
避免两个机器的冲突,把kali
中的bash
脚本复制到挂载点,并改名称,然后在靶机上运行这个脚本
不过版本问题,无法运行,查看版本
这里需要安装对应版本的bash
才行,但是这里kali
中安装了高版本的bash
,在进行编译安装时,总是不成功,可能需要一个新的虚拟机,我这里就不做演示了
或者编写c
文件进行提取,不过也需要对应的库等,应为新的gcc
编译与旧版本可能不兼容
#include<stdlib.h>
#include<unistd.h>
int main()
{
setuid(0);
system("id");
system("/bin/bash");
}
说白了,这里的几个方法,都需要历史版本。。。。。
不过使用find
寻找时,找到一个具有SUID权限的文件,可能存在漏洞
百度搜索,发现cve-2021-4034
存在,并且系统对应的版本在影响范围
从项目地址下载poc
,地址https://github.com/arthepsy/CVE-2021-4034
把编译好的exp
复制到之前的挂载目录
执行后还是哈哈哈哈哈。不行,因为编译环境的问题
所以这里不再继续,太麻烦了,知道方法即可
总结
- 对于网站的
php
文件,可能会有参数接收的,所以要进行fuzz
测试 - 对于
rpcbind
和nfs
一般都是一起出现,可以使用rpcinfo
以及一些命令来检测是否开启共享,showmount
- 对于
nfs
是配置文件/etc/exports
中的配置简单了解,这里就是利用可写以及root
执行 - 提权时候文件的版本问题