Vulnhub W34KN3SS Walkthrough
前言
最近的时间确实是比较的充裕,所以说有时间静下心来继续干这些靶机什么的,虽然说现在这些靶机的难度实在是有些难登大雅之堂,但总是会偶尔有些小惊喜。文章的行文安排如下:
- 主机发现和端口扫描
- 浏览网站
- 目录遍历
- 更改 hosts 文件
- 访问 weakness.jth
- 目录遍历
- searchsploit
- 解密公钥
- ssh 登陆
- 解码 pyc 文件
- 提权
- flag
主机发现和端口扫描
先从主机发现开始。
确定了目标主机的地址之后就开始对其进行端口扫描确定其开放的端口与对应的服务,这都是信息收集的常用套路。
可以看出,这里的主机开放了 22/80/443
端口,其中在 443
端口发现了一个可以的网址,按照经验来说,出现这种陌生的域名还是加到 hosts
文件中。一般来说出现这种陌生的东西都是要加进去的。到了这里,初步的信息收集就基本上结束了,下面开始对网站进行访问。
浏览网站
网站的主页如上图所示,没什么特别的,基本上就是一个默认的页面,经过对网页源代码的查看也没有什么值得注意的地方,所以说决定对网站的目录进行扫描。
目录扫描
使用 gobuster
对网站目录进行扫描。
顺序依次访问了一下,发现 blog
什么都没有,uploads
也是什么都没有,只是一个文件索引罢了, upload.php
引起了我的注意,尝试访问了一下。但是却在网页的注释里面发现了作者的提示:不是你看到的所有的东西都是真的,也许是个假的。所以说合理的推断,这个是一个假的上传页面,只是做出来骗人的。
更改 hosts 文件
echo '10.0.0.51 weakness.jth' >> /etc/hosts
目录遍历
既然是上面的路子都断了,那么就只能从这个 weakness.jth
上面下手了,浏览器访问一下,发现这个页面和直接访问 ip 地址产生的页面不一样了。而且上面出现了一个很突兀的单词 n30
。
发现了一个名为 private
的目录,一看就不简单啊。尝试访问。在其子目录 files
下发现了:
searchsploit
上面的这个说明已经说了,所以就去搜索一下这个东西。
使用 5622.txt
解密公钥
将其解压,然后在当前目录执行 grep -r -l 公钥加密值
,即可得到需要的文件。
SSH 登陆
按照解密的结果来看,这个目录的结构,进到我刚刚解压的那个文件夹里面,找到这个文件所在的目录。即可已使用秘钥登陆 SSH。
解码 pyc 文件
登陆之后在当前用户的家目录下面发现了一个叫做 code
的文件,使用 file
命令查看了一下发现是一个 python2
编译生成的文件,众所周知这种类型的文件是可以倒推回去的,所以说找一个在线的解密网站对其进行解密,看看是否有什么敏感信息。解码
# uncompyle6 version 3.5.0
# Python bytecode 2.7 (62211)
# Decompiled from: Python 2.7.5 (default, Nov 16 2020, 22:23:17)
# [GCC 4.8.5 20150623 (Red Hat 4.8.5-44)]
# Embedded file name: code.py
# Compiled at: 2018-05-08 23:50:54
import os, socket, time, hashlib
print ('[+]System Started at : {0}').format(time.ctime())
print '[+]This binary should generate unique hash for the hardcoded login info'
print '[+]Generating the hash ..'
inf = ''
inf += chr(ord('n'))
inf += chr(ord('3'))
inf += chr(ord('0'))
inf += chr(ord(':'))
inf += chr(ord('d'))
inf += chr(ord('M'))
inf += chr(ord('A'))
inf += chr(ord('S'))
inf += chr(ord('D'))
inf += chr(ord('N'))
inf += chr(ord('B'))
inf += chr(ord('!'))
inf += chr(ord('!'))
inf += chr(ord('#'))
inf += chr(ord('B'))
inf += chr(ord('!'))
inf += chr(ord('#'))
inf += chr(ord('!'))
inf += chr(ord('#'))
inf += chr(ord('3'))
inf += chr(ord('3'))
hashf = hashlib.sha256(inf + time.ctime()).hexdigest()
print ('[+]Your new hash is : {0}').format(hashf)
print '[+]Done'
print inf
可以在上面的代码中加上一行,让其打印出 inf
字符串来 ,省去自己一个个输入的时间。
print inf
提权
flag
root@W34KN3SS:~# cat root.txt
a1d2fab76ec6af9b651d4053171e042e