购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

2.3 Kioptrix Level 3:持续探索与摸索前行

之前的两个案例中,可利用的脆弱性都出现在比较明显的位置。而在实际的渗透测试中,可利用的漏洞不会像上述案例这样触手可得,为了获得一个可能的渗透入手点,往往需要进行非常深入且持续的枚举和探索,并将其间获得的各类信息进行组合,这样才有可能发现安全问题。在此次基于Kioptrix Level 3的实践中,将首次尝试进行此类摸索。

2.3.1 目标主机信息收集

首先依然使用nmap对目标主机进行初步探测,本例中目标主机的IP为192.168.192.131,执行如下命令:

得到的扫描结果如下。

根据nmap的扫描结果可知,该目标主机对外仅开放了22端口的ssh服务以及80端口的http服务,因此入手点依然首先考虑http服务,尝试访问http://192.168.192.131,结果如图2-34所示。

图2-34 访问http://192.168.192.131的页面

图2-34所示的页面上有多个可以继续点击的超链接,如果点击页面最下方的“now”链接,将跳转到链接http://192.168.192.131/gallery/上,如图2-35所示,从构图风格来看,该链接可能是与http://192.168.192.131/不同的独立站点。

图2-35 访问http://192.168.192.131/gallery页面的结果

如果点击http://192.168.192.131页面中的“login”按钮,则会跳转到当前站点的登录界面,如图2-36所示,根据页面信息可知,http://192.168.192.131的建站系统应为LotusCMS。

图2-36 点击http://192.168.192.131上的“login”按钮后跳转的页面

而如果点击http://192.168.192.131页面中的“blog”按钮,则会跳转到某Blog系统界面,如图2-37所示,目前Blog中存在两篇文章。

图2-37 点击http://192.168.192.131上的“blog”按钮后跳转的页面

其中第一篇文章里出现了一个新链接http://kioptrix3.com/gallery。若直接访问此链接,会被提示该链接对应的域名kioptrix3.com是没有被注册的空域名,而/gallery这个路径与刚才点击“now”链接时跳转的路径非常相近,且点击后者页面中的链接时,也会有跳转至http://kioptrix3.com的情况,证明该目标主机设置了部分页面只允许以域名的形式访问,因此需要手动将域名kioptrix3.com解析到当前目标主机的IP地址192.168.192.131上。具体操作方法为更改Kali系统的hosts文件,将kioptrix3.com和192.168.192.131以图2-38所示的形式填写到hosts文件中,其中hosts文件位于Kali系统的/etc文件夹中。

图2-38 修改hosts

保存上述操作后即可正常访问与域名kioptrix3.com有关的所有链接,所有对http://kioptrix3.com/的访问请求都会被自动解析至192.168.192.131主机上。

小贴士: 当在浏览器中输入一个URL进行访问时,本地系统会首先查看/etc/hosts文件中是否存在该URL的解析地址。若存在,则直接按指示解析至对应的IP;反之则到公网的DNS服务器中查询该URL的公网解析地址,并访问公网DNS返回的目标地址。在本例中,该URL没有被注册,意味着应该手动将该URL解析到目前的目标主机上,因此修改hosts文件后就可以实现上述效果。此外,之前提到过,被访问系统的Web中间件可能会根据访问者使用的ip形式或URL形式提供不同的结果,因此有时在收集信息的过程中分别使用ip和URL访问同一目标也会得到不同的结果。

最后顺便提一下,Windows系统的hosts文件位于C:\Windows\System32\drivers\etc\hosts中,其功能和修改方法与Linux大致相同。

目前已获得两个疑似彼此独立的Web站点目标,分别为http://kioptrix3.com和http://kioptrix3.com/gallery,可以使用dirbuster分别尝试枚举相关目标下的文件和路径,dirbuster的配置方式如图2-39所示。

图2-39 dirbuster的配置方式

枚举一段时间后,会发现http://kioptrix3.com下存在名为/phpmyadmin的路径,如图2-40所示。

