在网站这里我们已经很难再继续shentou了,但是回忆一下之前用nmap扫描靶机的开放端口,除了80端口之外,靶机还开放了22端口,TCP22端口对应的是SSH服务,那么SSH服务这里是否有可以利用的地方呢?
SSH概述
这里先简单介绍一下SSH服务。
目前互联网中的服务器大部分都是安装了Linux系统,而SSH服务可以看作是Linux系统的标配,尤其是对于像CentOS这类主要用于服务器的Linux系统,更是在绝大多数情况下都默认安装并启用了SSH服务。
SSH服务主要用于系统的远程管理和访问。我们在使用和管理一台服务器时,不可能像使用PC机一样一直守候在服务器旁边,大多数情况下都是通过网络远程访问和管理,这就需要借助于SSH服务。
其实在SSH出现之前,远程管理普通都是采用的telnet,但是telnet传输的数据都是明文,而SSH传输的数据则是经过加密后的密文,SSH(Secure Shell)这个名字也正是来源于此,所以当SSH出现之后,很快就取代了telnet。
SSH服务的端口号默认是TCP22,有些管理员为了增强安全性,会修改SSH的端口号,比如改成TCP2200。但是我们之前介绍过nmap具有全端口扫描的功能,所以无论怎样修改端口号,最终用nmap都是可以扫描出来。我们在之后做的一些靶机,可能就会存在这种修改默认端口号的情况。
允许登录系统的用户
通过SSH服务远程管理服务器,首先必然要验证用户身份。SSH服务默认采用的是口令认证,也就是要求客户端要输入正确的用户名和密码。
SSH是采用系统用户来进行口令认证,所有的系统用户信息都存放在/etc/passwd文件中,这个文件中存放的用户信息特别多,但并非所有的用户都允许登录系统,那么允许登录系统的用户是哪些呢?
/etc/passwd中的每一行代表一个用户的信息,每行信息用冒号分隔成多个部分,其中最后一部分代表用户的登录Shell。
- 如果登录Shell是/bin/bash、/bin/sh、/bin/zsh这类,就表示这个用户是允许登录的。
- 如果登录Shell是/sbin/nologin、/bin/false,就表示这个用户不允许登录。
可以发现,文件中的绝大部分用户都是不允许登录系统的,这些不允许登录的用户主要是用于支持某些服务的运行,这个后面会再继续介绍。
另外我们还可以去查看/home目录,允许登录系统的用户通常都会在/home下创建一个同名的家目录,因而这也是一种快速判断系统中存在哪些可以登录用户的简便方式。
[root@Web ~]# ls /home
hacker
ssh命令的使用
我们之前在介绍如何搭建实验环境时,曾介绍过使用Xshell来远程登录Linux虚拟机,Xshell还有SecureCRT、Putty等都属于是Windows系统下的SSH客户端工具。但在进行shentou测试时,我们更多的是使用Linux下的SSH客户端工具——ssh命令。
ssh的命令格式:
ssh [用户名@]SSH服务器IP地址
例如下面的命令是以root用户的身份远程登录SSH服务器。需要注意的是,当客户端首次登录某台服务器时,服务器会将自己的公钥发送给客户端,此时在客户端会出现是否保存服务器公钥的提示。当用户将服务器公钥保存在客户端本地之后,再次登录服务器时就不会出现提示了。
[root@Client ~]# ssh root@192.168.80.10
#首次登录需要保存服务器的公钥
The authenticity of host '192.168.80.10 (192.168.80.10)' can't be established.
RSA key fingerprint is 6c:45:e2:f1:83:43:10:91:fe:4f:32:cc:f3:4a:ff:02.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '192.168.80.10' (RSA) to the list of known hosts.
#输入root用户密码
root@192.168.80.10's password:
#成功登录系统
Last login: Tue Dec 26 07:21:19 2017 from 192.168.80.1
[root@Server ~]#
#退出登录
[root@Server ~]# exit
logout
Connection to 192.168.80.10 closed.
也可以通过ssh命令的“-l”选项(l是login的缩写)来指定登录的用户名。
[root@Client ~]# ssh -l student 192.168.80.10
student@192.168.80.10's password:
如果SSH服务器修改了默认的TCP22端口,在客户端可以通过ssh命令的“-p”选项(p是port的缩写)指定端口号。
[root@Client ~]# ssh -p 2200 root@192.168.80.10
通过SSH登录靶机
在掌握了SSH服务的一些基础知识之后,我们继续对靶机进行操作。
我们之前通过越权访问漏洞获取的虽然是网站的用户信息,但是在系统中是否也有可能存在相同的系统用户账号呢?如果有相同账号的话,那密码是否也有可能会是一样的呢?
很多用户喜欢在不同的网站或不同的应用中,都使用同一个账号和密码。这样如果黑客在某处获取了这个用户的账号密码,那么就可以在各处都能成功登录了。所以当黑客获取了某个账号密码之后,通常会到处尝试登录,像这种gongji方式就称为“撞库”。
我们下面就尝试能否用网站的用户账号来登录SSH,在这些用户信息中,我们最关心的就是alice,所以直接用她的身份来登录SSH,果然成功登录了。这证明系统中确实存在撞库漏洞,也就是同一个用户在不同的应用中使用了相同的密码。
# ssh alice@192.168.80.128
The authenticity of host '192.168.80.128 (192.168.80.128)' can't be established.
ED25519 key fingerprint is SHA256:xQf3lfh03E3NNnt5rN/N5zVlGxJJo8QcKykWWCSg1SM.
This key is not known by any other names
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added '192.168.80.128' (ED25519) to the list of known hosts.
alice@192.168.80.128's password:
Last login: Fri Dec 13 14:48:25 2019
alice@gfriEND:~$
登录后,默认位于alice的家目录中,查看隐藏文件,发现有个.my_secret目录,在目录中就找到了第一个flag以及Alice的日记:
alice@gfriEND:~$ ls -a
. .. .bash_history .bash_logout .bashrc .cache .my_secret .profile
alice@gfriEND:~$ cd .my_secret/
alice@gfriEND:~/.my_secret$ ls
flag1.txt my_notes.txt
alice@gfriEND:~/.my_secret$ cat flag1.txt
Greattttt my brother! You saw the Alice's note! Now you save the record information to give to bob! I know if it's given to him then Bob will be hurt but this is better than Bob cheated!
Now your last job is get access to the root and read the flag ^_^
Flag 1 : gfriEND{2f5f21b2af1b8c3e227bcf35544f8f09}
alice@gfriEND:~/.my_secret$ cat my_notes.txt
Woahhh! I like this company, I hope that here i get a better partner than bob ^_^, hopefully Bob doesn't know my notes
在flag1中同时给出提示:
Now your last job is get access to the root and read the flag
这是提示我们第2个flag存放在root家目录中,而要读取/root目录中的文件,要求必须具备root权限,所以要想拿到第2个flag,首先必须要提权。