第九台靶机
第九台靶机
靶机地址:https://download.vulnhub.com/vikings/Vikings.ova
难度等级:低
打靶目标:取得 root 权限 + 2 Flag
攻击方法:
- 主机发现
- 端口扫描
- WEB信息收集
- 编码转化/文件还原
- 离线密码破解
- 隐写术
- 二进制文件提取
- 素数查找/科拉茨猜想
- Python代码编写
- RPC漏洞提权
主机发现
sudo arp-scan -l

端口扫描
sudo nmap -p- 10.0.2.10

发现就开放了22和80端口
sudo nmap -p22,80 -sV -sC 10.0.2.10

WEB信息收集
我们在对服务扫描的时候还发现了site路径,通过浏览器访问一下

这个site的加载页面极度缓慢

通过查看页面源码发现其引入了google等国外网站的脚本文件,才导致了加载如此缓慢

在这个页面上没有可利用的地方,使用目录扫描
gobuster dir -r -u http://10.0.2.10 -x txt,html,php -w /usr/share/seclists/Discovery/Web-Content/common.txt

在这个目标站点的根目录下没有发现可利用的点,但是我们还有site路径下没有扫描了

我们发现了war.txt的文件
编码转化/文件还原

这个类似是路径,我们来访问一下

这些类型base64编码的内容,使用CyberChef进行解码
http://icyberchef.com/
解码之后好像还有问题

我们在最开头发现又PK文件头,PK开头的文件一般都是打包的文件或者压缩过的文件
我们在导入Entropy商这个模块,在加解密中有个商的概念,商本来是一个热力学的概率,但是现在广泛应用到宇宙学的研究和计算机信息的研究中,如果是压缩过的数据或者加密过的数据,这个商的值会非常接近8这个最大值,如果超过7.5基本上就可以认为这个文件是由人类生成无序的内容

这个文件是加密的还是经过压缩的,如果是经过加密,那到底是使用了什么加密算法,如果是经过压缩的是用的什么压缩的方式,这时候就要用到Detect File Type这个模块了,来进行检测,发现其真实的文件格式是什么?

发现其实zip压缩格式,那我们就可以将其保存为zip格式的文件

离线密码破解
在解压,发现有密码

爆破密码,使用john进行破解,先将其转换为hash
zip2john a.zip > hash
准备好字典,我这里使用kali自带的rockyou字典其目录在/usr/share/wordlists/rockyou.txt
开始破解
john hash --wordlist=rockyou.txt

破解得到密码为ragnarok123,都有密码了就可以开始解压刚刚得到的压缩文件了

隐写术
解压得到了一张名为king的文件

看到图片,我们就可以联想到隐写术,我看可以使用steghide这款工具进行探测,发现其是否有隐藏起来的数据,如果有隐藏起来的数据还可以对数据进行提取
steghide info king

好家伙,还套娃了,这里面还有再输入一个密码,才可以得到里面的数据
又要进行爆破了,shell脚本进行破解
这里不推荐使用这种方法,当我们遇到小一点的字典倒是可以使用这个方法
for i in $(cat "rockyou.txt"); do steghide extract king -p $i; done
二进制文件提取
换个方法,我们可以使用二进制编辑的方式,直接将隐写了的数据提取出来
使用binwalk对数据进行分析一波
binwalk -B king

这个文件中有JPEG的图片文件就是我们看到的那一种图片,还发现有Zip的压缩文件,经过压缩的大小是53,解压后是92,压缩文件里面还藏着一个名字叫user的文件
使用binwalk对数据进行提取
binwalk -e king




查看一些user的格式

发现其实明文的文本文件,既然是文本文件那我们直接查看一下其中的内容呗
cat user

这个有点像ssh的登陆账号和密码
//FamousBoatbuilder_floki@vikings //f@m0usboatbuilde7
尝试登陆一波

经过翻译发现,英语不好见谅呀

前面是形容词,后面才是指人的名字,是不是我们直接用名字作为账号登陆一波试试看

惊喜,居然成功了

例行惯例,查看一下用户账号

我们在这里发现了一个新的账号,我们该如何切换账号了?
尝试直接su ragnar

那我们可以直接sudo 成一个root账号吗?
sudo -s

警告我们说,我们并不是sudo组的成员,没有运行sudo命令的权限,看来当前用户权限非常的低

素数查找/科拉茨猜想
当前目录下的发现有提示

提示我们看boat这个文件
file boat

也是一个明文的text文件


并且还给一段伪代码
第一句代码的意思是num等于第29个素数,然后对这个素数进行科拉茨猜想
https://tech.sina.com.cn/roll/2019-12-15/doc-iihnzhfz5997311.shtml

Python代码编写
使用python脚本得到第29个素数
n=0for x in range(1000000): if x < 2: continue h = int(x/2) +1 for i in range(2,h): if x % i == 0: break else: n += 1 print(n,":",x)

得到num为109
然后继续科拉茨猜想的计算
i = 109c = [i]while i != 1: if i % 2 == 1: i = i * 3+1 else: i = i // 2 if i < 256: c.append(i)print(c)
生成得到这份数值,再用cyberchef进行解码

使用Decimal模块最终的结果

还要从这些结果中筛选出可打印的字符,键盘上可以敲出来的字符,再使用strins模块

这里拿到的符号应该就是那个账号的密码了,现在是以每一字符一行显示的,我们在替换一下

得到最终的密码
mR)|>^/Gky[gz=\.F#j5P(
我们用之前获得的账号ragnar试试看

登陆成功了,但是为什么还要继续输入密码了?而且输入的还是sudo的密码,是不是我们登陆后还输入了什么程序?把刚刚得到的密码在输入一次试试看

提示我们说这个账号不是sudo组的成员,linux系统登陆自启动文件有

这两个隐藏的自启动文件,或者设置在全局变量中/etc/profile中
最后发现在.porfile中存在自动执行的文件,并且给出了路径

当前用户ragnar是sh的shell,非常古老且不友好,我们现在来提升一下
/bin/bash -i

查看一下刚刚得到的py脚本

RPC漏洞提权
这是python的rpyc程序
https://rpyc.readthedocs.io/en/latest/tutorial/tut1.html
https://blog.csdn.net/cybeyond_xuan/article/details/86493772
查看这个文件的权限发现

发现这个文件是属于root用户,其他用户都可以运行这个文件,但是其他用户没有修改权限
既然他是服务端开放的一个api接口,我们可以在客户端编写程序代码,通过某些函数提交到服务器端的侦听端口上面,然后让服务器进行执行,服务器是通过root权限执行的,如果我们可以控制这些提交上去的函数使其执行我们的代码,我们就可以获得root权限
import rpycdef shell(): import os os.system("sudo usermod -a -G sudo ragnar")conn = rpyc.classic.connect("localhost")fn = conn.teleport(shell)fn()
我们把ragnar添加到root组里面,我们就可以拥有sudo权限,有root权限
因为这个服务是开放在18812端口的

其端口是开放的,说明该服务正处于运行阶段

创建exp.py文件

在执行

如果成功下次再登陆靶机就拥有sudo权限了,开始第二次登陆

成功拿到root权限

获得第一个flag

获得第二个flag

浙公网安备 33010602011771号