前言
这个比较好玩,玩一下。
实验环境
ssh-私钥泄露靶机
kali攻击机
安装靶机
然后设置虚拟机的联网方式,因为是自己的靶机,不知道IP地址,所以前期工作需要安排一下。kali的网络连接方式要设置成和ssh-私钥泄露的一样。
因为我前段时间不知道怎么设置,所以探测不到靶机IP,导致没办法做这个实验。今天又看到它了,决定玩一下。下面给出两种设置方法,可以都尝试一下并选择适合自己配置的方法。
重要设置
一、两台虚拟机都设置成桥接,如图所示
两个都设置成这样。就可以等下一步去测试IP地址了。
不过我使用这个办法行不通,而且看了几个博客,都是这么设置的。我死活都探测不出来靶机IP。我就自己摸索到了第二个方法。适合我的。
二、两台虚拟机都设置成NAT连接。
记得改过配置后进行重启。才能生效。
这个我是测试过的。可以行得通。
实验前需要
小插曲
测试靶机IP地址
打开kali
输入ifconfig查看当前IP
但是出了个错
很无语,这个问题解决也挺简单的,就是将ifconfig加入环境变量当中
按照图中的步骤来,将ifconfig加入环境变量
主要命令
echo $PATH #打印环境变量的内容
whereis ifconfig # ifconfig的位置
探测靶机IP
已经查出kali攻击机的IP是192.168.40.132
然后查询当前同一网段存活的IP
netdiscover -r 192.168.40.1/24
普通用户加sudo
这个是靶机IP,(挨个试出来的)
怎么判断是不是靶机IP?
用nmap扫描
nmap -sV 192.168.40.143
可以看到这个IP开启了ssh服务。
所以它就是靶机的IP。192.168.40.143
实验开始
实验目标
非常直接——拿到flag
第一个flag
使用nmap进行信息扫描,查找有用信息。
nmap -sV 192.168.40.143
发现其开启的服务有ssh和http服务。
常用端口范围是0-1023端口,在扫描结果中查找特殊端口。
针对特殊端口进行探测,尤其对开发大端口的http服务进行排查。
看到一个不常见的端口,31337端口。是http服务的。就可以访问一下。(其他的也都是了一遍,没有发现东西)
访问查看
查看页面源代码,但是没有任何信息。
然后使用dirb命令对这个服务的隐藏文件进行探测。
dirb http://192.168.40.143:31337/
查看robots协议。robots协议是禁止爬虫爬取的地方。
挨个查看,也就三个。
找到了第一条flag
第二个flag
在上面还看到了.ssh
,同样的也对它进行访问。
查看效果,对于源代码,可能会获取flag,或者下一步的提示。
挖掘ssh信息,不断访问获取更多泄露的ssh密钥信息。
查看源码后,没有找到有效信息。
然后考虑这些信息是否是一个文件,可以进行尝试。
的确是文件,进行下载。
还有第二个认证关键字文件,也要下载。
然后将私钥文件进行赋权限,赋给它可读可写的权限。
先查看它的权限
ls -alh
可以看出它并不是完全的可读可写。
可读可写的话,就可以进行ssh
ssh -i id_rsa [用户名]@192.168.40.143
用户名不知道,查看认证文件
用户名应该就是simon了。
进行连接
看到连接时需要指纹识别,然后输入yes,发现连接失败了。看信息是没有权限。然后就给权限。
chmod 600 id_rsa
看到了权限有了,重新尝试连接。
还要输入密码,但是不知道密码,就尝试输入simon还有123456之类的密码,错了三次就退出来了。
现在就是尝试深入探测信息。
解密ssh密钥信息
使用ssh2john 将id_rsa密钥转换成John可以识别的信息。
过程中发现找不到ssh2john这个命令,于是找了网上大佬的方法。
找到ssh2john
的位置,然后用python直接运行。
终于可以转换成功了。
因为我的python默认设置为python3,所以要用python2区分。
然后使用John,利用字典,破解密码。
zcat /usr/share/wordlists/rockyou.txt.gz | sudo john --pipe --rules rsacrack
原本的命令是没有sudo的,但是没有执行不了,可能是因为我用的是普通用户的原因吧。这里可以看出密码是什么了。密码:starwars
再次进行ssh连接
连接成功。
但是,找来找去没有找到有用的信息、
可能登录的不是root权限,现在开始获取root权限,深入探测根目录。
在根目录找到了 flag.txt但是权限不够。
说明simon只是一个普通用户,不是root用户组里的成员。所以要提升权限。
首先查找具有root权限的文件
find / -perm -4000 2>/dev/null
查看到了这样的
这两个好像是一样,尝试cat这个文件
就这??就这啊?找到了第二个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了。
执行一下,这个文件。
提示:
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
发现已经得到了root权限,检查一下的确是root用户了。
现在应该就能cat flag.txt了吧
最后一个flag拿到了。
实验总结
总结此次学习,emmm感觉挺有意思的。回头翻一下看看自己都学到了什么知识。
- dirb对隐藏文件的探测。
- 强大的ssh2john进行解密。
- 查找root用户权限的文件
- 简单的提升权限。(以后多了解一下这个,专门学习一下)
- 最后还有看报错。中间有几个错误进行报错了,解决报错的感觉很爽哈哈。报错大致是以下几个
- John无法找到此命令的解决办法
- linux系统中无法输入
|
管道符的问题解决。 - 溢出失败的解决(这个可能是我自己操作有问题哈,出现这个问题应该不多)。就是溢出输入后还是没有root权限。发现是操作失误,忽略掉哈哈。
文末寄语:
脚步不能达到的地方,眼光可以到达;眼光不能到达的地方,精神可以飞到。——《悲惨世界》
- 本文链接:https://m0re.top/posts/d77071c4/
- 版权声明:本博客所有文章除特别声明外,均默认采用 许可协议。
您可以点击下方按钮切换对应评论系统,
Valineutterances