Still Shines.

Vulnhub渗透笔记之Rotating Fortress:1.0.1(上)

Word count: 1.8k / Reading time: 7 min
2018/10/03 Share

前言

刚开始以为这只是个普通的题目,嗯,心想经历了这么多套路,这肯定也没什么的。但事实证明我错了。出题人的脑洞是真的大,触及到知识盲区的时候,也是毫无办法。勉强拿到第四个flag。剩下的真的是参考了大神的解法。

题目描述:服务器的管理员宙斯从他的项目“旋转城堡”中退出了,但他不希望这个项目随着他的退休而取消。为了找到这个项目的继任者,他提出了一个挑战。你能进入旋转城堡,逃离孤立,拿到root权限吗?

基本信息

已经知道靶机ip地址为:192.168.1.130,用nmap进行端口扫描:

扫描结果显示虚拟机开启了80端口,和一个不知道干什么的27025端口。

Flag 1

先浏览器访问80端口:

页面显示我不是管理员,访问被限制了。url上的janus.php中的janus是罗马神话的开端之神,就理解为门神吧。这些题目中其实夹杂着很多神话人物,但是作者并没有把他们联系地很紧密。所以对解题没什么帮助,看看就好。

题目信息给的这么少,源码也是没什么东西,那应该能在数据包中有所发现,就用burpsuite抓包看看:

看到我们发送的请求中Cookie一栏有一个isAdmin=0。那应该很明显了,我们把它改为1再发送。就得到了如下的页面,拿到了第一个flag。

Flag 2

根据第一个flag提示的路径,我们进入一个新网页。背景是一个动态图,一个旋转的城堡,难怪题目叫这个名字。

网页上有三个超链接的地方,home就是刚才看到的,再先查看下news:

显示了三段加密后的密文,现在也想不出有什么规律,先放一放。

第三个wheel界面,好像访问受限:

看看页面查看源码呢?发现有一行注释,告诉我们的东西也是模模糊糊的,Loki不就是北欧神话的吗。

以上都没发现什么有价值的,那接着还是用dirb扫描路径:

发现存一个rotbots.txt,这让人眼前一亮,打开它:

显示了两个路径,先访问/icons/loki.bin,会提示下载一个文件loki.bin:

访问第二个路径是用户名密码:

第二个路径的名字为eris.php,eris是希腊女神,象征着冲突和不和谐,这么奇怪的网页名字,意味着,这个网页没什么用。(事实证明,在多次尝试后,这个网页确实只是个摆设,和后面的解题并没有任何联系。)

先看下载下来的文件。首先用cat查看了一下里面的内容,看着看着,就在里面直接看到了flag,还包括那段密文的解码:

flag2就这样拿到了?简直太容易了吧!之后看攻略才知道,这其实不是正确步骤。

正确的步骤在这里(我又做了一遍……):
先给这个文件运行权限,运行后要我们输入密码:

但密码是啥呢,这里需要反编译了,我们使用dbg:

代码不多,很简单的一个程序,从其中发现一行跳转到验证密码的代码:
我们用break在这个地方设置断点,然后让程序运行:

之后可以发现,我们随便输入的密码上面有一行字符串,这就是真正的密码:xBspsiONMSNXeVuiomF
然后继续运行程序,输入密码后,显示得到flag2和之前消息的中密文的解密提示:

Flag 3

密文是使用凯撒加密的方式,也就是说,明文转为ascll码,并使之加上某一个数值后,也就是key,再转为字符。我们需要多次尝试吧key找到,或者直接暴力破解,猜测key在1-99之间,我们此时需要编写一个脚本帮助我们破解:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
#!/usr/bin/env python

import sys
import re

