🌟想了解这个工具的其它相关笔记?看看这个:SQL 注入自动探测工具 —— SQLMAP 使用手册
当我们使用 SQLMAP 发现目标站点可能存在 SQL 注入漏洞后,就可以使用 SQLMAP 进行进一步的利用,比如 “GetShelll”。那么本章,笔者将继续以 SQLI LABS 靶场为例,讲解如何使用 SQLMAP 这款工具进行 SQL 注入的漏洞利用。
0x01:SQLMAP GetShell — 前提条件
SQLMAP 是支持通过 SQL 注入漏洞直接对网站进行 GetShell 的,但是这是有前提条件的:
-
当前获取的网站用户必须是 DBA(数据库管理员)。
-
攻击者需要知道网站的绝对路径。
-
GPC 为 OFF,PHP 主动转义功能关闭。(可选)
-
secure_file_priv
无限制。
对于第一个条件,则是要求当前控制的用户需要有执行写文件的权限;第二个条件是攻击者得知道写入的木马文件位置,以方便访问;第三个条件是可选的,主要是为了方便后续上传文件不被转义;第四个条件则限制了用户是否可以读写,以及进行读写的位置。
只有这上面几个条件都满足,或部分满足,我们才可以通过 SQLMAP 直接 GetShell。
0x02:SQLMAP GetShell — 实操流程
0x0201:判断当前用户是否是 DBA
在进行 GetShell 前要先通过 --is-dba
命令判断当前获取的网站用户是否是 DBMS 的 DBA,如果不是后面的也就不用进行了:
python sqlmap.py -u http://127.0.0.1/sqli-labs/Less-2/?id=1 --is-dba
0x0202:通过 --os-shell
命令 GetShell
如上,当得知我们当前用户权限为 DBA 后就可以尝试使用 --os-shell
GetShell 了,命令如下:
python sqlmap.py -u http://127.0.0.1/sqli-labs/Less-2/?id=1 --is-dba
它首先会让你选择一个后端应用的语言,我们这里使用的是 SQLI-LABS 所以选择 PHP:
选择完语言后,它又会让你选择木马写入的位置,它提供了四种选项,对应的翻译如下:
-
常见路径(这个是 SQLMAP 自己提供的常见 WEB 应用根路径)。
-
自定义路径(这个是用户通过信息收集已经发现了目标站点绝对路径的情况下使用)。
-
自定义路径字典(这个是采用用户收集的路径字典进行爆破)。
-
暴力搜索(这个是采用 SQLMAP 自己的路径字典进行爆破)。
如上,我们这里选择选项 2,并且自己提供了网站的绝对路径,点击回车后,SQLMAP 会自动往目标 Web 站点写入 Shell:
如上,执行成功后,SQLMAP 会返回后门文件的地址,并且还会提供我们一个 Shell 环境,我们可以在这里面输入命令并获取到执行结果。
0x03:SQLMAP GetShell — 原理分析
这里我们简单分析一下 SQLMAP --os-shell
的原理,先来看看我 Get Shell 前的目录:
很干净,当我给 SQLMAP 提供了写入木马的地址后,下面是我 GetShell 后的目录:
如上,SQLMAP 会给指定目录中写入两个文件:
-
tmpuevcd.php
可以让我们上传文件到网站指定路径下。 -
tmpbnfdc.php
可以让我们执行命令,其默认的连接密码是cmd
。
我们可以通过浏览器访问一下,下面是 tmpuevcd.php
的页面,是一个上传功能:
下面是 tmpbnfdc.php
,直接访问是一个空白页面:
但是你要是查看源代码就可以发现,该文件默认接收一个 cmd
参数,我们可以通过该参数在目标站点上执行命令:
总结一下,SQLMAP 的 --os-shell
的原理,就是通过数据库中的文件写入函数,往目标服务器上写入了两个 WebShell,其中一个给我们提供文件上传页面,我们可以通过该脚本上传文件到目标指定目录下。另外一个则是用于返回一个可以让我们执行系统命令的命令行,该命令行通过网页端直接为 cmd
参数赋值也可以执行命令。