Sqli-Labs 闯关 less 32-41
Less 32:
补充知识:宽字节注入
参考文章:
https://blog.csdn.net/helloc0de/article/details/76180190
https://blog.csdn.net/heiseweiye/article/details/82723478
下图对宽字节进行解释说明:

推荐解码网站:
http://www.mytju.com/classcode/tools/urldecode_gb2312.asp
简单来说就是,再mysql中id=1在处理时,会转换为1\',\'并不影响执行,对于id值进行处理时,是两位两位进行处理的,也就是说%5c原来代表\,但在前面加上%df后,%df%5c就被转义为了一个汉字。。。

这关就不用jsp了,我们使用php访问即可,首先输入id=1返回正确,输入id=1'返回正确,通过返回信息我们发现它在'前加了\进行注释,通过前面我们知道\'不影响对id值的处理。。。

我们查看一下本关的index.php文件,发现他对\进行了替换。。。

这里我们就可以用宽字节进行注入了。。。
方法一:我们试一下输入id=1%df'--+返回正确。。。

使用union select联合查询,id输入一个不存在的值进行回显。。。

将3替换进行查库查表查字段查数据操作,注意'security'这种的一定要转换为acsii编码。。。
方法二:我们知道%5c会被转义为\,输入id=1%5c'--+返回正确,通过返回信息我们看出它对%5c进行了处理,在%5c后又加了一个%5c。。。

可以判断出它在对id值的中的字符进行处理时,会在后面再加一个%5c。。。
方法二:自定义闭合
利用这个我们就可以进行宽字节注入,也就是在%5c前随便加一个字符,使其转义为汉字。。。

其余与方法一操作相同。。。
Less 33:
我们首先查看本关的index.php文件,与Less 32对比一下,发现Less 32使用的时自定义的过滤,本关中使用的是php中的addslashes()函数,其作用:addslashes()函数返回在预定义字符之前添加反斜杠的字符串。

参考链接:https://www.w3school.com.cn/php/func_string_addslashes.asp
与Less 32基本相同,只是本关过滤的更加全面的,但Less 32的方法都适用。。。
Less 34:
打开之后我们发现本关是用postdata进行数据传输的。。。
我们打开本关的index.php文件查看,发现它对uname和passwd的值进行了addslashes过滤。。。

我们首先输入用户名admin密码admin返回正确,然后我们使用宽字节注入,用户名a%df'密码a%df'返回错误。。。

我们使用burpsuite进行抓包,通过抓到的包我们发现它对%在post传输中会变成%25,导致无法使用%df进行宽字节注入。。。

我们将这句修改并加上union select联合查询,这里我们已知该库有2列,然后放包,发现返回正确。。。
之后我们就可以在postdata栏复制这句代码进行注入了。。。
注意post传参时的注释符为#。。。

以上为方法一:使用burpsuite进行抓包之后对数据进行宽字节注入。。。
方法二:借鉴将单引号的UTF-8转换为UTF-16的单引号模式(我在网上查不到这个符号。。。)


Less 35:
打开本关的index.php文件发现,与Less 33相同点在于都使用了addslashes()函数进行了过滤,不同点在于本关的id值没有包裹,意思也就是说注入只需要避免单引号的使用,均转换为ascii码,其余与Less 33相同。。。
Less 33:
Less 35:
使用union select联合查询,id输入一个不存在的值进行回显。。。

也可以使用基于时间的盲注,与之前相同。。。
Less 36:
首先我们查看本关的index.php文件,发现代码使用了mysql_real_escape_string()函数。。。
参考链接:https://www.w3school.com.cn/php/func_mysql_real_escape_string.asp

输入id=1返回正确,输入id=1'返回正确,输入id=1%df'--+返回正确,说明我们可以使用宽字节注入的方法,与之前相同。。。

Less 37:
与Less 34基本相似,本官只是将过滤函数进行了替换:mysql_real_escape_string(),同样我们可以直接按照Less 34关的方法即可。。。
Less 38:
补充知识:堆叠注入
参考链接:https://www.cnblogs.com/lcamry/p/5762905.html

我们在MySQL命令行中演示一下:

首先输入id=1返回成功,我们通过返回信息可以看到id=‘1’,所以我们输入id=1'--+返回成功,我们使用堆叠注入,创建名为junjie的表,返回成功。。。

在MySQL命令行中查看表创建成功。。。

Less 39:
与Less 38唯一的不同就是本关的id没有进行包裹,其余均相同。
Less 40:
与Less 38唯一的不同就是本关的id=('1')进行包裹,其余均相同。
Less 41:
与Less 39唯一的区别就是没有报错信息,其余均相同。

浙公网安备 33010602011771号