网络安全菜鸟学习之漏洞篇——sql(五)

今天我们来讲一讲mysql宽字节绕过注入。老规矩,我们先来了解一下什么情况下用它。
在mysql中有一个叫魔术引号的开关,phpstudy在php配置中叫magic_quotes_gpc,(它跟addslashes()的作用完全相同,也就是说addslashes()也可以使用宽字节绕过注入):
网络安全菜鸟学习之漏洞篇——sql(五)_第1张图片
魔术引号是在接受的单引号、双引号、反斜线、NULL前加上一个反斜线进行转义。
(可以参考这篇文章:https://www.cnblogs.com/huyihao/p/6217801.html)
那它对我们的注入有什么影响呢?举个例子(如下图):
网络安全菜鸟学习之漏洞篇——sql(五)_第2张图片
所以说这就大大的影响了我们的注入。
下面我们做两个小实验,来看看影响到底有多。第一个实验还是这个语句:

http://127.0.0.1/sqli-labs-master/Less-1/index.php?id=2' and 1=1--+

我们看看开前和开后的差别。
开前:
网络安全菜鸟学习之漏洞篇——sql(五)_第3张图片
开后:网络安全菜鸟学习之漏洞篇——sql(五)_第4张图片
我们发现浏览器两次回显的结果是一样的,这是什么情况?难道我们之前讲的不正确?其实不是,来我们再来分析一下(如图):在这里插入图片描述
大家有没有感觉这东西有点眼熟,这个东西我们在《网络安全菜鸟学习之漏洞篇——sql(一)》讲到过。(如图,没影响的可以回去翻翻,可以打开那个链接再学习学习)网络安全菜鸟学习之漏洞篇——sql(五)_第5张图片
同样的道理我们这里还是等于执行了$sql=“SELECT * FROM users WHERE id=‘2’ LIMIT 0,1”;
可能还有同学有点晕,可以这样理解它只管前面的。哪怕写成西瓜:

`$sql=SELECT * FROM users WHERE id=2西瓜’ LIMIT 0,1;`

只要是字符串,它还是等于$sql=“SELECT * FROM users WHERE id=‘2’ LIMIT 0,1”
(另外提一点,这也是检验是否是注入点的一种方法:加一堆无用字符,网页回显正常证明不是注入点。)
其实我们想对我们之前讲的进行验证可以用echo函数,具体步骤如下(echo函数是用来回显的,可以简单的理解成C语言中的printf、python中的print之类)
1.打开网站根目录
网络安全菜鸟学习之漏洞篇——sql(五)_第6张图片
2.进入sqli-labs-master中的Less-1文件夹网络安全菜鸟学习之漏洞篇——sql(五)_第7张图片
3.打开index.php,并在如下图的地方添加一句echo $sql;(我是用EditPlus打开的,记事本也可以打开)
网络安全菜鸟学习之漏洞篇——sql(五)_第8张图片
好了我们这回再访问http://127.0.0.1/sqli-labs-master/Less-1/index.php?id=2' and 1=1--+就可以看到我们到底执行了什么语句。来,我们来看一下。
开启前:网络安全菜鸟学习之漏洞篇——sql(五)_第9张图片
开启后:网络安全菜鸟学习之漏洞篇——sql(五)_第10张图片
顺便再看看西瓜:
网络安全菜鸟学习之漏洞篇——sql(五)_第11张图片
第一个实验完成,我们来进行第二个实验,这个实验目的是看看它的影响。(毕竟前面的看不出来)我们访问的地址是:http://127.0.0.1/sqli-labs-master/Less-1/index.php?id=-2' union select 1,database(),3--+
开启前:网络安全菜鸟学习之漏洞篇——sql(五)_第12张图片
开启后:网络安全菜鸟学习之漏洞篇——sql(五)_第13张图片
现在我们就很明显看得出影响了。
好了,讲完了魔术引号的原理现在开始讲宽字节绕过注入的原理和使用。
其实讲了魔术引号,这个的原理大家猜都猜得出来。说简单点魔术引号会加\,那我们就想办法让它加的\没用就行了。宽字节绕过注入就是用一个两个字节的东西覆盖掉后面的\,看一下下面这张图就可以很容易理解。(这样理解好理解,但跟准确的说法是MySQL在使用GBK编码的时候,会认为两个字符是一个汉字。当然有个前提条件前一个ASCII码要大于128,才到汉字的范围)网络安全菜鸟学习之漏洞篇——sql(五)_第14张图片
我们一般是用%df来进行宽字节注。例如:
http://127.0.0.1/sqli-labs-master/Less-1/index.php?id=-2%df%27%20union%20select%201,database(),3--+网络安全菜鸟学习之漏洞篇——sql(五)_第15张图片

注:用第一关做宽字节的话,要加一句mysql_query(“SET NAMES gbk”);不加的话默认就会变成utf8,哪怕在怕phpstudy的端口常规设置中修改为GBK编码也不行。(我在网上找了很多文章都没有提到这点,我也是问别人才知道的)
具体的修改步骤如下图:
1.打开网站根目录
网络安全菜鸟学习之漏洞篇——sql(五)_第16张图片
2.进入sqli-labs-master中的Less-1文件夹
网络安全菜鸟学习之漏洞篇——sql(五)_第17张图片
3.打开index.php,并在如下图的地方添加一句mysql_query(“SET NAMES gbk”);
网络安全菜鸟学习之漏洞篇——sql(五)_第18张图片

值得注意的PHP 在4以上时magic_quotes_gpc将不再被使用,但还是有addslashes()。
(ps:求各位看官给点评论和关注)

你可能感兴趣的:(网络安全,安全,网络)