SSH协议简介:
- SSH为Secure Shell的缩写,是建立在应用层基础上的安全协议;SSH是目前较为可靠,专为远程登录会话和其他网络服务提供安全性的协议,利用SSH协议可以有效的防止远程管理过程中的信息泄露问题。
- SSH客户端适用于多种平台,几乎所有的UNIX平台都可以运行SSH。基于TCP的22端口。
SSH协议的认证机制:
- ssh服务以非对称加密的方式实现身份验证
- ssh协议的认证机制分为两种形式:基于密码的安全验证 基于秘钥的安全验证
基于密码的安全验证:
- 客户端发送登录请求
- 服务端接受请求并且将公钥发给客户端
- 客户端输入密码并且使用公钥加密
- 服务端接收到加密的密码并使用私钥进行解密
- 只要知道对应的账号和密码,就可以登录到远程主机。所有传输的数据都会被加密,但是不能保证你正在连接的服务器就是你想要连接服务器。可能会有其他服务器冒充真正的服务器,也就是说基于密码的安全验证不能防御中间人攻击。
- 攻击方式:暴力破解
基于秘钥的安全验证:
- 开始认证之前客户端需要将客户端公钥放在服务器上面并命名为authorized_keys
- 客户端发送登录请求,其中包含IP地址和用户名
- 服务器接受请求,查看本地是否存储了客户端的公钥,并且随机生成一个字符串
- 服务端将随机生成的字符串使用客户端公钥进行加密并且发送给客户端
- 客户端收到服务端发送的加密字符串后使用客户端私钥进行解密并且重新发送给服务端
- 服务端收到解密后的字符串以后和原字符串进行对比如果相同即允许免密码登录
- 客户端生成一对公钥和私钥,并将自己的公钥储存在服务器上。客户端请求登录的时候,服务器会随机生成一个字符串并用客户端的公钥进行加密,客户端收到之后用自己的私钥解密后,再发回来。服务器收到后进行比对,如果比对成功,就证明用户是可信的,直接允许登录,不再要求密码。从而避免了“中间人”攻击。
- 攻击方式:通过信息收集,获取到泄露的用户名和对应的秘钥
chmod 600 id_rsa
ssh -i id_rsa 用户名@IP地址(如果需要密码,可以通过ssh2john和john获取用户登录密码)
渗透攻击的一般流程
- 信息收集
-
针对给定IP地址的靶机首先要做的就是信息收集,对靶机开放的端口以及运行的服务进行探测。
利用nmap探测目标主机相关信息: nmap -sV IP地址 //探测开放服务和对应版本 nmap -A -v IP地址 //探测目标主机的详细信息 nmap -O IP地址 //探测操作系统类型和版本
-
对端口扫描结果进行探测
对于SSH服务的22端口需要考虑: 暴力破解 私钥泄露(私钥有没有对应的密码,是否可以找到私钥的用户名) 对于开放的HTTP服务的80端口或者其他端口: 通过浏览器访问对应的靶场HTTP服务 通过工具对web网站的目录进行探测 特别注意:一些特殊端口(大于1024的端口) 操作系统中的每一个服务对应了计算机的每一个端口,用来进行通信。 常见端口0~1023 端口探测时,尤其要针对开放大端口的HTTP服务进行排查 针对于web网站而言: 目录扫描:dirb http://IP地址:端口 争取将扫描出来目录和文件每个都查看访问 注意robots.txt、ssh私钥信息(id_rsa)以及网站的配置文件等 注意网站页面的信息收集,可能会出现邮箱地址以及系统登录用户名等信息 深度挖掘网站的敏感信息 nikto -host IP地址
- 利用敏感、弱点信息
-
对挖掘到的ssh私钥进行利用
修改id_rsa的权限 chmod 600 id_rsa(注意:权限一定不能出错!!!) 利用私钥登录远程服务器 ssh -i id_rsa 用户名@靶场IP地址
- 扩大战果
-
登录服务器以后需要确认当前用户身份以及权限
查看当前用户 whoami 查看当前用户权限 id 查看用户家目录或者系统根目录寻找flag文件 如果当前用户是root用户的权限,即表明该靶场已经被拿下,否则就需要提权 一般情况下,flag只属于root用户对应的用户和组 查看所有用户的列表 cat /etc/passwd 查看用户组 cat /etc/group 查看属于某个用户的文件/查看用有某个用户权限的文件find / -user username 查看缓冲文件目录 /tmp
- 深入挖掘
- /etc/crontab
设定系统定期执行的任务,编辑该文件需要root权限,不同的用户可以有不同的定时任务。通过查看/etc/crontab查看其他用户是否有定时任务,并查看对应的任务内容。执行的任务肯定是对应了当前靶场机器中的某个文件。
如果在/etc/crontab下有某个用户的定时计划文件,但是具体目录下没有这个定时执行的文件,可以自行创建反弹shell,然后利用netcat执行监听获取对应用户的权限。 如果有定时执行的文件,可以切换到对应的目录,查看对应的权限,查看当前用户是否具有读写权限,将计划任务执行的文件改写成反弹shell的文件
- ssh服务暴力破解
-
爆破工具:hydra medusa msfconsole
-
字典生成工具:cupp 也可以使用windows桌面版的字典生成器
-
利用msfconsole可以远程连接服务器的ssh服务,同时可以对ssh服务进行暴力破解
使用的模块:auxiliary/scanner/ssh/ssh_login 远程连接时,设置好靶机IP地址、用户名、密码;暴力破解是需要设置密码字典。 连接成功,获取到远程主机的shell时,需要使用python优化shel python -c “import pty; pty.spawn(‘/bin/bash’)”
- 尝试切换到root用户
-
su root/su - root
两者之间的区别: su只能获得root的执行权限,不能获得环境变量,而su - 是切换到root并获得root的环境变量及执行权限.
- 总结
在对SSH服务渗透中,大部分情况是利用获取的私钥文件,直接使用用户名和私钥文件登录靶场机器,个别情况进行暴力破解获取用户密码,通过用户名和对应用户登录靶场机器。
另外CTF中要特别注意/tmp(数据缓冲目录)以及/etc/crontab(设定计划任务的文件)