Background
SSH 为 Secure Shell 的缩写,由 IETF 的网络小组(Network Working Group)所制定;SSH 为建立在应用层基础上的安全协议。SSH 是目前较可靠,专为远程登录会话和其他网络服务提供安全性的协议。利用 SSH 协议可以有效防止远程管理过程中的信息泄露问题。
靶场环境
靶机convfefe :192.168.0.109
攻击机Kali : 192.168.0.104
信息探测
先进行ip的探测
1 | root@kali:~# netdiscover -r 192.168.0.0/24 |
服务探测
知道了IP,探测一下靶机目标开放了那些服务
1 | root@kali:~# nmap -sV 192.168.0.109 |
发现开放了2个http服务和一个ssh服务;
http服务可以通过网页的形式访问
访问页面,没有发现可用信息;
有时候可以通过网页源代码发现一点可用的信息,但是这里没有发现可用信息
http隐藏文件探测
网页源代码没有发现可用的信息,这里我们可用使用工具探测一下该服务隐藏文件
1 | root@kali:~# dirb http://192.168.0.109:31337/ |
发现了一些敏感文件(robots.txt,.ssh)
右键打开链接
robots协议不允许访问这些文件目录
那我们就尝试访问一下
发现了第一个flag:
flag1{make_america_great_again}
同样我们可以打开.ssh文件
发现了ssh的公钥、私钥 (SSH下autho…)
将其文件下载至本地(如访问.ssh/id_rsa的形式进行下载)
id_rsa是私钥,authorized_keys是认证关键字(包含公钥),公钥可不用下载
下载下来后,我们需要修改私钥的权限,不然无法连接靶机
ssh-key 登录 要求私钥文件 属性必须是400 600 不能他人访问权限
1 | root@kali:~/test# chmod 600 id_rsa |
ssh连接还需要用户名,这里可以查看authorized_keys文件
ssh连接
1 | root@kali:~/test# ssh -i id_rsa simon@192.168.0.109 // -i 私钥文件 |
发现还需要一个密码
解密ssh密钥信息
用ssh2john 将id_isa密钥信息转换为john可以识别的信息
因为我的kali上没有找到该工具,所以在john官方工具里找到它的脚本
1 | root@kali:~/test# ../tools/ssh2john.py id_rsa > rsacrack |
利用字典破解
1 | root@kali:~/test# zcat /usr/share/wordlists/rockyou.txt.gz | john --pipe --rules rsacrack |
破解出来密码是starwars
再次连接
打开root根目录,发现一个flag文件,和一个c语言程序
1 | simon@covfefe:/root$ ls |
查看flag文件,不过没有权限
1 | simon@covfefe:/root$ cat flag.txt |
这里可以用find命令查找具有权限的文件
1 | simon@covfefe:/root$ find / -perm -4000 2>/dev/null // -perm -4000 具有权限 2>/dev/null 避免错误 |
查看c语言的代码
1 |
|
很幸运,在代码的注释中发现了flag2:
flag2{use_the_source_luke}
缓冲区溢出
对代码进行审计;
程序通过用户输入的值的前5位进行判断
如果匹配结果为Simon,则通过函数execve执行program数组中的内容
因为我们输入的值是保存在一个20字节的数组中,可以考虑溢出提权
这里我们获得了root权限,可以查看flag文件
第三个flag:
flag3{das_bof_meister}