CTF—攻防练习之ssh私钥泄露

攻防练习1 ssh私钥泄露


靶场镜像:链接: https://pan.baidu.com/s/1xfKILyIzELi_ZgUw4aXT7w 提取码: 59g0

首先安装打开靶场机

 

没办法登录,也没法获取ip地址,怎么办呢?

打开kali

进入控制台
使用netdiscover命令 netdiscover -r ip/子网掩码 命令来探测靶机


netdiscover -r 192.168.32.152/24

 

 

 扫描开放的端口

 我们可以看到靶场开放的端口和对应的服务,此靶场机器上开启了ssh服务和两个http服务

接下来我们分析特殊端口,尤其对开放http服务的大端口(本靶机上31337端口开放了http服务)

 

怎么探测http端口信息?我们可以使用浏览器来浏览http服务的信息

 

探到5个隐藏文件

 


访问sshrobots的目录

 


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

 

posted @ 2019-06-05 15:04  Wings_shadow  阅读(3530)  评论(0编辑  收藏  举报