访问上述路径会发现可直接通过默认无密码的admin账号登入phpmyadmin系统,如图2-41所示。

图2-40 通过dirbuster枚举http://kioptrix3.com的结果

图2-41 登录phpmyadmin系统

众所周知,MySQL数据库的管理员账号是root,因此admin明显不是具有最高权限的账号,也就是说,它没有权限创建数据库,也没有查看数据库的权限,只能显示information_schema虚拟数据库,如图2-42所示。

小贴士: information_schema数据库是MySQL 5.0版本之后引入的一种虚拟数据库的概念,它并不是实际存在的,而是一种视图(view),有点类似于“数据字典”,提供了访问数据库元数据的方式。元数据即数据的数据,所以information_schema数据库中记录的是真实存在的其他数据库的信息,如果不存在其他数据库,该虚拟数据库也就没有什么可用的信息了。

图2-42 使用admin账号登录

由于admin账号没有提供有价值的信息,而root账号的密码经过尝试确认它并非默认密码,因此只能暂时搁置该线索,若后续没有其他可用的入手点,可以尝试进行密码爆破。

2.3.2 漏洞线索1:过时的Gallarific系统

在对http://kioptrix3.com/gallery进行枚举的过程中,我们通过dirbuster发现了一个version.txt文件,如图2-43所示。

图2-43 通过dirbuster枚举http://kioptrix3.com/gallery的结果

访问上述文件后会获得一个重要信息,如图2-44所示。基于该文件内容,可知http://kioptrix3.com/gallery这个路径站点是基于Gallarific 2.1搭建的,而该应用系统的版本非常古老,为2009年发布的。

图2-44 获得一个重要信息

小贴士: 如果大家之前有过建站的经历,应该会关注到几乎所有的建站系统在部署完毕时都会提醒及时删除/install安装目录以及类似version.txt、changelog.txt这样的文件。因为这些文件或者路径会暴露当前部署的Web应用系统的相关信息,一旦该系统后续被爆出安全漏洞,攻击者就可以通过检索这些特征文件来快速确认当前站点是否存在漏洞可以利用,从而实现批量快速入侵。

通过Exploit Database搜索可知,Gallarific系统存在SQL注入漏洞,漏洞信息如下。

其exploit的下载地址为https://www.exploit-db.com/exploits/15891。

根据漏洞信息可知,我们能在目标主机的Gallarific系统上成功复现该SQL注入漏洞,如图2-45所示。

图2-45 在Gallarific系统上复现SQL注入漏洞

而之前访问主站http://kioptrix3.com时已确认其系统是LotusCMS,基于搜索引擎进行搜索,得知该系统已经停止维护,最终版本为3.0.5,发布日期是2016年1月28日,如图2-46所示。

图2-46 LotusCMS系统发布信息

2.3.3 漏洞线索2:过时的LotusCMS系统

根据之前发现的Gallarific系统为2009年版本这一线索,可以猜测上述LotusCMS系统的部署版本也不是最新。在Exploit Database上可以获得LotusCMS 3.0版本的远程命令执行漏洞exploit,具体信息如下。

其exploit的下载地址为https://www.exploit-db.com/exploits/18565。

Exploit Database提供的是依赖于Metasploit框架运行的自动化版本,通过搜索引擎可以找到另一个无须依赖Metasploit框架的exploit,其链接为https://github.com/Hood3dRob1n/LotusCMS-Exploit。

本例中使用非Metasploit版本的exploit进行测试,根据上述exploit页面的演示信息可知,需要构造如下命令来执行该exploit。

执行上述exploit后,根据反馈信息可确认目标主机的LotusCMS系统会受远程命令执行漏洞的影响,如图2-47所示。结合上述所有线索分析,可得出目前有两条可能的渗透测试路径,本例中将分别进行实践。

图2-47 针对LotusCMS系统的远程命令执行漏洞进行测试

