sqlmap --os-shell执行原理(mysql篇)

sqlmap --os-shell执行原理

对于mysql数据库来说,--os-shell的本质就是写入两个shell文件,其中的一个可以让我们用来执行命令,而另外一个,如果在网站访问的话,可以让我们可以上传文件。

说到写入shell,就要说一下两个限制条件,首先,我们需要知道上传文件的两个限制条件,首先我们要知道网站的绝对路径(我们的shell写入到哪里),然后要有导入导出的权限。

导入导出的权限在mysql数据库中是由secure_file_priv参数来控制的,当这个参数后面为null时,表示不允许导入导出,如果为具体文件夹时,表示仅允许在这个文件夹下导入导出,如果后面没有值(为空)时,表示可以在任何文件夹下导入导出。

当mysql 5.7版本以上的时候,secure_file_priv参数的值默认为null,也就是说,如果管理员没有修改过这个参数后面的数值的话,我们没办法在5.7以上版本使用--os-shell。

过程演示

(本次实验环境是本机上搭建的sqli-libs,目的为了研究--os-shell的原理,所以假设我们已知网站绝对路径)

首先,我们先打开sqli-labs,找一个页面添加参数,然后放置到sqlmap中,测试是否为dba权限。

可以看到,我们拥有dba的权限,接下来就可以使用--os-shell了。

这里需要关注一下红框框起来的地方,在一般正常渗透测试情况下,可能在成功执行--os-shell之后,不会给出这个提示信息,我们将这句话翻译一下。

可以看到,在我们成功执行了--os-shell之后,sqlmap对目标服务器写入了两个文件,一个是tmpugjwq.php,一个是tmpbvjfi.php,首先,这两个里面肯定有一个文件的目的是为了让我们能够执行系统命令,另外一个文件的目的是什么,我们可以直接在网页上访问一下。

假设第二个文件是让我们执行命令的文件。

假设是成立的,第一个文件的目的是给我们写了一个文件上传的页面,让我们可以通过这个页面上传脚本文件。

然后,我们可以去网站根目录看一下这两个文件里面的内容

tmpbvjfi.php

在开始看到这个文件的时候,我以为这是个一句话木马,尝试以cmd为密码使用蚁剑进行连接,但是最后发现无法成功连接,随后尝试在url里面往cmd传参,发现该文件给我们返回了一个cmdshell,我们可以直接通过该文件在网站url里面执行系统命令。

tmpugjwq.php

这个脚本是写了一个文件上传的页面,那我们尝试往网站上上传一个phpinfo,看能否成功执行。

上传成功,尝试访问。

文件执行成功。

总结

从刚才的实验结果来看,sqlmap的--os-shell在mysql数据库中的原理,其实就是往服务器上写入了两个shell,其中一个给我们提供了一个文件上传的页面,可以通过这个上传页面上传脚本文件到当前目录下,另外一个则是返回了一个可以让我们执行系统命令的命令行,命令行也可以在网页url中通过对cmd参数传参执行系统命令。

posted @ 2020-11-10 01:46  小明-o3rr0r  阅读(6109)  评论(0编辑  收藏  举报