攻防练习1 ssh私钥泄露数组
靶场镜像:连接: https://pan.baidu.com/s/1xfKILyIzELi_ZgUw4aXT7w 提取码: 59g0浏览器
首先安装打开靶场机缓存
没办法登陆,也无法获取ip地址,怎么办呢?ssh
打开kalithis
进入控制台
使用netdiscover命令 netdiscover -r ip/子网掩码 命令来探测靶机spa
netdiscover -r 192.168.32.152/243d
扫描开放的端口orm
咱们能够看到靶场开放的端口和对应的服务,此靶场机器上开启了ssh服务和两个http服务,blog
接下来咱们分析特殊端口,尤为对开放http服务的大端口(本靶机上31337端口开放了http服务)ip
怎么探测http端口信息?咱们能够使用浏览器来浏览http服务的信息
探到5个隐藏文件
访问ssh和robots的目录
在taxes下发现flag1
再看ssh目录:
发现rsa的私钥和公钥信息
id_rsa是私钥和authorized_keys 是 认证关键字
咱们发如今存在一个放私钥要key的目录可用下载
下载下来(公钥不用下载)
这里就是泄露的私钥
那么咱们就去尝试与靶机创建ssh链接
对id_rsa 赋予权限 chmod 600 id_rsa
在key文件中咱们能找到主机名
创建ssh链接:
ssh -i id_rsa simon@192.168.32.154
须要密码,那么咱们可用经过破解私钥获得密码
ssh2john id_rsa >rsacrack
破解出来密码为starwars
链接成功!
进来看一看,有一个flag文件但,须要权限,咱们也没有root权限
那么咱们先查一下具备root权限的文件:
find / -perm -4000 2>/dev/null
好多东西。。
Root下也有给read_message文件打开看看
发现flag2一枚
int main(int argc, char *argv[]) {
char program[] = "/usr/local/sbin/message";
char buf[20];
char authorized[] = "Simon";
printf("What is your name?\n");
gets(buf);
// Only compare first five chars to save precious cycles:
if (!strncmp(authorized, buf, 5)) {
printf("Hello %s! Here is your message:\n\n", buf);
// This is safe as the user can't mess with the binary location:
execve(program, NULL, NULL);
} else {
printf("Sorry %s, you're not %s! The Internet Police have been informed of this violation.\n", buf, authorized);
exit(EXIT_FAILURE);
}
}
审计这段代码 发现
咱们要执行readmessage
而后验证数组前5个字符,限定字符数为最多20个 ,前5个为Simon便可。
先打开
咱们试着输20多个字符使其溢出
输入超过他缓存字符长度的字符 超出的部分为root权限的目录路径
得到root权限,发现flag