ssh私钥泄露靶场
ssh私钥泄露靶场
靶场镜像:链接: https://pan.baidu.com/s/1xfKILyIzELi_ZgUw4aXT7w 提取码: 59g0
直接导入虚拟机
这里我们不知道账号密码 也没办法查看ip 所以通过另一台kali虚拟机中的工具探测同网段的ip
ip addr查看ip
1 | netdiscover -r 192.168.198.0 |
知道靶场的ip之后进行nmap扫描查看开放的端口
1 | nmap -sV 192.168.198.135 |
可以看到在这个把厂商开放的端口和对应服务
这里开启了ssh服务和两个http服务
分析特殊端口
一个80端口一个31337端口
直接访问无事发生
所以知道端口之后我们用drrb暴力破解目录(dirb比较快)
可以看到有两个敏感文件 我们先尝试访问robots.txt爬虫文件
robots.txt
(位于站点根目录,如 https://example.com/robots.txt
)是网站给搜索引擎爬虫(robots / crawlers)的一份礼貌性指令文件,告诉爬虫哪些路径可以抓取、哪些路径请跳过。
前面两个都是一些配置文件 所以我们把重点放在taxes
私钥泄露
访问ssh目录
这个是rsa的私钥和公钥信息
id_rsa
私钥:
任何持有这个文件的人都能(在配套公钥已被放到目标 authorized_keys
时)作为该用户登录目标主机。
id_rsa.pub
对应的公钥:
可以公开分发的,用来放到远程主机的 ~/.ssh/authorized_keys
中以允许对应私钥免密登录。
authorized_keys
存在于远程账号的 ~/.ssh/authorized_keys
,文件内每一行是一把允许登录该账号的公钥(可以有选项限制该 key 的权限
所以我们先选择查看一下公钥
访问http://192.168.198.135:31337/.ssh/id_rsa.pub
下载
拿到用户名
然后我们下载私钥看一下
发现这是被加密保护的私钥
Proc-Type: 4,ENCRYPTED表示它需要口令才能解密使用
回到kali
记得登陆前看一下是否可以读写
可以的
下一步我们尝试登录
1 | ssh -i id_rsa用户名@主机名 |
ssh
:安全远程登录命令。
-i id_rsa
:指定要使用的私钥文件(默认是 ~/.ssh/id_rsa
,这里强制用当前目录下的 id_rsa
)。
用户名
:你要登录远程主机的账号 这里就是我们刚刚拿到的用户名。
@主机名
:远程主机的地址
1 | ssh -i id_rsa simon@192.168.198.135 |
这里下一步是修改权限为600
可以看到原来的权限是这样的
1 | -rw-r--r-- (= 644) |
拥有者:可读写
群组:可读
其他用户:可读
我们要修改为600
1 | -rw------- (= 600) |
拥有者:可读写
群组:无权限
其他用户:无权限
为什么 SSH 要求 600?
OpenSSH 在加载私钥时会检查文件的权限,如果不是“只有文件拥有者能读写”,就会拒绝使用,报错类似:
1 |
|
修改私钥权限
1 | chmod 600 id_rsa |
密钥信息破解
这里我们对私钥信息进行破解,首先使用ssh2john将id_isa密钥信息转换成john可识别的信息 ssh2john id_isa > isacrack
然后利用字典进行逐步解密,这时候用zcat 来将字典读取通过管道符 传入john 来解密
具体实现步骤
1 | ssh2john id_rsa > isacrack |
使用 ssh2john 工具将私钥文件转换为 john 可识别的格式
这个命令会读取id_isa
私钥文件,将其转换为适合 john 破解的哈希格式,并保存到isacrack
文件中。
1 | zcat /usr/share/wordlists/rockyou.txt.gz | john --pipe isacrack |
使用 zcat 读取压缩的字典文件,并通过管道传递给 john 进行破解
破解结果如图
成功得到密码为starwars
然后我们回到靶场进行登录
成功登录
大概尝试一些命令寻找有用文件
可以看到root目录下有flag.txt
查看一下
果然 没权限不让我们读
根据这个我们可以看出来
flag.txt属主和属组都是
root,且权限为 -rw-------
,只有 root
用户能读。当前用户是 simon
然后这有个c语言源文件 看一下试试
这里有flag2
gets函数的缓冲区溢出漏洞
代码中定义了char name[10];
的缓冲区,却使用gets(name);
读取输入 ——gets函数不会检查输入长度,当输入超过 10 个字符时,会导致缓冲区溢出,覆盖栈内存中的其他数据。
程序逻辑中存在对name的判断(比较前 5 个字符是否为 “Simon”),若满足条件会执行/usr/local/sbin/message程序。
执行一下看看
下一步试着更多输入使其移除
(缓冲区溢出漏洞 + SUID 权限滥用)
前二十位是我们填充的 超出的部分就是root权限的目录路径
原理:
缓冲区溢出覆盖了程序执行流程中关键的内存数据
我们输入的目录路径是可执行的 shell 路径,结合溢出覆盖的逻辑,可能发生了两种情况
1.覆盖返回地址到system
函数
2.覆盖程序内的判断逻辑
得到三个flag 完成