CTF-Covfefe-WriteUp:Vulnhub

知识点:

1、利用 Join the Rippe 的 ssh2john 破解SSH私钥
2、通过简单的代码审计C语言程序来溢出提权

环境:

靶场
系统:Linux
任务:拿到2个flag
靶场IP地址:192.168.199.138
攻击机
系统:kali
地址:192.168.199.249

信息收集

拿到靶场之后使用nmap扫描一下开放端口服务

image.png

通过上面扫描结果,我们可以看到开发了22(ssh)、80(thhp)、31337(http)三个端口,其中80、31337都是web服务。
首先80端口的web页面
http://192.168.199.138
image.png

页面上没有其他的内容,只是一个nginx容器搭建的web页面,先扫扫它的目录:
image.png

没有什么特别的目录和文件,无法从80端口进行突破,换另一个端口31337
image.png

访问web后发现是由apache搭建的网站,我们继续使用工具对网站目录进行扫描
image.png

发现几个文件
http://192.168.199.138:31337/.bash_history (CODE:200|SIZE:219) http://192.168.199.138:31337/.bashrc (CODE:200|SIZE:3526) http://192.168.199.138:31337/.profile (CODE:200|SIZE:675) http://192.168.199.138:31337/.ssh (CODE:200|SIZE:43) http://192.168.199.138:31337/robots.txt (CODE:200|SIZE:70)
访问/robots.txt 后发现,也是上面扫描出来的文件内容
image.png

打开/taxes/
image.png

获得第一个falg

在扫描的结果中,有一个.ssh的文件引起我的注意,访问后页面上回显了ssh连接的私钥和公钥:


image.png

id_rsa(私钥)、authorized_keys(公钥,认证密钥)id_rsa.pub(公钥),访问以下文件可以把它们下载到本地:


image.png

下载到本地后查看公钥发现用户为simon
image.png

尝试使用私钥(id_rsa)登陆ssh
ssh -i id_rsa [email protected]


image.png

这个时候发现登陆不上,原因是因为密码不对,接下来使用ssh2john破解id_rsa(私钥)
首先查看ssh2john文件路径
locate ssh2john
image.png
/usr/share/john/ssh2john.py

然后把ssh2john.py复制到当前路进行,接下来就利用ssh2john把id_rsa(私钥)转换成john可识别hash文件

python ssh2john.py id_rsa > key

image.png

最后使用john the Ripper来破解key文件

john key
image.png

密码为:starwars


image.png

拿到密码之后进行ssh连接

chmod 700 id_rsa
ssh -i id_rsa [email protected]
user:simon
pass:starwars
image.png

登陆成功之后,我们切换到root目录下发现flag.txt但是没有权限查看


image.png

接一下就是重要的时刻了。

提权

(这部分我是不会的。。。。)
我们先来查找一下哪些文件是root权限的

find / -perm -4000 2>/dev/null
注释:
    find / 从根目录查找
    -perm -4000 具有执行权限的文件
    2>/dev/null 避免输出错误
image.png

通过搜索 root 权限的文件我们可以查看到 read_message ,是不是好像在哪里见过,对,就是在/root目录下的read_message.c文件!通过查看文件发现是一段由c语言编写的程序
cat read_message.c


image.png

image.png

通过代码审计得到了flag2为:flag2{use_the_source_luke},其中代码的意思就是:使用 strncmp函数来比较输入的内容数组,authorized(Simon)而且字符为5,第三个参数buf是数组,也就是说最大字符不能超过20,如果等于authorized(Simon)并且字符不超过authorized(Simon)那么printf打印出以下内容


image.png

不过输不等于authorized,则printf输出的内容是:
image.png

通过代码审计,buf不能超过20个字符。超过了就可以利用execve函数来让我们进行溢出得到root权限了,具体输入正确的Simon然后后面随便输入字符超过20个字符我们就可以进入到program 目录,我们可以替换为 /bin/sh
Simon000000000000000/bin/sh
image.png

image.png

参考大佬的文章

你可能感兴趣的:(CTF-Covfefe-WriteUp:Vulnhub)