2.3.4 渗透测试路径1:利用LotusCMS远程命令执行漏洞与内核提权

这里将继续利用前面已验证的LotusCMS系统漏洞,通过在exploit中输入Kali系统的IP以及端口号,来获得目标主机的反弹shell。本例中以Kali系统的8888端口作为反弹shell接收端口,请提前使用nc对8888端口做好监听操作,并按如图2-48所示的形式提供IP信息并选择反弹shell的执行方式,本例中选择为NetCat-e执行方式。

图2-48 在LotusCMS系统上远程命令执行漏洞反弹shell的设置

完成上述操作后,我们将成功在Kali系统的8888端口上获得一个来自目标主机系统的反弹shell连接,shell的权限为www-data,如图2-49所示。

图2-49 8888端口获得反弹shell连接

上传并执行LinEnum,借助执行结果可知,当前主机运行的是32位Linux 2.6.24-24内核的Ubuntu 8.04.3系统,如图2-50所示。

图2-50 LinEnum的执行结果

Ubuntu 8.04.3是一个非常古老的发行版本,发布日期为2009年,目前已知其存在多个内核漏洞,因此可以使用内核提权的方式来获得该系统的root权限。本例中我们将使用一个非常经典的Linux内核提权exploit——脏牛(Dirty Cow)。

小贴士: 脏牛,CVE漏洞编号为CVE-2016-5195,是一个非常经典的Linux漏洞。Linux内核在2.6.22版本以上(2.6.22内核于2007年发行)且在3.9版本以下的几乎所有发行版都受该漏洞的影响。2016年10月18日该漏洞被修复,可想而知,对于在此10年内的大部分Linux系统都可以尝试使用该漏洞进行内核提权。不过,之前有提到,内核提权属于高危操作,而脏牛又是一个具有普适性的exploit,因此使用该漏洞时有概率导致系统崩溃。

在Exploit Database搜索“Dirty Cow”会获得多个可用的漏洞结果,本例中使用如下exploit,该exploit使用的是/etc/passwd方法,相比其他使用SUID方法的脏牛,exploit在稳定性上更胜一筹。

其下载地址为https://www.exploit-db.com/exploits/40839。

注意exploit代码中提供了编译所需的选项以及使用说明,首先要将该源码上传至目标主机,然后按使用说明编译执行,并且输入root账号的新密码,本例中输入123456,如图2-51所示。

图2-51 脏牛exploit的执行过程

稍事片刻,待exploit执行成功,将会为我们在/etc/passwd文件中新建一个root权限的用户,用户名为firefart,密码为刚才设置的123456,如果获得如图2-52所示的结果,便证明exploit已成功执行。

图2-52 脏牛exploit成功执行

之后执行su命令并输入密码,即可切换到root用户。

切换至root用户的截图如图2-53所示。

图2-53 su命令的执行结果

至此,我们成功使用LotusCMS系统上的远程命令执行漏洞与脏牛内核提权方式获得了目标主机系统的root权限。

2.3.5 渗透测试路径2:借助SQL注入漏洞获取登录凭证与sudo提权

借助Gallarific的SQL注入漏洞,可使用sqlmap获得数据库中的用户登录凭证。首先使用sqlmap枚举数据库信息,具体命令如下:

执行结果如图2-54所示,从结果可知,当前数据库用户在数据库中有两个访问权限,分别是gallery和mysql。

图2-54 使用sqlmap枚举数据库信息

从名称上看,gallery数据库可能是Gallarific系统所使用的数据库,因此对其进行进一步的数据表枚举,命令如下:

枚举结果如图2-55所示,gallery数据库下有7个数据表,从名字上看可能有两个数据表包含了有价值的信息,它们分别是dev_accounts以及gallarific_users,里面涉及“账户”和“用户”含义,疑似是用于存储用户信息的。

