freeBuf
主站

分类

云安全 AI安全 开发安全 终端安全 数据安全 Web安全 基础安全 企业安全 关基安全 移动安全 系统安全 其他安全

特色

热点 工具 漏洞 人物志 活动 安全招聘 攻防演练 政策法规

点我创作

试试在FreeBuf发布您的第一篇文章 让安全圈留下您的足迹
我知道了

官方公众号企业安全新浪微博

FreeBuf.COM网络安全行业门户,每日发布专业的安全资讯、技术剖析。

FreeBuf+小程序

FreeBuf+小程序

VnlnHub Vikings
2022-09-13 21:11:58
所属地 湖南省

靶场搭建

靶场下载地址:https://download.vulnhub.com/vikings/Vikings.ova

下载下来是虚拟机.ova压缩文件,直接用Vmvare导出就行

打开后把网络模式设置为NAT模式(桥接模式也可以,和kali攻击机保持一致就可以)

开启虚拟机

开启后发现没有自动获取ip,解决办法看我这篇文章:https://www.freebuf.com/articles/network/343723.html,解决后重启

靶机搭建完毕

渗透测试

由于不知道靶机ip,所以需要扫描NAT的网段

128是kali攻击机的ip,所以140是靶机的ip

扫描靶机端口服务开放情况

开放了22端口,存在ssh服务

开放了80端口,存在http服务,且中间件为Apache 2.4.29

访问以下WEB

首页是一个静态网页,讲述了一个故事,没有什么线索

搜索一下铭感目录,没有发现其它铭感目录


发现一个war.txt文件,里面似乎是另一个目录/war-is-over


尝试访问,成功访问,发现很大一段编码,似乎是base64编码


将其复制到cyberchef里,解码后变得更乱了,但是我们发现开头的PK,可能为某种类型文件的文件头,这应该是经过了加密或者压缩后的


所以我们看看他是什么文件类型,使用cyberchef里的Detect File Type,发现为ZIP压缩文件


确定为ZIP文件后,我们利用cyberchef自带的功能将它保存为zip文件


保存后对其解压,发现需要密码


进行密码爆破,利用john爆破,先将文件转换为john可以识别的文件,然后爆破,成功爆破,密码为ragnarok123


解压后为一个名字为king的jpeg图片


图片是隐写信息很好的载体,探测一下这个图片是否隐写了信息,使用steghide工具,在kali上敲命令可以直接下载

发现需要密码,看来真的有隐写了信息

使用binwalk分析并提取二进制文件

分析发现这个图片里还存在一个名字为user的zip文件


提取user zip文件

提示我们加上--run-as=root


提取成功


提取成功后目录下会多出一个_king.extracted的目录


user文件里的内容看起来像ssh的用户名密码,应为有个@vikings


所以我们猜测FamousBoatbuilder_floki是账号

下面那段是密码

尝试登录,登录失败



再看看用户名,前面的FamousBoatbuilder(著名的造船者)似乎是修饰,用户名可能为floki,尝试登录,登录成功


在目录下发现一个boat文件和一个readme.txt文件


cat /etc/passwd发现三个可以登录的用户


readme.txt似乎是提示我们需要‘boat’来找到(提权)到ragnar,因为我们在/etc/passwd下也找到了一个叫做ragnar的可登录用户

boat文件里提示:可打印的字符是我的盟友,num等于第29个质数


collatz-conjecture经过搜索为考拉兹猜想(英语:Collatz conjecture),又称为奇偶归一猜想、3n+1猜想、冰雹猜想、角谷猜想、哈塞猜想、乌拉姆猜想或叙拉古猜想,是指对于每一个正整数,如果它是奇数,则对它乘3再加1,如果它是偶数,则对它除以2,如此循环,最终都能够得到1。


所以boat的意思是让我们对第二十九个质数做考拉兹猜想,所得到的数的数列,其中可打印的字符(ascall可以代表的字符,256以内),就是我们要得到的

首先我们编写一段简单的python代码来计算出第二十九个质数

n = 0
for i in range(1000):
    flag = 0
    if i < 2:
        continue
    j = int(i/2) + 1
    for k in range(2,j):
        if i % k == 0:
            flag = 1
            break
    if flag == 0:
        n += 1
        print("第",n,"个质数为",i)

运行程序计算出第二十九个质数为109



再编写一个简单python做考拉兹猜想,并且输出所有ascall为256以内的字符

n = 109
num = []
num.append(n)
while n != 1:
    if n % 2 == 0:
        n =int(n / 2)
    else:
        n= int(3 * n + 1)
    if(n < 256):
        num.append(n)
print(num)
for i in num:
    j = chr(i)
    print(j,end='')

执行结果



这段字符串中还不是所有的字符都可打印

使用cyberchef的Strings模块分出所有可打印的字符,因为输出是每个字符占一行所以再用replace模块替换掉换行符方便复制密码,也要掉所有空格


尝试ssh登录,登录成功,且登录的时候似乎还自动执行了sudo命令


获得到一个flag


linux登录自动执行命令,可以通过

对于当前用户生效的
1、编辑当前主目录下的.bashrc文件添加一个指令
2、编辑当前主目录下的.profile文件
3、.bash_profile文件

对于全局用户生效的
/etc/profile

发现目录下存在两个这种文件


cat .bashrc

没有找到和sudo相关的命令


cat .profile

发现sudo运行了一个python文件


进入到这个文件的目录下


现在我们这个shell不是完整deshell,不是很方便,我们升级为/bin/bash


通过搜索我们发现这个程序也是一个客户端服务端的程序,并且这个服务端文件的运行用户为root,我们可以通过编写代码向服务端发送特殊请求来获得root用户的shell


通过官网的提示编写代码,让root用户将当前用户ragnar添加到sudo组里,使ragnar具有sudo权限

import rpyc
def shell():
    import os
    os.system("sudo usermod -a -G sudo ragnar")
conn = rpyc.classic.connect("localhost")
fn = conn.teleport(shell)
fn()


通过官网文档知道,服务端默认运行再18812端口,我们检查以下这个端口是否开放,发现正常开放


创建程序,运行程序


执行成功后,重新ssh登录ragnar用户,发现可以sudo执行刚才哪个python程序了,只不过报错了报错原因使端口被占用,此程序已经在运行


继续把我们的shell变成更方便的/bin/bash

然后运行sudo -l查看sudo权限,发现对所有程序具有sudo权限


直接通过sudo -s提权到root用户


获得最后一个flag






# 渗透测试 # 网络安全 # web安全 # 系统安全 # 网络安全技术
免责声明
1.一般免责声明:本文所提供的技术信息仅供参考,不构成任何专业建议。读者应根据自身情况谨慎使用且应遵守《中华人民共和国网络安全法》,作者及发布平台不对因使用本文信息而导致的任何直接或间接责任或损失负责。
2. 适用性声明:文中技术内容可能不适用于所有情况或系统,在实际应用前请充分测试和评估。若因使用不当造成的任何问题,相关方不承担责任。
3. 更新声明:技术发展迅速,文章内容可能存在滞后性。读者需自行判断信息的时效性,因依据过时内容产生的后果,作者及发布平台不承担责任。
本文为 独立观点,未经授权禁止转载。
如需授权、对文章有疑问或需删除稿件,请联系 FreeBuf 客服小蜜蜂(微信:freebee1024)
被以下专辑收录,发现更多精彩内容
+ 收入我的专辑
+ 加入我的收藏
  • 0 文章数
  • 0 关注者
文章目录