
环境配置
攻击机(kali) IP:192.168.56.102
靶机(搭建在virtualbox)IP:192.168.56.105
靶机难度:中低
靶机地址:https://www.vulnhub.com/entry/vikings-1,741/
主机发现
使用nmap进行主机发现,
发现192.168.56.105为新增加的IP,即为靶机IP。
端口探测
主要使用nmap对目标主机进行开放端口探测,端口运行服务的探测,服务详细信息探测,nmap自带脚本库进行探测。
发现主机开放了22,80两个端口,22端口运行着ssh服务,80端口运行着web服务
web渗透
使用浏览器进行查看80端口的信息,,发现uog目录,打开是一个界面
这里响应了很长时间,感觉有问题。查看网页源代码。
查看页面源代码发现是由于页面在加载的时候请求了许多资源导致了页面响应变慢。
web界面很普通,所有的链接都是假的。并且网站没有robots.txt,接下来对网站目录进行探测。
发现网站根目录下仅仅有site,接下来对site下跌目录进行爆破,
发现war.txt文件,这里对文件进行查看
看到了一个类似目录的字符串,这里对这个目录进行访问
这里发现了大量字符,判断应该是编码文件,这里使用github上的工具cyberchef对字符串进行处理,
很明显的base64编码,这里使用cyberchef进行解码,但是解码后的文件更加混乱,这里猜测这些数据是经过某种加密算法或者是压缩文件。这里看到PK开头,这一般表示文件的头部信息
上网搜索发现是一个zip文件,当然也可以使用采用cyberchef的entorpy模块,这个模块是用来计算信息的信息熵的,信息的信息熵越大,表明数据的无序性越大,而数据压缩的方法就是剔除文件中重复次数多的字符或使用短的字符代替,
发现这里的信息熵的值接近最大值8,一般来说,信息熵大于7.5就表明数据的无序性非常大了,在使用file模块进行文件类型的确定,
这里已经确定文件类型为zip,直接创建zip文件,将数据导入进去。进行解压,但是发现需要密码。
这里使用john工具进行破解,但是要注意,使用john破解密码时,应该将文件转换为john能够识别的哈希文件,将哈希文件作为John的输入,才能对文件进行破解,具体操作如下:
首先使用zip2john 压缩文件名.zip > 哈希文件名生成哈希文件,在使用john 哈希文件名 --wordlist=指定字典 进行破解,这里成功破解出密码为ragnarok123,进行解压文件
解压以后发现只有一张图片,图片中并没有任何信息,这里考虑是不是有什么信息隐写在图片里面,使用binwalk查看是否存在隐写信息(Binwalk是一种流行的二进制文件分析工具,可在Kali Linux等类Unix操作系统中使用。它提供了一种简单的方法来分析二进制文件,特别是固件文件,以识别其中嵌入的文件系统,压缩文件,加密文件,隐藏的图像以及其他文件类型和结构),
这里的确发现里面存在一个zip文件,使用-e参数对文件进行提取,
提取生成了一个名为_king.extracted文件夹,进入文件夹发现里面有一个user文件,对文件进行查看,发现两个字符串,这里看到@符号猜测是ssh登陆的信息,这里尝试进行ssh登陆,发现floki是用户名,下面一串字符是密码,成功登陆。
提权
信息收集,发现用户没有在sudoer组里面,没有自动任务,查看当前目录的信息,
发现readme.txt文件,并且里面提示我们要使用boat,查看boat文件
发现是一段伪代码,里面分别是:可打印字符是你的盟友,定义一个变量是第29个质数,进行考拉兹猜想,搜索可得考拉兹猜想是对任意一个数字如果是奇数就乘三加一,偶数就除以2,最后都会变成1,那么这段伪代码就提示我们要对第29给质数进行考拉兹猜想,并且将每次计算得到的数字进行ascii解码,找到其中可打印的部分。同时查看/etc/passwd文件发现了用户ragnar。所以得到的字符串就是用户ragnar的密码。
这里使用简单python脚本进行计算。
生成质数的python脚本如图所示,
可以看到第29个质数为109,这里再使用python用于计算考拉兹猜想,编写如下脚本:
可以看到所有可以打印出的字符,使用cyberchef进行还原字符
第一个模块用于将编码转换为字符串,第二个用于输出可打印的字符串,将这串字符作为密码进行ragnar的ssh密码进行登录
在使用第三个模块将所有的换行转换为空,得到密码。
第二次提权
这里看到在我们登陆系统以后执行了sudo语句,但是我们并没有在sudoer组里面,所以并不能执行sudo命令,这里应该要先找到sudo语句执行了什么命令,这里应该找配置文件,用户登陆自动执行的配置文件,有.bashrc、.profile、(有的会有bash_profile),/etc/profile(全局的)这里进行逐一查看,在.profile中找到如下文件:
找到对应的py文件,部分代码如下:
发现调用了rpyc库,这是一个服务端的接口,可以进行python环境下的rpc(远程进程调用),客户端向服务器发送数据,运用服务端执行相关功能,
同时查看文件的权限,发现文件是root用户的,但是所有人都可以执行,这里尝试构造客户端代码是服务端执行指令。编写如下脚本:
导入rpyc模块,进行连接本地18812端口(默认开启18812端口),执行自定义函数square,函数内容是调用系统命令将ragnar用户添加到sudoers组中。查看18812端口是否开放
开放状态,运行脚本以后,重新使用ragnar用户登陆ssh,此时用户已经在sudoers组中,使用sudo -s执行提权
两个flag:
个人声明:
本文为原创,是根据苑老师2021年的打靶课,自己进行实操完成的,文章中所有用到的工具脚本都是苑老师在视频中所使用的,我也在文章中将详细的解释了进行每一部分的原因以及有哪些条件。本人打靶时间时2023年,所以原视频中有些因为语言环境的版本更迭导致的问题我也会在文章的最后给出再补充,希望文章可以帮助到初学者。最后,支持原创,谢谢。
如需授权、对文章有疑问或需删除稿件,请联系 FreeBuf 客服小蜜蜂(微信:freebee1024)