查询Gallarific系统的使用介绍可知,gallarific_users数据表中存储的是Gallarific系统的用户账户和密码信息,因此可以通过读取该数据表获得登录Gallarific系统的admin账号,并且可尝试使用admin账号扩大利用面;根据查询结果来看,dev_accounts数据表似乎并不是Gallarifc系统所使用的,因此首先对其进行数据导出,命令如下:

导出结果如图2-56所示,dev_accounts中存储了两个账号,这两个账号均无法登录Gallarific系统,但不排除其可以用于登录目标主机的操作系统,即相关账号很可能是系统用户账号,可以进行ssh登录尝试。

图2-55 使用sqlmap枚举数据表的结果

图2-56 使用sqlmap导出数据列

小贴士: 在实际进行渗透测试时,我们发现用户在多个系统使用相同的用户名和密码的情况时有发生,这也证明了用户没有做好账户安全管理。对于在渗透过程中获得的登录凭证,尽可能多地尝试其可能有效登录的系统范围,往往会有意想不到的收获!

如果利用路径1获得的反弹shell查看目标主机系统中的/etc/passwd文件,会发现其系统中确实存在上述账号,如图2-57所示。

图2-57 目标系统中的/etc/passwd文件内容

由/etc/passwd文件的内容可知,dreg用户登录后默认使用功能受限的rbash shell;而loneferret用户的权限更高,可以默认使用bash shell,因此考虑使用loneferret用户身份登录系统。

小贴士: rbash是一种功能受限的bash shell,即它可以执行的命令被人为限制了,只有特定几种,也就是说,rbash是一种白名单限制shell,使用rbash登录的用户只允许使用管理员预先设定好的命令,可见rbash的权限很低。如果rbash中限定的命令种类设置存在疏忽,就可能导致恶意攻击者可以利用某些被错误允许执行的命令运行出一个不受限的bash shell,该操作被成为rbash逃逸,我们将在下一节实践相关测试。

使用loneferret用户身份登录系统的ssh命令如下:

输入的密码为前面所获取的starwars,登录后的界面如图2-58所示。

图2-58 使用loneferret用户身份登录

使用ls -al命令查看当前的用户目录,会发现两个疑似存在价值的文件,如图2-59所示。

图2-59 loneferret用户目录内容

其中checksec.sh文件的价值在于loneferret用户对其有可读和可执行权限,该文件属于root用户,若该文件可以被root用户定期执行,则可以在修改checksec.sh文件内容后等待root执行该文件,从而获得root权限。这是一种比较常用的间接篡改运行命令从而获得root权限的方式,阅读checksec.sh文件的内容,发现此方法在当前目标主机中并不受用,第3章会针对此方法进行实践。

CompanyPolicy.README文件的价值在于其内容,可通过cat命令查看它的内容,如图2-60所示。

图2-60 CompanyPolicy.README文件的内容

文件内容要求我们看文件、编辑文件等都要通过sudo ht命令实现,ht是一个很古老的文本编辑器,其操作指南链接为http://hte.sourceforge.net/readme.html。

执行sudo -l命令,将发现当前loneferret用户的确可以执行sudo ht命令且无须输入密码,如图2-61所示。

图2-61 sudo-l命令的执行结果

小贴士: sudo是Linux系统下的管理指令,普通用户可以通过sudo命令以root权限执行管理员设定的几个或全部程序。设定不同,每个用户被允许使用sudo执行的命令种类和数量也不同。用户可以通过sudo -l命令查看当前用户被允许使用的程序列表。此外,有些用户在使用sudo -l命令的时候也需要提供当前用户的密码,这是因为管理员对用户的设置不同。如果需要密码,那么对于使用反弹shell获得的用户身份而言,可能就无法直接查看和使用sudo命令了。

可以以sudo命令执行ht程序,这意味着通过sudo ht命令开启了一个root权限的ht编辑器,这样一来,就可以编辑一些非root权限无法修改的重要文件内容了。首先执行sudo ht命令,如果该环节报错,可以输入export TERM=xterm命令来解决,如图2-62所示。

