前言

这个比较好玩,玩一下。

实验环境

ssh-私钥泄露靶机
kali攻击机
安装靶机
j4y
然后设置虚拟机的联网方式,因为是自己的靶机,不知道IP地址,所以前期工作需要安排一下。kali的网络连接方式要设置成和ssh-私钥泄露的一样。
因为我前段时间不知道怎么设置,所以探测不到靶机IP,导致没办法做这个实验。今天又看到它了,决定玩一下。下面给出两种设置方法,可以都尝试一下并选择适合自己配置的方法。

重要设置

一、两台虚拟机都设置成桥接,如图所示
j4y
两个都设置成这样。就可以等下一步去测试IP地址了。
不过我使用这个办法行不通,而且看了几个博客,都是这么设置的。我死活都探测不出来靶机IP。我就自己摸索到了第二个方法。适合我的。
二、两台虚拟机都设置成NAT连接。
j4y
记得改过配置后进行重启。才能生效。
这个我是测试过的。可以行得通。

实验前需要

小插曲

测试靶机IP地址
打开kali
输入ifconfig查看当前IP
但是出了个错
j4y
很无语,这个问题解决也挺简单的,就是将ifconfig加入环境变量当中
j4y
按照图中的步骤来,将ifconfig加入环境变量
主要命令

echo $PATH  #打印环境变量的内容
whereis ifconfig # ifconfig的位置

探测靶机IP
已经查出kali攻击机的IP是192.168.40.132
然后查询当前同一网段存活的IP

netdiscover -r 192.168.40.1/24

普通用户加sudo
j4y
这个是靶机IP,(挨个试出来的)
怎么判断是不是靶机IP?
用nmap扫描

nmap -sV 192.168.40.143

j4y
可以看到这个IP开启了ssh服务。
所以它就是靶机的IP。
192.168.40.143

实验开始

实验目标

非常直接——拿到flag

第一个flag

使用nmap进行信息扫描,查找有用信息。

nmap -sV 192.168.40.143

发现其开启的服务有ssh和http服务。
j4y
常用端口范围是0-1023端口,在扫描结果中查找特殊端口。
针对特殊端口进行探测,尤其对开发大端口的http服务进行排查。
看到一个不常见的端口,31337端口。是http服务的。就可以访问一下。(其他的也都是了一遍,没有发现东西)
访问查看
j4y
查看页面源代码,但是没有任何信息。
j4y
然后使用dirb命令对这个服务的隐藏文件进行探测。

dirb http://192.168.40.143:31337/

j4y
查看robots协议。robots协议是禁止爬虫爬取的地方。
j4y
挨个查看,也就三个。
找到了第一条flag
j4y

第二个flag

在上面还看到了.ssh,同样的也对它进行访问。
查看效果,对于源代码,可能会获取flag,或者下一步的提示。
挖掘ssh信息,不断访问获取更多泄露的ssh密钥信息。
j4y
查看源码后,没有找到有效信息。
然后考虑这些信息是否是一个文件,可以进行尝试。
j4y
的确是文件,进行下载。
还有第二个认证关键字文件,也要下载。
然后将私钥文件进行赋权限,赋给它可读可写的权限。
先查看它的权限

ls -alh

j4y
可以看出它并不是完全的可读可写。
可读可写的话,就可以进行ssh

ssh -i id_rsa [用户名]@192.168.40.143

用户名不知道,查看认证文件
j4y
用户名应该就是simon了。
进行连接
j4y
看到连接时需要指纹识别,然后输入yes,发现连接失败了。看信息是没有权限。然后就给权限。

chmod 600 id_rsa

j4y
看到了权限有了,重新尝试连接。
j4y
还要输入密码,但是不知道密码,就尝试输入simon还有123456之类的密码,错了三次就退出来了。
现在就是尝试深入探测信息。
解密ssh密钥信息
使用ssh2john 将id_rsa密钥转换成John可以识别的信息。
过程中发现找不到ssh2john这个命令,于是找了网上大佬的方法。
找到ssh2john的位置,然后用python直接运行。
终于可以转换成功了。
j4y
因为我的python默认设置为python3,所以要用python2区分。
然后使用John,利用字典,破解密码。

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

j4y
原本的命令是没有sudo的,但是没有执行不了,可能是因为我用的是普通用户的原因吧。这里可以看出密码是什么了。密码:starwars
再次进行ssh连接
j4y
连接成功。
但是,找来找去没有找到有用的信息、
j4y
可能登录的不是root权限,现在开始获取root权限,深入探测根目录。
j4y
在根目录找到了 flag.txt但是权限不够。
说明simon只是一个普通用户,不是root用户组里的成员。所以要提升权限。
首先查找具有root权限的文件

find / -perm -4000 2>/dev/null

查看到了这样的
j4y
这两个好像是一样,尝试cat这个文件
j4y
就这??就这啊?找到了第二个flag,还不用提升权限就得到了。
flag2{use_the_source_luke}

第三个flag

审计代码,查看

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
// 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);
    }

}

三个数组,一个是执行文件所在目录,一个空数组,一个认证的数组

char program[] = "/usr/local/sbin/message"
char buf[20];
char authorized[] = "Simon";

然后一条询问语句:What is your name?
然后将输入的内容赋值给buf
下面是重点,一个判断语句,判断输入的内容的前五个字符与这个认证数组 是否不相等。
如果不相等就打印出来我想要的内容,反之就Sorry了。
执行一下,这个文件。
j4y
提示:

Hi Simon, I hope you like our private messaging system.

I'm really happy with how it worked out!

If you're interested in how it works, I've left a copy of the source code in my home directory.

那么如果输入溢出了,会回复什么。
输入溢出,然后跳转到bin目录下,尝试一下。通过下面一条命令来提升权限

SimonAAAAAAAAAAAAAAA/bin/sh

j4y
发现已经得到了root权限,检查一下的确是root用户了。
现在应该就能cat flag.txt了吧
j4y
最后一个flag拿到了。

实验总结

总结此次学习,emmm感觉挺有意思的。回头翻一下看看自己都学到了什么知识。

  • dirb对隐藏文件的探测。
  • 强大的ssh2john进行解密。
  • 查找root用户权限的文件
  • 简单的提升权限。(以后多了解一下这个,专门学习一下)
  • 最后还有看报错。中间有几个错误进行报错了,解决报错的感觉很爽哈哈。报错大致是以下几个
  1. John无法找到此命令的解决办法
  2. linux系统中无法输入|管道符的问题解决。
  3. 溢出失败的解决(这个可能是我自己操作有问题哈,出现这个问题应该不多)。就是溢出输入后还是没有root权限。发现是操作失误,忽略掉哈哈。

文末寄语:

脚步不能达到的地方,眼光可以到达;眼光不能到达的地方,精神可以飞到。——《悲惨世界》