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

2.2 Kioptrix Level 2:SQL注入引发的蝴蝶效应

在实际的渗透测试实战中,对攻击目标的渗透过程往往不会像Kioptrix: Level 1这样简单直接,在前期信息收集阶段如此直接地发现可以获得权限的漏洞的机会寥寥,此时就需要基于一些其他的、非直接获得系统权限的漏洞来进一步获取目标主机上有价值的信息,从而间接为后续获得权限提供帮助。其中比较常用的测试方法为通过XSS漏洞获取合法用户的登录凭证,并利用相关凭证获得合法用户的应用操作权限,从而收集更多的信息或进行一些需要授权才能执行的操作;通过CSRF漏洞构建恶意指令骗取管理员点击操作,并执行其中的恶意代码;对有SQL注入漏洞的站点进行“拖库”,并从中获取登录账号等信息。本次实践将以Kioptrix Level 2主机为例,介绍一个通过SQL注入漏洞逐步扩大攻击面,最终成功获取root权限的实战案例。

2.2.1 目标主机信息收集

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

得到的扫描结果如下:

根据扫描结果可知,目标主机在80端口对外开放了http服务,访问http://192.168.192.130,结果如图2-15所示。

图2-15 访问http://192.168.192.130的结果

根据页面内容可推测此为某应用系统的登录界面,从这种漫不经心的构图设计来看,该系统安全方面很可能会存在风险。

小贴士: 在进行渗透测试时,如果有幸碰到了一个在设计上明显不符合当下审美风尚的系统,那么你应该好好关注一下此类系统的安全性,因为此类系统多半是被遗忘多年的陈旧设施,或者是该组织自行研发的小众应用,无论是哪种情况,此类系统的安全性往往要低于其他目标,可以作为重点突破方向。

使用Burpsuite抓包,随意填写用户名和密码,点击登录后,Burpsuite会拦截到POST请求数据包,如图2-16所示。

2.2.2 漏洞线索1:表单数据与SQL注入

由图2-16可知上述系统的登录请求数据包格式,复制该数据包的内容,将其保存为文件,命名为sqlmap。在保存该文件的目录下开启一个终端,输入如下命令,使用sqlmap进行SQL注入漏洞测试。

图2-16 Burpsuite拦截到的登录POST请求数据包

稍事片刻后,sqlmap会检测出该POST请求中的uname和psw这两个参数都存在SQL注入漏洞,如图2-17所示。

图2-17 sqlmap的检测结果

2.2.3 利用SQL注入漏洞枚举数据库信息

由于uname和psw这两个参数上存在的SQL注入漏洞类型相同,因此可以任意选择其中一个参数作为继续利用该漏洞的注入点,本例中使用psw参数进行数据库枚举,命令如下:

检测结果如图2-18所示,根据枚举结果可以得知目标主机系统使用的数据库名称为webapp。

图2-18 使用psw参数进行数据库枚举检测

继续对数据库webapp中的数据表进行枚举,命令如下:

检测结果如图2-19所示,从中可以得知数据库webapp中只有一个数据表,名为user。

图2-19 基于数据表进行枚举检测

继续对user表中的具体数据列进行枚举,命令如下:

检测结果如图2-20所示,从中可以得知user表中有三个数据列,其名分别为id、password以及username。

图2-20 基于数据列进行枚举检测

从数据列的名称可以看出,其中的username以及password数据列极有可能包含了用户名和密码信息。因此尝试使用如下命令将上述两个数据列的具体内容导出。

导出结果如图2-21所示,从中可以成功获得两个用户的有效登录凭证,具体如下。

图2-21 导出特定数据列的内容

❑用户名:admin,密码:5afac8d85f。

❑用户名:john,密码:66lajGGbla。

2.2.4 漏洞线索2:Web授权后远程命令执行漏洞

从用户名上看,admin用户可能会拥有更高的权限,所以首先使用admin账户登录。

使用admin账号成功登录后,该应用系统将跳转到一个新页面,如图2-22所示。

图2-22 使用admin账号登录后的界面

从页面的说明来看,该应用系统的功能是用户在文本框中输入一个IP地址并提交后,该系统将对此IP地址执行ping命令。

先尝试正常使用上述功能,输入Kali系统的IP,本例中Kali系统的IP为192.168.192.128,大家需要基于自己的Kali系统中的ifconfig命令获得IP后进行填写。

点击submit按钮后,执行结果如图2-23所示。

图2-23 执行ping命令的结果

命令被正常执行,并获得了“ping 192.168.192.128”命令的执行结果。

如果在Kali系统中打开一个终端,同样输入“ping 192.168.192.128”的命令,将发现在终端中获得的结果格式与上述应用系统返回给我们的完全相同。那这是否会意味着实际上该应用系统就是在后端将我们提交的参数使用终端来执行的呢?为证实该假设,可以尝试在应用系统文本框中输入其他的系统命令,如果同样能够获得对应的执行结果,就可以成功证实假设是正确的,后续可以利用这一特性。

该阶段将用到一个新知识点,根据上述猜测,我们提交的IP地址在应用系统中被修改为“ping+输入的IP地址”的格式传输到了终端,例如刚才输入的192.168.192.128,应用系统应该是生成了一条“ping 192.168.192.128”的命令,而在终端中实际上可以通过使用分号的形式将多条命令整合成一条命令进行传输,例如向终端输入“ping 192.168.192.128;whoami”命令,会分别收到ping命令和whoami命令的结果。