图2-62 sudo ht命令报错的解决方法

拥有root权限的编辑器可以修改目标系统的所有敏感文件,本例中仅列举了其中三个可以获取root权限的样例。

第一个例子是使用拥有root权限的ht编辑器编辑/etc/sudoers文件,该文件包含了每个用户可以在不输入密码的情况下使用sudo命令的范围,即执行sudo -l命令时获得的输出结果。可以直接修改该文件给当前的loneferret用户添加无须使用密码执行sudo /bash命令的权限。首先使用ht编辑器打开/etc/sudoers文件,如图2-63所示。

图2-63 使用ht编辑器打开/etc/sudoers文件

之后在loneferret用户的权限设定位置的末尾添加/bin/bash,如图2-64所示。

图2-64 使用ht编辑器修改/etc/sudoers文件

最后保存退出即可。再次执行sudo -l命令,会发现loneferret用户增加了新的可以执行root权限的文件内容,即/bin/bash,如图2-65所示。

现在直接执行sudo bash命令,即可获得root权限,如图2-66所示。

图2-65 修改后sudo-l命令的执行结果

图2-66 sudo bash命令的执行结果

第二个例子是直接编辑/etc/shadow文件,该文件以加密形式保存了各系统用户的登录密码,如图2-67所示。

图2-67 /etc/shadow文件的内容

直接将图2-67中加框处root账号的密码清空,保存退出后,然后执行su root命令即可无须密码切换到root用户。

第三个例子与第二个例子的原理相近,即编辑/etc/passwd文件,在其中插入一个新的root用户,例如将如下内容插入/etc/passwd文件。

上述内容将创建一个用户名为rootwe,密码为toor的root用户,保存修改并退出,即可通过su rootwe命令并以toor密码直接切换到root用户身份。

小贴士: /etc/passwd文件存放的用户的信息是由6个分号分隔的7个信息,具体如下。

❑用户名。

❑密码(存放的是加密后的密码,如果这个位置是一个“X”,则证明密码被存放在了/etc/shadow文件)。

❑UID(用户ID),操作系统分配给用户的唯一性标识。

❑GID即群组ID,一个用户可能属于多个群组。

❑用户全名或本地账号。

❑登录后的初始目录,往往是用户/home路径下的个人目录。

❑登录时默认使用的shell,像/bin/sh、/bin/bash、/bin/rbash等。

我们可以直接在/etc/passwd文件中新增用户,并且把密码直接写在/etc/passwd文件里。

文中密码toor的密文sXuCKi7k3Xh/s是通过如下命令获得的:

上述命令使用了DES加密算法,通过随机密钥生成了toor的密文,并将该密钥写在了sXuCKi7k3Xh/s字符串中。换句话说,如果我们执行了相同的命令,获得的结果也是不同的,但这并不影响密码的认证和使用。通过DES算法加密并不是一个安全的加密方法,但是在我们进行渗透测试时,用于临时创建的账号绰绰有余。

想要了解如何使用openssl命令的其他参数生成安全性更高的密文,可以参考学习如下资料。

《openssl passwd》:https://www.cnblogs.com/f-ck-need-u/p/6089869.html。

《深入理解/etc/passwd和/etc/shadow》:https://blog.csdn.net/redwand/article/details/103469157。

就如同我们之前所言,在进行渗透测试时,让被测目标主机崩溃死机是一个非常糟糕的结果,因此在进行测试时要选择最小代价路径,尽量不要使用可能导致崩溃的高危操作。在本次实践中有两条路径,一条使用了内核提权,另一条则是相对安全的sudo提权。在实战中若有这样的选择机会,建议选择路径2,降低可能的系统崩溃风险。 mK7Gl5w+MR16sVDO42fyNNnUiCEZjxznkDPJ7jZgOCsxu0WJsMLKl0mZGXys1f/R

点击中间区域
呼出菜单
上一章
目录
下一章
×