CTF之SSH私钥泄露攻击

主机发现:CTF之SSH私钥泄露攻击_第1张图片
端口扫描:
CTF之SSH私钥泄露攻击_第2张图片
目录扫描:
CTF之SSH私钥泄露攻击_第3张图片
Robots.txt目录
CTF之SSH私钥泄露攻击_第4张图片
Flag1:
CTF之SSH私钥泄露攻击_第5张图片

SSH私钥泄露:

0x00:首先了解一下ssh服务公钥登录原理:

  1. 公钥登录是为了解决每次登录服务器都要输入密码的问题,流行使用RSA加密方案,主要流程包含:
  2. 登录过程:
    a) 客户端生成RSA公钥和私钥
    b) 客户端将自己的公钥存放到服务器
    c) 客户端请求连接服务器,服务器将一个随机字符串发送给客户端
    d) 客户端根据自己的私钥加密这个随机字符串之后再发送给服务器
    e) 服务器接受到加密后的字符串之后用公钥解密,如果正确就让客户端登录,否则拒绝。这样就不用使用密码了。
  3. 在此题当中,我们通过目录扫描发现了泄露的公私钥,那么我们便可以通过上面的介绍伪造用户。
    a) 首先我们可知某个正经用户的公私钥存在服务器上,那么肯定有个用户是可以登录的。
    b) 根据上面的介绍,客户端发起连接时需要使用私钥加密,然后服务端使用公钥验证。现在公钥已经存放在服务器上面了,那么我们便下载泄露的私钥信息来伪造用户身份。
    c) 假如我们不下载私钥,而直接发起连接,会因为我们使用的自己的私钥与服务端的公钥不匹配而出现问题:
    在这里插入图片描述
    d) 接下来我们使用服务端泄露的私钥进行认证登录:
    CTF之SSH私钥泄露攻击_第6张图片
    出现权限不足的问题,修改一下权限,再进行登录:
    CTF之SSH私钥泄露攻击_第7张图片
    e) 通过私钥登录,发现设置了密码,接下来我们要使用john这个工具对私钥进行猜解,找到正确的密码。
    f) 首先用ssh2john脚本,将私钥转换为john能够识别的文件。(如果没有找到,可以使用locate定位一下这个脚本)
    CTF之SSH私钥泄露攻击_第8张图片
    g) 使用john破解。这个工具的破解原理网上有教程建议参考。此处命令的原理大致是:使用zcat命令将字典密码取出,然后通过管道符传输给john进行猜解。
    CTF之SSH私钥泄露攻击_第9张图片
    h) 成功解出密码,然后再使用私钥登录。
    CTF之SSH私钥泄露攻击_第10张图片
    得到flag2:
    CTF之SSH私钥泄露攻击_第11张图片

简单栈溢出提权:

1、 首先发现所有可以以root权限运行的程序:包含我们知道源代码的read_message程序。
CTF之SSH私钥泄露攻击_第12张图片
2、 通过阅读源代码,发现read_message存在的栈溢出问题:
CTF之SSH私钥泄露攻击_第13张图片
3、 通过源代码,我们首先可以知道程序大致的意思:读取一个字符串,如果是“Simon”就调用execve函数执行program数组中存放的这个程序,如果不是,就结束程序。
4、 我们要简单介绍一下execve函数:这是一个Linux下exec函数族提供的函数,这个函数最大的特点就是调用他运行新的程序,那么这个新的程序会完全代替调用他的进程,除了进程ID一样,其他所有的数据栈,执行映像都是新的程序。对于本题而言,他会获取之前程序运行的权限,即read_message使用root运行,那么execve调用的程序也是root权限。
5、 栈结构以及溢出:根据C语言栈数据的存放方式,read_message的数据应该是这个亚子的:
CTF之SSH私钥泄露攻击_第14张图片
6、 要想覆盖掉program字符串中的数据,我们需要输入超过20个字符长度的数据,然后不安全的gets()函数,就会读取这些数据(以空格结束),然后覆盖program的值:
CTF之SSH私钥泄露攻击_第15张图片

你可能感兴趣的:(乱七八糟的知识,渗透测试)