下面对当前应用系统进行上述尝试,在输入的IP后面加分号,并输入whoami,如图2-24所示。

提交后执行结果如图2-25所示,如同猜想的情况一样,whoami命令也被成功执行,并返回了当前执行该终端命令的用户名apache,这预示着我们获得了一个授权后远程命令执行漏洞(Authenticated Remote Command Execution)。

小贴士: 授权后远程命令执行漏洞的设计本意是合法用户需要提供用户名和密码才能登录系统,登录后可以使用系统中的相关功能执行受限制的特定命令来获得执行结果。而在实际的研发过程中我们发现,如果没有对合法用户的输入命令进行限制和转义,且用户名和密码等登录凭证又有可能被攻击者获取的话,那么攻击者就可以使用合法登录凭证进入系统,并且可利用不受限的接口执行恶意命令。

图2-24 尝试构建多条命令

图2-25 尝试构建多条命令后的执行结果

确认了上述漏洞的存在,如图2-26所示,可以直接构造如下获得反弹shell的命令,同时提前在本地Kali系统中通过nc-lvnp 8888命令做好端口监听。

执行上述命令后,将在Kali系统的8888端口获得一个来自目标主机的反弹shell连接,且用户身份为apache用户,如图2-27所示。

图2-26 构建获得反弹shell的命令

图2-27 获得反弹shell连接

2.2.5 目标主机本地脆弱性枚举

接下来需要尝试提权至root权限,本例中向该目标主机上传LinEnum进行本地脆弱性枚举,首先要在目标主机本地系统中选择一个我们拥有写权限的目录,Linux下常用的相关目录有/tmp/目录以及/dev/shm/目录等,本例中使用/dev/shm/目录上传LinEnum,在赋予其执行权限后通过./LinEnum.sh命令执行,如图2-28所示。

图2-28 上传并执行LinEnum

如图2-29所示,基于LinEnum提供的系统信息可以得知,目标主机系统是基于Linux 2.6内核的32位CentOS 4.5,属于相当古老的系统版本,存在多个已知的内核级提权漏洞。

图2-29 LinEnum的执行结果

2.2.6 本地脆弱性:操作系统内核漏洞

在Exploit Database上搜索“Linux 2.6 CentOS”将获得如图2-30所示的5项可用结果。

图2-30 在Exploit Database上的搜索结果

其中适用于内核版本为Linux 2.6.9且为32位CentOS 4.5系统的exploit如下。

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

同时还有一个看似系统版本覆盖面很广,可能适用于此次攻击目标的exploit,即:

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

分别针对上述exploit进行尝试,在反弹shell中输入gcc命令,根据执行结果可确认目标主机系统已安装gcc编译器,因此可以直接将上述两个exploit源码下载至Kali系统,然后通过wget上传给目标主机进行编译。

2.2.7 内核提权与“Kernel panic”

上传并编译执行exploit(https://www.exploit-db.com/exploits/9479)的过程如图2-31所示。

图2-31 exploit(https://www.exploit-db.com/exploits/9479)的编译执行结果

执行上述exploit后,目标主机系统长时间没有反馈,通过VMware查看目标主机的状态,发现目标主机已经崩溃,并显示“kernel panic”,如图2-32所示。

图2-32 目标主机崩溃

2.2.8 内核提权经验教训与方式改进

显示此类结果,意味着我们提权失败,并导致目标主机瘫痪……

小贴士: 在实际的渗透测试中,将目标主机操作至崩溃死机应该算是最糟糕的结果之一了。作为渗透测试工程师,应该极力避免这样的情况发生,具体做法就是在操作相对危险的指令或流程时要尽可能评估并选择代价最小的方法。本例中内核提权就是一个高危操作,我们找到了两个可能的内核提权exploit,其中一个针对性较强,明显适合当前被攻击主机的内核版本;另一个看起来更加普适,可用的提权目标范围更广,但其直接导致系统崩溃。可见,应该选择针对性更强的前者作为内核提权这一高危操作的执行方法,毕竟越强的针对性,意味着越小的不确定性,这样才能尽可能地降低额外的风险。

至此,只能重启目标主机,使用上述流程重新获得一个apache用户权限的反弹shell,并上传https://www.exploit-db.com/exploits/9542对应的exploit源代码,然后以如图2-33所示的方式编译和执行。

图2-33 exploit(https://www.exploit-db.com/exploits/9542)的编译执行结果

根据exploit的执行结果可知,该操作成功获得了root权限,也就意味着此目标主机已完全被控制。

回溯对该目标主机的渗透流程,我们通过SQL注入漏洞获得Web应用系统的登录权限,并利用授权后应用系统中存在的远程命令执行漏洞获得了apache用户权限的反弹shell,最终通过内核提权方式获得root权限。在该流程中,谁也不会提前想到一个SQL注入漏洞会引发如此大的蝴蝶效应,所以进行渗透测试时,尽量不要放过任何一个可能的机会,毕竟没有人可以提前确定某个漏洞是否可以帮助我们扩大测试面,以及是否能带给我们新的渗透路径。 psFr66c3bDrBc/ff9ZW9Peh6J7VnGYe/ip8Adb4DEDEz9vp1L60AWH6kGzs3s+Kl

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