Kvasir

下载地址

     https://download.vulnhub.com/kvasir/kvasir1.tar

实战演练

查找靶机IP

扫描靶机开放端口

这个靶机只开放了80端口,浏览器打开80端口

遇见输入框第一次时间就要看有没有SQL注入

看到上面这个回显,sqlmap跑起,发现403错误

还有一个页面,注册一个账号

发现没有什么东西

现在没有线索可以搞,扫描一下目录,找到login.php,不过测试302跳转了

使用bp显示数据包的response

修改状态码为200

页面显示出来了

修改状态码为200

这个输入框存在命令注入漏洞

nc反弹

查看页面的源代码

看来有两张网卡

使用数据库进行操作

一个名为todo存在的表,带有一个字符串stop running mysql as root。那是第一个提示,我立刻想到了MySQL UDF,它可以使我们运行系统命令。但是,为了加载UDF,我需要一个dba级别的帐户,我还没有这个帐户。从先前的Grants输出中,可以看到我可以查询数据库服务器上的任何表,因此让我们获取一些管理哈希:

接下来破解一下mysql密码,coolwater

来到这一步,发现这个命令执行漏洞的nc反弹好麻烦,于是我使用kali自带的反弹shell

使用nc传送shell.php

使用msf进行反弹连接

设置端口转发,本地连接数据库

现在就可以连接上数据库了

查看文件

看来权限不够

如果您有一个mysqlroot用户身份运行的目标,并且对目标mysql实例具有足够的特权,则可以通过编译和加载恶意库来提升命令执行的效率。

exp

接下来,我们来编译库

用以下命令将文件的内容编码为十六进制

使用以下命令将其保存到目标服务器的磁盘上

然后我用新创建的库创建了一个新函数

好像执行成功

现在我们端口转发22端口出来

重置root登录密码

好,已经登录成功了

找到了一个flag,看来不是这个

查看本地开放的端口,就是pure-ftp有可疑,毕竟只有21端口咱们没有使用到

找到了FTP的密码

咱们根目录有一个叫.words.txt文件,可能是密码表,使用john进行爆破,还是找不到密码

其实有个问题很奇怪的,正常来说,一个靶机就只有一张网卡,但是这个靶机就不同,有两张网卡,而且是不同的网段

于是,我抓一下eth1网卡的流量,看到有人登录ftp

以十六进制的方式查看,找到了ftp账号和密码,他们使用的用户名celes和密码登录im22BF4HXn01

ssh登录上去

可以看到这是ftp连接脚本

在操作历史记录里面找到一个可疑操作,这是一个python图片隐写术的库

也就是说,图片是关键,我们找到图片kvasir.png,使用xxd导出图片

还原图片

一张很诡异的外星人图片,虽然是打不开

使用stepic,我们可以从图像中检索一些隐藏的数据k.png(pip3 install stepic,pip不可以), 这样就找到了一串十六进制的字符串

接着生成文件

因此,我们还有另一个图像文件。在默认查看器中打开会kali导致错误,拖到windows环境下就可以看到图片

解析二维码的内容,

Nk9yY31hva8q

登录时celes,我们收到邮件通知,我们去查看一下有什么邮件

在db主机那里找了terra的服务器,IP是192.168.3.50

找了个扫描器的脚本,查看这台服务器开放了那个端口

开放了22,4444端口

使用上面的密码登录ssh,发现密码错误

nc查看一下4444端口

回想起来,我记得我们在目标上找到了一个词表192.168.2.200。略过列表.words.txt,我注意到上面列表中的一项匹配。snaaa是的字谜sanaa。同样obner是的字谜borne

EXP脚本

执行之后结果显示如下,

上面这段是base64加密,我们解密一下,对此进行解码会得到一个rsa私钥。

我将密钥放入文件中并保存chmod600。然后我尝试用它来ssh作为terra192.168.3.50。系统提示您输入密钥的密码,因为它已加密,因此我使用了之前找到的字符串- Nk9yY31hva8q

查看一下目录,我们找到开放4444端口的脚本

登录后,我们收到了一封邮件通知。让我们看看那封邮件是什么。

按照邮件提示Locke存在端口敲门服务,IP是192.168.4.100,既然没有提示我们要敲击那个端口,我查了一下资料,原来有默认端口

开启了1111端口

原来这个1111端口就是一个shell

按照提示image是个关键

使用证书登录shell

登录成功后,将这个文件提取出来

提取到本地kali,解压打开

它是一个磁盘,里面有个压缩包,解压不了,需要密码

我们爆破不了密码

dd:用指定大小的块拷贝一个文件,并在拷贝的同时进行指定的转换

下载到本地之后,发现没有wav这个音频,可能xxd下来有些问题,只能靶机生成wav再用xxd下载到本地

声音超级难听=-=

使用audacity查看音频,发现有一串字符串,OrcWQi5VhfCo

使用这个密码解压压缩包,得到了一个密码

切换到kefka用户

我们看看该用户有没有特权命令

让我们来运行一下,没有什么回应

退出的时候,发现这个脚本用sock接受东西

我们监听一下端口,可以看出程序已经开放了1234端口

nc连接到1234端口

很快我们可以观察到以下几点:

  • 加密的文本总是不同的

  • 每次使用不同的键(因此如上所述)

  • 输出字符串是编码字符串的十六进制表示

  • 用过的钥匙很小

另外,脚本的名称建议使用WEP加密……或者至少与WEP一样糟糕:)

经过一些研究,我们可以使用密钥重用来进行攻击。关于它如何工作的几句话。

由于XOR的工作方式,如果重用同一密钥,则某些弱密码很容易受到密钥重用攻击。只要您知道一条加密消息的纯文本及其密钥,如果您发现另一条用相同密钥编码的未知消息,就可以提取其纯文本。让我们看以下内容:

encrypted_messageA= messageAXORkey

encrypted_messageB= messageBXORkey

如果我们将两者都异或会发生什么?请记住abc XOR abc = 0

encrypted_messageA XOR encrypted_messageB = messageA XOR key XOR messageB XOR key = messageA XOR messageB

key消失了,因为key XOR key = 0

现在假设我们知道的明文messageA并且想要找到messageB。我们需要做的就是messageA通过将整个事物与进行XOR运算来摆脱方程式的已知messageA

messageA XOR messageB XOR messageA = messageB

再次,因为messageA XOR messageA = 0

因此,知道需要做什么之后,我精心设计了以下脚本来快速获取我们的纯文本标志。

使用脚本之后获取到密码

我们需要一个root shell!我尝试将其用作root密码,但是没有用。尝试了其他一些事情,试图找到其他特权升级点,但是没有运气。

过了一会儿,我决定考虑我们接受输入的其他内容。我决定在先前攻击的应用程序中传递字符串/opt/wep2.py

进去之后就是一个python客户端

wep2.py

找到了flag,不过字符串倒转了

最后flag

最后更新于

这有帮助吗?