作者:zero
本文为SQL基本注入的进阶文章,如有任何疑问请查看:
SQL基本注入演示:https://www.cnblogs.com/anbus/p/10082452.html
导语:
利用SQL注入进行攻击来获取WebShell其实就是在向服务器写文件。(注意:这里我们需要得到网站的绝对路径)如何理解?引入余弦老哥的一句话:
黑客通过输入提交“特殊数据”,特殊数据在数据流的每个层处理,如果某个层没处理好,在输出的时候,就会出现相应层的安全问题。
也就是“输入输出”,余弦老哥举的这个例子就很精彩!
如果在存储层的数据库中没处理好,数据库的SQL解析引擎把这个“特殊数据”当做指令执行时,就产生SQL注入这样的安全问题,这段“特殊数据”可能长得如下这般:
' union select user, pwd, 1, 2, 3, 4 from users--
为什么要进行SQL注入WebShell?
在所有常用的关系数据库管理系统(RDBMS)中均包含内置的向服务器文件系统写文件的功能,通过这些内置的功能,我们可以将自己的WEBshell写目录或文件进去。
什么是web shell?
Web shell 我们可以把他拆开来看,web就是指在web服务器上,shell指的是用脚本语言编写的程序,那么,web shell就是用来管理服务器的一个工具,拥有对服务器进行操作的权限,又被称作web admin。Web shell一般是被网站管理员用于网站管理、服务器管理等等一些用途,但是由于web shell的功能比较强大,可以上传下载文件,查看数据库,甚至可以调用一些服务器上系统的相关命令(比如创建用户,修改删除文件之类的),所以经常会被黑客加以利用,通过一些上传缺陷,将自己编写的web shell上传到web服务器的页面的目录下,然后通过页面访问的形式进行渗透,或者通过插入 “一句话” 来进行渗透。
Web shell 种类:
Web shell根据脚本可以分为多种,例如:PHP脚本木马,ASP脚本木马,也有基于.NET的脚本木马和JSP脚本木马。在国外,还有用python脚本语言写的动态网页,当然也有与之相关的web shell,根据功能来区分可以分为大马和小马,小马通常就指的是一句话木马,那下面我们就来说说一句话木马。
什么是一句话木马?
一句话木马顾名思义就是只有一行代码的木马,短短的一行的代码就可以做到与大马相当的功能,为了绕过检测机制的检测,一句话木马出现过无数种变形,但是核心功能还是不变的,就是木马函数执行我们发送的信息。说到发送,正常我们发送的途径有三种:分别是 get , post , cookie。可以用这三种方式向一个网站提交数据。
一句话木马用 $_GET[' '] , $_POST[' '] ,$_COOKIE[' '] 来接受我们发送的数据,并把接收到的数据传递给一句话木马中执行命令的函数,进而执行命令。所以我们看到很多一句话木马大多数都有两个部分,一个用来接受命令,一个用来执行命令。
举个例子:
这就是一个经典的一个一句话木马,其中 post 就是使用 post 的方式来接受命令,而 eval 就是执行命令的函数,eval 在 PHP 中的意思是将收到的数据转化成 PHP 代码来执行,这样我们就能够让插了一句话木马的网站执行我们传递过去的任意php语句,是不是觉得一下豁然开朗?
演示一下一句话木马的使用:
新建立一个叫做muma.php的php文件,将它放入到www目录中
因为是post方法,所以我们用hankbar来提交数据
我们提交一个叫 phpinfo 的命令,phpinfo 的意思是展现当前php版本信息,然后提交一下
成功执行!
但是不只是 eval 这一个函数可以实现这个功能,还有很多函数可以间接或者直接的实现,而你要做的,便是想方设法进行变异来绕过某些检测机制,这些思路网上有很多,这里就不在赘述了。
常用工具:中国蚁剑的使用
不一定得是这个工具,笔者只是将用这个工具来做个科普。
中国蚁剑,一剑在手,纵横无忧!其他的多余的话咱们就不说,来做个演示:
利用蚁剑链接一句话木马
还是写入一个一句话木马,密码值是value
将其中写入到www目录里面
添加数据
然后添加数据,成功!
点击文件管理,就可以成功进入到目标服务器了。
利用SQL注入漏洞获取webshell:
从前文我们可以看出,一切一切的难度在于如何上传小马,而我们一般都是利用上传漏洞来进行上传各种大马小马,本次我们利用SQL注入来进行上传操作,以达到写入webshell的这一个操作。
select ...into outfile介绍:
正常的使用规则就是select A into outfile B,意思就是选择a的数据导入到b,常和union连用。但是有两种写法,一种是利用union的,一种是不用的。
如果要利用需要满足多种条件:
-
必须能用单引号
-
-secure-file-priv没有进行配置
-
需要绝对路径
-
对web目录有写入权限
挖洞这门艺术是运气与实力的充分展现,在get shell的过程中限制会有很多,尤其是绝对路径,有点时候有可能报错或者是直接默认路径直接就可以出来绝对路径,有的时候得通过扫后台敏感信息啊,sqlmap扫目录啊,等等多种手段才能出来,这可能也就是挖洞的魅力所在吧。
具体如何获取路径信息文章推荐:https://blog.csdn.net/wodafa/article/details/61916575
思路引导:
首先我们理顺一下思路,前提是我们已经发现这个漏洞了,是select语句类型的SQL漏洞,并且已经注入成功了,我们对这个漏洞进行进一步利用,通过测试我们发现我们拥有写入权限,并且也没有规定路径,能使用单引号,我们也知道了后台服务器的绝对路径,于是决定写入小马对漏洞进行进一步的利用。
对于构造语句,我们使用select into out file 和union进行联合使用,具体语句如下:
a ' union select 1,0x273c3f706870206576616c28245f504f53545b2776616c7565275d293b3f3e27 into outfile 'E:/PHP/PHPTutorial/WWW/muma.php'#
其中,前面的我想应该就不用讲了吧,不明白可以回顾一下前面的文章,重点在于:
0x273c3f706870206576616c28245f504f53545b2776616c7565275d293b3f3e27
这个十六进制码这个翻译过来就是:
带引号的一个小马,欸这里有人可能要问了,小马就算了,为什么还要带引号?
SQL语句因为是解释型语言,这条语句进入后台后,首先后台会解码,把十六进制转换成字符,然后再执行,而带引号的小马会被当成字符串传递到muma.php的php文件中,这时在muma.php里面就是已经变成字符串的一句话木马,但是如果不加引号,传递到muma.php 的就是未被转换的十六进制,这就是为什么要加引号的原因。
注入语句!
打开www目录,我们发现已经注入进去了
现在我们用蚁剑来进行连接
成功链接!
常见防御姿势:
-
设置 secure_file_prive = null (不允许导入和导出)
-
防止暴露网站绝对路径
-
正确设置 web 目录权限,除 log、upload 等目录外不授予写权限,upload 目录不授予执行权限
本文到此结束!