#放入密文
data = """|125||104||120||118||++||107||100||118||++||100||118||110||104||103||++||112||104||++||119||114||++||112||100||110||104|
|++||100||113||++||104||113||102||114||103||104||117||++||105||114||117||++||114||120||117||++||120||115||103||100||119|
|104||118||//||++||119||107||108||118||++||108||118||++||112||104||++||119||104||118||119||108||113||106||++||108||119|
|++||114||120||119||//||++||108||105||++||108||119||++||122||114||117||110||118||++||108||++||122||108||111||111||++|
|101||104||++||118||104||113||103||108||113||106||++||108||119||++||119||114||++||119||107||104||++||117||104||118||119|
|++||114||105||++||124||114||120||++||100||118||++||122||104||111||111||++||100||118||++||100||++||103||104||102||114|
|103||104||117||//||++||119||108||117||//| """

#去掉密文中除了数字以为的符号,并分三个为一组,因为这里解码为第三消息,是三个一组的
newdata = re.sub("\D","",data)
n=3 //如果解码第一个消息和第二个消息,则n=2
splitted =[newdata[i:i+n] for i in range(0,len(newdata),n)]
integers = map(int, splitted)

def decode(key):
plaintext = ''
for char in integers:
plaintext = plaintext + chr(char - key) //解码第一个和第二个消息的时候是(char + key)
if re.match('^[A-Za-z]+$',plaintext)://正则匹配,如果存在非英文字母的,则不显示
print plaintext

def key():
k=0
while k<=99:
decode(k)
k += 1

key()

这个脚本是用python写的,时间紧迫,所以特别简陋,不要过分在意ToT。。。。

用脚本解密第一个消息:

1
zeushereafteralongtimeofthinkingihavedecidedtoretirefromprojectrotatingfortresshoweveridonotwanttokilltheprojectwithmyretirementsoiampresentingyouallachallengeihavesetupapuzzleontheserverifyoucangetpastallpuzzlestheserverisyoursbythewayihaveremovedeverybodiesloginsfromtheserverexpectminesothiswontbeeasytakethisitmightbeusefuledvqyhwmfvqrducqjbzumysrwdgmfdhtgoodluck

第二个消息:

1
wewillberestrictingaccesstotheserveruntilfurthernoticeforaneventanthena

第三消息:

1
zeushasaskedmetomakeanencoderforourupdatesthisismetestingitoutifitworksiwillbesendingittotherestofyouaswellasadecodertir

整理一下,不然真的看不懂:

Zeus here after a long time of thinking I have decided tore tire from project rotating fortress however I do not want to kill the project with my retirement so I am presenting you all a challenge I have set up a puzzle on the server if you can get past all puzzles the server is yours by the way I have removed everybodies logins from the server expect mine so this won’t be easy take this it might be useful edvqyhwmfvqrducqjbzumysrwdgmfdht good luck

第二个消息:

we will be restricting access to the server until further notice for an event anthena

第三消息:

Zeus has asked me to make an encoder for our updates this is me testing It out if it works I will be sending it to the rest of you as well as a decoder tir

只有第一个消息存在有价值的信息,粗体显示的就是,但是这串东西暂时也不知道有什么用。

再看看其他路径:

这个路径或许也有意思:

http://192.168.1.130/LELv3FfpLrbX1S4Q2FHA1hRtIoQa38xF8dzc8O9z/resources/

访问之后发现路径中存在一个gif图和一个mp4文件,gif图就是home主页上的旋转城堡,它上面也显示了一行密文:

解码后发现密文的意思是inside,难道这张图有东西?

把gif图下载到本地后,cat查看:

在经历了很长一串乱码之后,在最后面显示了flag3,并且已经有一段密文,当然正规的做法还是使用字符查看,命令如下:

小结

现在我们拿到了前三个flag,目前来讲难度都不大。这道题总共7个flag,但要拿到最后一个flag还是困难重重的。对我来讲,还有很多知识点需要深入学习,对于端口试探这一部分欠缺的知识也是需要恶补啊。所以这只是第一部分,等到最后一个flag拿到之后,再把剩下的部分上传上来。

CATALOG
  1. 1. 前言
  2. 2. 基本信息
  3. 3. Flag 1
  4. 4. Flag 2
  5. 5. Flag 3
  6. 6. 小结